Bigger Applications¶
When your project grows in size you might want to put the application to multiple files.
.
├── app
│ ├── __init__.py
│ ├── main.py
│ ├── conditions.py
│ ├── arguments.py
│ └── tasks
│ ├── __init__.py
│ ├── morning.py
│ └── evening.py
Note
We use __init__.py
files to make
importing easier from the tasks. This
structure enables us importing the conditions
by from app.conditions import my_cond
.
Files¶
Here is a quick explanation of the files and what you could put in each:
app/__init__.py
¶Marks the directory as a package. You can leave these empty.
app/main.py
¶Entry point to the application. This
It could look like:
from rocketry import Rocketry from app.tasks import morning, evening app = Rocketry() # Set Task Groups # --------------- app.include_grouper(morning.group) app.include_grouper(evening.group) # Application Setup # ----------------- @app.setup() def set_repo(logger=TaskLogger()): repo = SQLRepo(engine=create_engine("sqlite:///app.db"), table="tasks", model=MinimalRecord, id_field="created") logger.set_repo(repo) @app.setup() def set_config(config=Config(), env=EnvArg("ENV", default="dev")): if env == "prod": config.silence_task_prerun = True config.silence_task_logging = True config.silence_cond_check = True else: config.silence_task_prerun = False config.silence_task_logging = False config.silence_cond_check = False if __name__ == "__main__": app.run()
Read more from the app settings cookbook.
app/conditions.py
¶Put your custom conditions here.
For example:
from rocketry.conds import condition @condition() def my_cond(): return True or False
app/arguments.py
¶Put your custom parameters here. For example:
from rocketry.args import argument @argument() def my_value(): return "Hello"
You can also nest these and pass an argument as to another argument with
FuncArg
similarly we set in the task.app/tasks/...
¶Put your tasks here. Use also groups and put the groups in the app in
app/main.py
to avoid problems in importing.For example,
app/tasks/evening.py
could look like this:from rocketry import Grouper from app.conditions import my_cond from app.parameters import my_value group = Grouper() @group.task(my_cond) def do_things(arg=my_value): ...
Note
There are various ways to set the tasks. You can use other patterns as well.
Running¶
Then you can run this as a Python module:
python -m app.main
Or alternatively create a script that imports and launches the app:
from app.main import app
app.run()
Note
You can also turn this to a package using setup.py
or add CLI by creating __main__.py
file.