Files
antigravity-skills-reference/web-app/public/skills/dbos-python/references/pattern-classes.md

1.6 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Use DBOS Decorators with Classes MEDIUM Enables stateful workflow patterns with class instances classes, dbos_class, instance, oop

Use DBOS Decorators with Classes

DBOS decorators work with class methods. Workflow classes must inherit from DBOSConfiguredInstance.

Incorrect (missing class setup):

class MyService:
    def __init__(self, url):
        self.url = url

    @DBOS.workflow()  # Won't work without proper setup
    def fetch_data(self):
        return self.fetch()

Correct (proper class setup):

from dbos import DBOS, DBOSConfiguredInstance

@DBOS.dbos_class()
class URLFetcher(DBOSConfiguredInstance):
    def __init__(self, url: str):
        self.url = url
        # instance_name must be unique and passed to super()
        super().__init__(instance_name=url)

    @DBOS.workflow()
    def fetch_workflow(self):
        return self.fetch_url()

    @DBOS.step()
    def fetch_url(self):
        return requests.get(self.url).text

# Instantiate BEFORE DBOS.launch()
example_fetcher = URLFetcher("https://example.com")
api_fetcher = URLFetcher("https://api.example.com")

if __name__ == "__main__":
    DBOS.launch()
    print(example_fetcher.fetch_workflow())

Requirements:

  • Class must be decorated with @DBOS.dbos_class()
  • Class must inherit from DBOSConfiguredInstance
  • instance_name must be unique and passed to super().__init__()
  • All instances must be created before DBOS.launch()

Steps can be added to any class without these requirements.

Reference: Python Classes