Skip to content

[Question] automatic migrations. #238

@adrianlocurciodenode

Description

@adrianlocurciodenode

Is there a way to create migrations automatically based on model changes ? For instance I have some models in ./app/models.py and I would like to run:

pw-migrate create --auto-source app.models --database sqlite:///config/app.db add_permissions_table

in order to automatically get a migration named add_permissions_table which will contain all code to create all missing tables.

Instead of getting that I'm getting an empty migration with this:

def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
    """Write your migrations here."""
    


def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
    """Write your rollback migrations here."""

Is this library supporting automatic migrations ?

BTW when I run the command with --auto option instead of --auto-source I get the following error:

Traceback (most recent call last):
  File "/usr/local/bin/pw-migrate", line 8, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/peewee_migrate/cli.py", line 135, in create
    router.create(name or "auto", auto=auto_source if auto and auto_source else auto)
  File "/usr/local/lib/python3.9/dist-packages/peewee_migrate/router.py", line 113, in create
    models = [m for module in modules for m in load_models(module)]
  File "/usr/local/lib/python3.9/dist-packages/peewee_migrate/router.py", line 113, in <listcomp>
    models = [m for module in modules for m in load_models(module)]
  File "/usr/local/lib/python3.9/dist-packages/peewee_migrate/router.py", line 327, in load_models
    modules = [module] if isinstance(module, ModuleType) else _import_submodules(module)
  File "/usr/local/lib/python3.9/dist-packages/peewee_migrate/router.py", line 359, in _import_submodules
    modules += _import_submodules(module)
  File "/usr/local/lib/python3.9/dist-packages/peewee_migrate/router.py", line 356, in _import_submodules
    module = spec.loader.load_module(name)
  File "<frozen importlib._bootstrap_external>", line 469, in _check_name_wrapper
  File "<frozen importlib._bootstrap_external>", line 969, in load_module
  File "<frozen importlib._bootstrap_external>", line 794, in load_module
  File "<frozen importlib._bootstrap>", line 271, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 613, in _exec
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/workspace/frigate/frigate/detectors/detector_types.py", line 40, in <module>
    Union[tuple(BaseDetectorConfig.__subclasses__())],
  File "/usr/lib/python3.9/typing.py", line 268, in inner
    return func(*args, **kwds)
  File "/usr/lib/python3.9/typing.py", line 345, in __getitem__
    return self._getitem(self, parameters)
  File "/usr/lib/python3.9/typing.py", line 452, in Union
    raise TypeError("Cannot take a Union of no types.")
TypeError: Cannot take a Union of no types.

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions