Add three DBOS SDK skills with reference documentation for building reliable, fault-tolerant applications with durable workflows. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
62 lines
1.6 KiB
Markdown
62 lines
1.6 KiB
Markdown
---
|
|
title: Use DBOS Decorators with Classes
|
|
impact: MEDIUM
|
|
impactDescription: Enables stateful workflow patterns with class instances
|
|
tags: 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):**
|
|
|
|
```python
|
|
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):**
|
|
|
|
```python
|
|
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](https://docs.dbos.dev/python/tutorials/classes)
|