spinta 0.2.dev21__tar.gz → 0.2.dev23__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spinta-0.2.dev21 → spinta-0.2.dev23}/PKG-INFO +1 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/pyproject.toml +1 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/auth.py +33 -26
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/admin.py +12 -8
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/admin/components.py +1 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/admin/registry.py +4 -0
- spinta-0.2.dev23/spinta/cli/helpers/admin/scripts/enums.py +148 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/message.py +6 -2
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/script/components.py +1 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/script/core.py +5 -7
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/script/helpers.py +2 -2
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/backends/postgresql/schemas.py +3 -2
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/components.py +2 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/config.py +2 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/json/commands/read.py +1 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/commands/read.py +13 -1
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/commands/read.py +5 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/query/ufuncs.py +21 -6
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/helpers.py +25 -2
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/exceptions.py +6 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/client.py +0 -2
- spinta-0.2.dev23/spinta/testing/csv.py +13 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/config.py +5 -0
- spinta-0.2.dev23/spinta/types/partial/link.py +63 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/ref/link.py +3 -1
- spinta-0.2.dev21/spinta/testing/csv.py +0 -8
- spinta-0.2.dev21/spinta/types/partial/link.py +0 -48
- {spinta-0.2.dev21 → spinta-0.2.dev23}/LICENSE +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/README.rst +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/__main__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/accesslog/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/accesslog/file.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/accesslog/python.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/adapters/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/adapters/rc/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/adapters/rc/signature_adapter.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/adapters/soap_plugins.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/api/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/api/inspect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/api/schema.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/api/validators.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/asgi.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/constants.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/decode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/encode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/validate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/commands/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/fs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/auth.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/encode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/commands/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/memory/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/encode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/validate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/commands/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/array/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/array/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/file/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/file/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/object/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/types/object/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/mongo/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/commands/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/nobackend/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/column.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/encode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/constants.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/model.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/property.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/array.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/datatype.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/file.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/geometry.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/object.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/ref.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/string.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/migrate/types/text.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/redirect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/summary.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/validate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/commands/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/constants.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/files.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/exceptions.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/extractors.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/migrate/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/migrate/actions.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/migrate/cast.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/migrate/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/migrate/name.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/name.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/redirect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/type.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/helpers/validate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/sqlalchemy.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/array/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/array/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/array/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/array/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/array_backref/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/array_backref/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/backref/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/backref/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/denorm/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/denorm/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/external_ref/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/external_ref/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/file/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/file/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/file/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/file/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/geometry/encode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/geometry/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/geometry/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/object/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/object/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/object/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/object/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/ref/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/ref/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/ref/validate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/text/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/types/text/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/result/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/result/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/postgresql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/backends/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/auth.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/config.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/data.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/get.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/admin/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/admin/scripts/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/admin/scripts/changelog.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/admin/scripts/deduplicate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/auth.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/data.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/errors.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/backends/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/backends/postgresql/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/backends/postgresql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/export/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/delete.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/error.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/state.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/sync.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/utils.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/push/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/script/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/script/registry.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/store.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/api_helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/data_service.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/dataset.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/distribution.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/dsa.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/synchronization/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/synchronization/connection.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/controllers/synchronization/manifest_catalog_to_agent.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/enum.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/sync/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/typer.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/registry.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/backends/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/backends/postgresql/comments.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/clients.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/keymaps/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/initial_setup.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/modified_time.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/redirect_support.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/helpers/upgrade/scripts/redirect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/inspect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/keymap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/main.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/pii.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/pull.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/push.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/server.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/show.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/sync.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/cli/upgrade.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/client.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/auth.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/search.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/version.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/commands/write.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/compat.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/config.yml +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/core/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/core/access.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/core/config.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/core/context.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/core/enums.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/core/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/csv/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/csv/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/csv/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/csv/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/json/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/json/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/json/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/memory/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/xml/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/xml/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/xml/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/backends/xml/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/commands/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/notimpl/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/notimpl/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/notimpl/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/notimpl/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/notimpl/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/types/geometry/encode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/base.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/commands/cast.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/constants.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/dialect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/formats.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/identifier.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/introspection.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/log4j.properties +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/types.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sas/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/cast.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/column.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/query/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/result/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/result/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/commands/inspect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/commands/wait.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/sqldump/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/wsdl/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/wsdl/commads/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/wsdl/commads/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/wsdl/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/error.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/inspect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/commands/wipe.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/enums.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/inspect/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/inspect/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/inspect/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/inspect/commands/merge.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/inspect/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/inspect/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/keymaps/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/keymaps/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/keymaps/redis.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/keymaps/sqlalchemy.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/keymaps/sync.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/utils.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/comments/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/comments/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/comments/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/enum/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/enum/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/enum/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/enum/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/enum/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/lang/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/lang/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/lang/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/param/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/param/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/param/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/param/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/prefix/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/prefix/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/prefix/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/prefix/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dimensions/prefix/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/dispatcher.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/fetcher.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/ascii/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/ascii/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/ascii/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/ascii/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/csv/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/csv/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/csv/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/html/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/html/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/html/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/html/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/json/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/json/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/json/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/jsonlines/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/jsonlines/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/jsonlines/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/rdf/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/rdf/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/xlsx/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/xlsx/commands.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/formats/xlsx/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/hacks/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/hacks/spyna.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/hacks/urlparams.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/handlers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/logging_config.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifest/_ns.yml +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifest/_schema/version.yml +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifest/_schema.yml +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifest/_txn.yml +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/commands/sync.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/backend/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/auth.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/error.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/init.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/inspect.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/dict/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/dict/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/dict/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/dict/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/dict/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/dict/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/auth.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/backend.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/commands/read.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/internal_sql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/memory/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/memory/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/memory/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/memory/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/memory/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/mermaid/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/mermaid/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/mermaid/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/openapi_config.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/open_api/openapi_generator.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/rdf/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/rdf/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/rdf/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/rdf/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/rdf/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/sql/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/sql/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/sql/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/sql/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/sql/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/sql/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/constants.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/formats/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/formats/gsheets.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/tabular/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/xsd2/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/bootstrap.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/configure.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/migrate.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/commands/sync.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/manifests/yaml/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/methods.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/middlewares.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/naming/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/naming/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/naming/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/naming/ufuncts.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/nodes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/renderer.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/spyna.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/templates/base.html +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/templates/data.html +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/templates/error.html +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/templates/form.html +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/cli.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/config.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/context.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/data.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/datasets.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/dtypes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/manifest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/migration.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/push.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/pytest.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/request.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/tabular.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/types/geometry.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/testing/utils.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/array/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/array/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/array/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/array/resolve.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/backref/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/backref/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/command.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/datatype.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/denorm/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/denorm/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/denorm/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/file/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/file/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/file/decode.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/file/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/geometry/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/geometry/constants.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/geometry/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/geometry/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/inherit/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/inherit/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/model.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/namespace.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/object/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/object/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/object/link.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/partial/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/ref/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/ref/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/ref/resolve.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/store.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/text/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/text/check.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/text/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/text/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/types/text/load.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/typing.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/binds.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/changebase/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/changebase/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/changebase/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/changebase/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/common.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/linkbuilder/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/linkbuilder/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/linkbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/loadbuilder/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/loadbuilder/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/loadbuilder/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/loadbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/propertyresolver/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/propertyresolver/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/propertyresolver/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/querybuilder/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/querybuilder/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/querybuilder/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/querybuilder/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/requestparamsbuilder/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/requestparamsbuilder/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/requestparamsbuilder/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/requestparamsbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/resultbuilder/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/resultbuilder/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/resultbuilder/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/resultbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/summaryenv/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/summaryenv/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/ufuncs/summaryenv/ufuncs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/units/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/units/components.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/units/helpers.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/urlparams.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/__init__.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/aiotools.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/changes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/collections.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/config.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/data.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/encoding.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/enums.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/errors.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/functools.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/idgen.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/imports.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/itertools.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/json.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/naming.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/nestedstruct.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/nin.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/passwords.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/path.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/refs.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/response.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/schema.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/scopes.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/sqlalchemy.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/sqlite.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/starlette.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/streams.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/tree.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/types.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/units.py +0 -0
- {spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/utils/url.py +0 -0
|
@@ -58,6 +58,7 @@ from spinta.exceptions import (
|
|
|
58
58
|
InvalidClientsKeymapStructure,
|
|
59
59
|
InvalidScopes,
|
|
60
60
|
InvalidClientFileFormat,
|
|
61
|
+
ModelNotFound,
|
|
61
62
|
)
|
|
62
63
|
from spinta.utils import passwords
|
|
63
64
|
from spinta.utils.config import get_clients_path, get_keymap_path, get_id_path, get_helpers_path
|
|
@@ -858,40 +859,46 @@ def authorized(
|
|
|
858
859
|
scope_formatter: ScopeFormatterFunc = None,
|
|
859
860
|
):
|
|
860
861
|
config: Config = context.get("config")
|
|
862
|
+
|
|
863
|
+
# Disable access to nodes that have lower access level than config.access
|
|
864
|
+
if config.access > node.access:
|
|
865
|
+
if throw:
|
|
866
|
+
raise ModelNotFound(model=node.name)
|
|
867
|
+
return False
|
|
868
|
+
|
|
861
869
|
token = context.get("auth.token")
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
870
|
+
|
|
871
|
+
# Unauthenticated clients can only access nodes if spinta config.access is open.
|
|
872
|
+
unauthenticated = token.get_client_id() == get_default_auth_client_id(context)
|
|
873
|
+
|
|
874
|
+
if unauthenticated and config.access < Access.open:
|
|
866
875
|
if throw:
|
|
867
876
|
raise AuthorizedClientsOnly()
|
|
868
877
|
else:
|
|
869
878
|
return False
|
|
870
879
|
|
|
871
|
-
#
|
|
880
|
+
# Add explicit node scope
|
|
872
881
|
scopes = [node]
|
|
873
882
|
|
|
874
|
-
#
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
if ns:
|
|
894
|
-
scopes.extend(ns.parents())
|
|
883
|
+
# Add parent node scopes
|
|
884
|
+
ns = None
|
|
885
|
+
if isinstance(node, Property):
|
|
886
|
+
# Hidden nodes also require explicit scope.
|
|
887
|
+
# XXX: `hidden` parameter should only be used for API control, not
|
|
888
|
+
# access control. See docs.
|
|
889
|
+
if not node.hidden:
|
|
890
|
+
scopes.append(node.model)
|
|
891
|
+
scopes.append(node.model.ns)
|
|
892
|
+
ns = node.model.ns
|
|
893
|
+
elif isinstance(node, Model):
|
|
894
|
+
scopes.append(node.ns)
|
|
895
|
+
ns = node.ns
|
|
896
|
+
elif isinstance(node, Namespace):
|
|
897
|
+
ns = node
|
|
898
|
+
|
|
899
|
+
# Add all parent namespace scopes too.
|
|
900
|
+
if ns:
|
|
901
|
+
scopes.extend(ns.parents())
|
|
895
902
|
|
|
896
903
|
# Build scope names.
|
|
897
904
|
scope_formatter = scope_formatter or config.scope_formatter
|
|
@@ -2,15 +2,14 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import pathlib
|
|
5
|
-
import sys
|
|
6
5
|
from typing import Optional, List
|
|
7
6
|
|
|
8
7
|
from typer import Context as TyperContext, Argument
|
|
9
8
|
from typer import Option
|
|
10
|
-
from typer import echo
|
|
11
9
|
|
|
12
10
|
from spinta.cli.helpers.admin.components import ADMIN_SCRIPT_TYPE
|
|
13
11
|
from spinta.cli.helpers.admin.registry import admin_script_registry
|
|
12
|
+
from spinta.cli.helpers.message import cli_error
|
|
14
13
|
from spinta.cli.helpers.script.components import ScriptStatusCache
|
|
15
14
|
from spinta.cli.helpers.script.core import run_specific_script
|
|
16
15
|
from spinta.cli.helpers.script.helpers import sort_scripts_by_required
|
|
@@ -48,26 +47,30 @@ def admin(
|
|
|
48
47
|
False,
|
|
49
48
|
"-c",
|
|
50
49
|
"--check",
|
|
51
|
-
help=
|
|
50
|
+
help="Only runs script checks, skipping execution part (used to find out what scripts are needed to run).",
|
|
52
51
|
),
|
|
53
52
|
input_path: Optional[pathlib.Path] = Option(
|
|
54
53
|
None,
|
|
55
54
|
"-i",
|
|
56
55
|
"--input",
|
|
57
|
-
help=
|
|
56
|
+
help="Path to input file (some scripts might require extra data). If not given, script will read from stdin.",
|
|
57
|
+
),
|
|
58
|
+
output_path: Optional[pathlib.Path] = Option(
|
|
59
|
+
None,
|
|
60
|
+
"-o",
|
|
61
|
+
"--output",
|
|
62
|
+
help="Path to output file (some scripts might write extra data). If not given, script will write to stdout.",
|
|
58
63
|
),
|
|
59
64
|
):
|
|
60
65
|
context = configure_context(ctx.obj)
|
|
61
66
|
|
|
62
67
|
if force and check_only:
|
|
63
|
-
|
|
64
|
-
sys.exit(1)
|
|
68
|
+
cli_error("Cannot run force mode with check only mode")
|
|
65
69
|
|
|
66
70
|
load_config(context, ensure_config_dir=ensure_config_dir)
|
|
67
71
|
|
|
68
72
|
if not scripts:
|
|
69
|
-
|
|
70
|
-
sys.exit(1)
|
|
73
|
+
cli_error("At least one script needs to be specified")
|
|
71
74
|
|
|
72
75
|
script_objects = {}
|
|
73
76
|
for script in scripts:
|
|
@@ -86,5 +89,6 @@ def admin(
|
|
|
86
89
|
script_name=script,
|
|
87
90
|
check_only=check_only,
|
|
88
91
|
input_path=input_path,
|
|
92
|
+
output_path=output_path,
|
|
89
93
|
status_cache=status_cache,
|
|
90
94
|
)
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from spinta.cli.helpers.admin.components import AdminScript, Script, ADMIN_SCRIPT_TYPE
|
|
4
4
|
from spinta.cli.helpers.admin.scripts.changelog import migrate_changelog_duplicates, cli_requires_changelog_migrations
|
|
5
5
|
from spinta.cli.helpers.admin.scripts.deduplicate import migrate_duplicates, cli_requires_deduplicate_migrations
|
|
6
|
+
from spinta.cli.helpers.admin.scripts.enums import gather_invalid_enum_values
|
|
6
7
|
from spinta.cli.helpers.script.components import ScriptTarget, ScriptTag
|
|
7
8
|
from spinta.cli.helpers.script.registry import script_registry
|
|
8
9
|
from spinta.cli.helpers.upgrade.components import Script as UpgradeScript, UPGRADE_SCRIPT_TYPE
|
|
@@ -29,3 +30,6 @@ script_registry.register(
|
|
|
29
30
|
targets={ScriptTarget.BACKEND.value},
|
|
30
31
|
)
|
|
31
32
|
)
|
|
33
|
+
script_registry.register(
|
|
34
|
+
AdminScript(name=Script.ENUM_LIST.value, run=gather_invalid_enum_values, targets={ScriptTarget.BACKEND.value})
|
|
35
|
+
)
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import csv
|
|
2
|
+
import pathlib
|
|
3
|
+
import sys
|
|
4
|
+
from contextlib import nullcontext
|
|
5
|
+
from typing import Iterator
|
|
6
|
+
|
|
7
|
+
from multipledispatch import dispatch
|
|
8
|
+
from dataclasses import dataclass, field
|
|
9
|
+
|
|
10
|
+
from spinta import commands
|
|
11
|
+
from spinta.backends import Backend
|
|
12
|
+
from spinta.backends.postgresql.components import PostgreSQL
|
|
13
|
+
from spinta.cli.helpers.script.helpers import ensure_store_is_loaded
|
|
14
|
+
from spinta.components import Context, Model, Property
|
|
15
|
+
from spinta.core.ufuncs import Expr
|
|
16
|
+
from spinta.manifests.components import Manifest
|
|
17
|
+
|
|
18
|
+
import sqlalchemy as sa
|
|
19
|
+
|
|
20
|
+
from spinta.ufuncs.resultbuilder.components import EnumResultBuilder
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dispatch(Backend, Property)
|
|
24
|
+
def gather_unique_property_values() -> list:
|
|
25
|
+
raise NotImplementedError
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dispatch(PostgreSQL, Property)
|
|
29
|
+
def gather_unique_property_values(backend: PostgreSQL, prop: Property) -> list:
|
|
30
|
+
table = backend.get_table(prop)
|
|
31
|
+
column = backend.get_column(table, prop)
|
|
32
|
+
result = backend.engine.execute(sa.select(column).distinct()).scalars().all()
|
|
33
|
+
return result
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dispatch(Property)
|
|
37
|
+
def gather_unique_property_values(prop: Property) -> list:
|
|
38
|
+
return gather_unique_property_values(prop.dtype.backend, prop)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def get_models_with_enums(context: Context, manifest: Manifest) -> Iterator[Model]:
|
|
42
|
+
for model in commands.get_models(context, manifest).values():
|
|
43
|
+
for prop in model.flatprops.values():
|
|
44
|
+
if prop.enum:
|
|
45
|
+
yield model
|
|
46
|
+
break
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class InvalidEnumProperty:
|
|
51
|
+
prop: Property
|
|
52
|
+
invalid_values: list = field(default_factory=list)
|
|
53
|
+
|
|
54
|
+
def add_invalid_value(self, value: object):
|
|
55
|
+
if value not in self.invalid_values:
|
|
56
|
+
self.invalid_values.append(value)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class InvalidEnumModel:
|
|
61
|
+
model: Model
|
|
62
|
+
enum_props: dict[str, InvalidEnumProperty] = field(default_factory=dict)
|
|
63
|
+
|
|
64
|
+
def add_invalid_value(self, prop: Property, value: object):
|
|
65
|
+
self.get_prop(prop).add_invalid_value(value)
|
|
66
|
+
|
|
67
|
+
def get_prop(self, prop: Property) -> InvalidEnumProperty:
|
|
68
|
+
if prop.place not in self.enum_props:
|
|
69
|
+
self.enum_props[prop.place] = InvalidEnumProperty(prop=prop)
|
|
70
|
+
return self.enum_props[prop.place]
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def gather_invalid_enum_values(context: Context, output_path: pathlib.Path | None = None, **kwargs):
|
|
74
|
+
store = ensure_store_is_loaded(context)
|
|
75
|
+
manifest = store.manifest
|
|
76
|
+
invalid_models = {}
|
|
77
|
+
with context:
|
|
78
|
+
for model in get_models_with_enums(context, manifest):
|
|
79
|
+
enum_model = InvalidEnumModel(model=model)
|
|
80
|
+
for prop in model.flatprops.values():
|
|
81
|
+
if not prop.enum:
|
|
82
|
+
continue
|
|
83
|
+
|
|
84
|
+
enum_contains_expr = any(isinstance(enum.prepare, Expr) for enum in prop.enum.values())
|
|
85
|
+
values = gather_unique_property_values(prop)
|
|
86
|
+
for value in values:
|
|
87
|
+
if value is None and not prop.dtype.required:
|
|
88
|
+
continue
|
|
89
|
+
elif value is None:
|
|
90
|
+
enum_model.add_invalid_value(prop, value)
|
|
91
|
+
continue
|
|
92
|
+
|
|
93
|
+
if str(value) in prop.enum:
|
|
94
|
+
continue
|
|
95
|
+
|
|
96
|
+
check_value = value
|
|
97
|
+
if enum_contains_expr:
|
|
98
|
+
for enum in prop.enum.values():
|
|
99
|
+
env = EnumResultBuilder(context).init(value)
|
|
100
|
+
val = env.resolve(enum.prepare)
|
|
101
|
+
if env.has_value_changed:
|
|
102
|
+
check_value = val
|
|
103
|
+
break
|
|
104
|
+
|
|
105
|
+
if str(check_value) not in prop.enum:
|
|
106
|
+
enum_model.add_invalid_value(prop, value)
|
|
107
|
+
|
|
108
|
+
if enum_model.enum_props:
|
|
109
|
+
invalid_models[model.model_type()] = enum_model
|
|
110
|
+
|
|
111
|
+
output_invalid_enums_to_csv(invalid_models, output_path)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def output_invalid_enums_to_csv(invalid_models: dict, output_path: pathlib.Path | None = None):
|
|
115
|
+
stream_ctx = open(output_path, "w") if output_path else nullcontext(sys.stdout)
|
|
116
|
+
with stream_ctx as stream:
|
|
117
|
+
writer = csv.DictWriter(stream, fieldnames=["model", "property", "invalid_value"], lineterminator="\n")
|
|
118
|
+
writer.writeheader()
|
|
119
|
+
for model_key, model in sorted(invalid_models.items()):
|
|
120
|
+
model_written = False
|
|
121
|
+
|
|
122
|
+
for prop_name, prop in model.enum_props.items():
|
|
123
|
+
it = iter(prop.invalid_values)
|
|
124
|
+
first = next(it, None)
|
|
125
|
+
if first is None:
|
|
126
|
+
continue
|
|
127
|
+
|
|
128
|
+
model_name = ""
|
|
129
|
+
if not model_written:
|
|
130
|
+
model_name = model_key
|
|
131
|
+
model_written = True
|
|
132
|
+
|
|
133
|
+
writer.writerow(
|
|
134
|
+
{
|
|
135
|
+
"model": model_name,
|
|
136
|
+
"property": prop_name,
|
|
137
|
+
"invalid_value": first,
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
for value in it:
|
|
142
|
+
writer.writerow(
|
|
143
|
+
{
|
|
144
|
+
"model": "",
|
|
145
|
+
"property": "",
|
|
146
|
+
"invalid_value": value,
|
|
147
|
+
}
|
|
148
|
+
)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
1
3
|
import tqdm
|
|
2
4
|
from click import echo
|
|
3
5
|
from click.exceptions import Exit
|
|
@@ -9,7 +11,9 @@ def cli_error(message: str):
|
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
def cli_message(message: str, progress_bar: tqdm.tqdm = None):
|
|
14
|
+
# https://pubs.opengroup.org/onlinepubs/9799919799/
|
|
15
|
+
# This documentation states that `stderr` should be used for diagnostic messages (in our case status)
|
|
12
16
|
if progress_bar is not None:
|
|
13
|
-
progress_bar.write(message)
|
|
17
|
+
progress_bar.write(message, file=sys.stderr)
|
|
14
18
|
else:
|
|
15
|
-
echo(message)
|
|
19
|
+
echo(message, err=True)
|
|
@@ -31,7 +31,7 @@ class _ScriptMeta(type):
|
|
|
31
31
|
|
|
32
32
|
class ScriptBase(metaclass=_ScriptMeta):
|
|
33
33
|
"""
|
|
34
|
-
Represents
|
|
34
|
+
Represents a script with optional preconditions and target constraints.
|
|
35
35
|
|
|
36
36
|
Targets and tags are mainly used to be able to filter specific scripts. Main use case would be to set target as
|
|
37
37
|
specific object, like sqlalchemy keymap and tag as migration, so then you could filter all database migration
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
3
|
+
from spinta.cli.helpers.message import cli_message
|
|
5
4
|
from spinta.cli.helpers.script.components import ScriptStatus, ScriptBase, ScriptStatusCache
|
|
6
5
|
from spinta.cli.helpers.script.helpers import sort_scripts_by_required, script_check_status_message
|
|
7
6
|
from spinta.cli.helpers.script.registry import script_registry
|
|
@@ -54,7 +53,7 @@ def run_specific_script(
|
|
|
54
53
|
if force:
|
|
55
54
|
status = ScriptStatus.FORCED
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
cli_message(script_check_status_message(script_name, status))
|
|
58
57
|
if status in (ScriptStatus.FORCED, ScriptStatus.REQUIRED) and not check_only:
|
|
59
58
|
script.run(context, destructive=destructive, **kwargs)
|
|
60
59
|
if status_cache is not None:
|
|
@@ -73,7 +72,7 @@ def check_script(
|
|
|
73
72
|
script = script.value
|
|
74
73
|
|
|
75
74
|
if not script_registry.contains(script_type, script):
|
|
76
|
-
|
|
75
|
+
cli_message(f"Warning: {script_type!r} script {script!r} was not found")
|
|
77
76
|
return ScriptStatus.SKIPPED
|
|
78
77
|
|
|
79
78
|
script = script_registry.get(script_type, script)
|
|
@@ -92,9 +91,8 @@ def check_script(
|
|
|
92
91
|
ScriptStatus.REQUIRED,
|
|
93
92
|
ScriptStatus.SKIPPED,
|
|
94
93
|
):
|
|
95
|
-
|
|
96
|
-
f"Warning: {
|
|
97
|
-
err=True,
|
|
94
|
+
cli_message(
|
|
95
|
+
f"Warning: {script_type!r} script {required_script!r} requirement is not met for {script.name!r} script",
|
|
98
96
|
)
|
|
99
97
|
return ScriptStatus.SKIPPED
|
|
100
98
|
|
|
@@ -2,8 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from collections import defaultdict, deque
|
|
4
4
|
|
|
5
|
-
from typer import echo
|
|
6
5
|
|
|
6
|
+
from spinta.cli.helpers.message import cli_message
|
|
7
7
|
from spinta.cli.helpers.script.components import ScriptStatus
|
|
8
8
|
from spinta.cli.helpers.upgrade.components import UpgradeScript
|
|
9
9
|
from spinta.components import Context, Store
|
|
@@ -44,7 +44,7 @@ def sort_scripts_by_required(scripts: dict[str, UpgradeScript]) -> dict:
|
|
|
44
44
|
|
|
45
45
|
if len(result) != len(data):
|
|
46
46
|
unresolved = set(data) - set(result)
|
|
47
|
-
|
|
47
|
+
cli_message(f"Warning: Dependency cycle detected or unresolved dependencies in: {unresolved}")
|
|
48
48
|
# Extend results, potentially might cause errors, because of cycles
|
|
49
49
|
result.extend(unresolved)
|
|
50
50
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
from contextlib import ExitStack
|
|
2
2
|
from typing import Generator
|
|
3
3
|
|
|
4
|
-
from alembic.operations import Operations
|
|
5
|
-
from alembic.runtime.migration import MigrationContext
|
|
6
4
|
from click import echo
|
|
7
5
|
from sqlalchemy.engine import Inspector
|
|
8
6
|
from tqdm import tqdm
|
|
@@ -105,6 +103,9 @@ def gather_associated_tables(backend: PostgreSQL, table_identifier: TableIdentif
|
|
|
105
103
|
|
|
106
104
|
|
|
107
105
|
def migrate_schemas(context: Context, **kwargs):
|
|
106
|
+
from alembic.operations import Operations
|
|
107
|
+
from alembic.runtime.migration import MigrationContext
|
|
108
|
+
|
|
108
109
|
ensure_store_is_loaded(context)
|
|
109
110
|
store = context.get("store")
|
|
110
111
|
|
|
@@ -1095,7 +1095,8 @@ class Config:
|
|
|
1095
1095
|
scope_log: bool
|
|
1096
1096
|
check_contract_scopes: bool
|
|
1097
1097
|
default_auth_client: str
|
|
1098
|
-
default_access_level:
|
|
1098
|
+
default_access_level: Access
|
|
1099
|
+
access: Access
|
|
1099
1100
|
http_basic_auth: bool
|
|
1100
1101
|
token_validation_key: dict | None = None
|
|
1101
1102
|
token_validation_keys_download_url: str | None = None
|
|
@@ -344,7 +344,8 @@ CONFIG = {
|
|
|
344
344
|
},
|
|
345
345
|
"config_path": pathlib.Path("tests/config"),
|
|
346
346
|
"default_auth_client": "baa448a8-205c-4faa-a048-a10e4b32a136",
|
|
347
|
-
"default_access_level": "
|
|
347
|
+
"default_access_level": "open",
|
|
348
|
+
"access": "open",
|
|
348
349
|
"sync_retry_count": 0,
|
|
349
350
|
},
|
|
350
351
|
},
|
|
@@ -164,7 +164,7 @@ def getall(
|
|
|
164
164
|
builder.update(model=model, params={param.name: param for param in resource.params}, url_query_params=query)
|
|
165
165
|
|
|
166
166
|
props = {}
|
|
167
|
-
for prop in model.
|
|
167
|
+
for prop in model.flatprops.values():
|
|
168
168
|
if prop.external and prop.external.name:
|
|
169
169
|
root_source = _get_prop_full_source(model.external.name, prop.external.name)
|
|
170
170
|
props[prop.external.name] = {
|
|
@@ -21,7 +21,9 @@ from spinta.typing import ObjectData
|
|
|
21
21
|
from spinta.ufuncs.querybuilder.components import QueryParams
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
def _get_data_soap(
|
|
24
|
+
def _get_data_soap(
|
|
25
|
+
url: str, backend: Soap, soap_request_body: dict, extra_headers: dict, source: str | None = None
|
|
26
|
+
) -> list[dict]:
|
|
25
27
|
for key, value in soap_request_body.items():
|
|
26
28
|
if isinstance(value, MakeCDATA):
|
|
27
29
|
soap_request_body[key] = value()
|
|
@@ -38,6 +40,15 @@ def _get_data_soap(url: str, backend: Soap, soap_request_body: dict, extra_heade
|
|
|
38
40
|
except zeep.exceptions.Error as e:
|
|
39
41
|
raise UnexpectedErrorReadingData(exception=type(e).__name__, message=str(e))
|
|
40
42
|
|
|
43
|
+
if isinstance(response_data, dict):
|
|
44
|
+
for part in source.split("/"):
|
|
45
|
+
if not part:
|
|
46
|
+
continue
|
|
47
|
+
if part in response_data:
|
|
48
|
+
response_data = response_data[part]
|
|
49
|
+
else:
|
|
50
|
+
response_data = []
|
|
51
|
+
break
|
|
41
52
|
if response_data and not isinstance(response_data, list):
|
|
42
53
|
response_data = [response_data]
|
|
43
54
|
|
|
@@ -137,6 +148,7 @@ def getall(
|
|
|
137
148
|
backend=backend,
|
|
138
149
|
soap_request_body=builder.soap_request_body,
|
|
139
150
|
extra_headers=http_headers,
|
|
151
|
+
source=model.external.name,
|
|
140
152
|
)
|
|
141
153
|
.flatten()
|
|
142
154
|
.to_dataframe(meta=meta)
|
|
@@ -276,6 +276,11 @@ def dask_get_all(
|
|
|
276
276
|
val = _get_row_value(context, row, sel, env.params)
|
|
277
277
|
if sel.prop:
|
|
278
278
|
if isinstance(sel.prop.dtype, PrimaryKey):
|
|
279
|
+
if isinstance(val, list):
|
|
280
|
+
val = [
|
|
281
|
+
list_value.get("_id", list_value) if isinstance(list_value, dict) else list_value
|
|
282
|
+
for list_value in val
|
|
283
|
+
]
|
|
279
284
|
val = keymap.encode(sel.prop.model.model_type(), val)
|
|
280
285
|
elif isinstance(sel.prop.dtype, Ref):
|
|
281
286
|
val = handle_ref_key_assignment(context, keymap, env, val, sel.prop.dtype)
|
{spinta-0.2.dev21 → spinta-0.2.dev23}/spinta/datasets/backends/dataframe/ufuncs/query/ufuncs.py
RENAMED
|
@@ -336,12 +336,15 @@ def select(env: DaskDataFrameQueryBuilder, selected: Selected) -> Selected:
|
|
|
336
336
|
|
|
337
337
|
@ufunc.resolver(DaskDataFrameQueryBuilder, Ref, GetAttr)
|
|
338
338
|
def select(env: DaskDataFrameQueryBuilder, dtype: Ref, prep: GetAttr) -> Selected | None:
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
)
|
|
339
|
+
resolved_prep = env.call("select", prep)
|
|
340
|
+
|
|
341
|
+
result = {}
|
|
342
|
+
result["_id"] = Selected(prop=dtype.prop, prep=resolved_prep)
|
|
343
|
+
for prop in dtype.properties.values():
|
|
344
|
+
sel = env.call("select", prop)
|
|
345
|
+
result[prop.name] = sel
|
|
346
|
+
|
|
347
|
+
return Selected(prop=dtype.prop, prep=result)
|
|
345
348
|
|
|
346
349
|
|
|
347
350
|
@ufunc.resolver(DaskDataFrameQueryBuilder, Ref, object)
|
|
@@ -353,6 +356,18 @@ def select(env: DaskDataFrameQueryBuilder, dtype: Ref, prep: Any) -> Selected:
|
|
|
353
356
|
)
|
|
354
357
|
|
|
355
358
|
|
|
359
|
+
@ufunc.resolver(DaskDataFrameQueryBuilder, Ref)
|
|
360
|
+
def select(env: DaskDataFrameQueryBuilder, dtype: Ref) -> Selected:
|
|
361
|
+
prep = {}
|
|
362
|
+
prep["_id"] = Selected(item=dtype.prop.external.name, prop=dtype.prop)
|
|
363
|
+
|
|
364
|
+
for prop in dtype.properties.values():
|
|
365
|
+
sel = env.call("select", prop)
|
|
366
|
+
prep[prop.name] = sel
|
|
367
|
+
|
|
368
|
+
return Selected(prop=dtype.prop, prep=prep)
|
|
369
|
+
|
|
370
|
+
|
|
356
371
|
@ufunc.resolver(DaskDataFrameQueryBuilder, GetAttr)
|
|
357
372
|
def select(env: DaskDataFrameQueryBuilder, attr: GetAttr) -> Selected:
|
|
358
373
|
resolved = env.resolve_property(attr)
|
|
@@ -14,6 +14,10 @@ from spinta.utils.schema import NA
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def handle_ref_key_assignment(context: Context, keymap: KeyMap, env: Env, value: Any, ref: Ref) -> dict:
|
|
17
|
+
original_value = value
|
|
18
|
+
if isinstance(value, dict):
|
|
19
|
+
value = value["_id"]
|
|
20
|
+
|
|
17
21
|
keymap_name = ref.model.model_type()
|
|
18
22
|
if ref.refprops != ref.model.external.pkeys:
|
|
19
23
|
keymap_name = f"{keymap_name}.{'_'.join(prop.name for prop in ref.refprops)}"
|
|
@@ -55,7 +59,16 @@ def handle_ref_key_assignment(context: Context, keymap: KeyMap, env: Env, value:
|
|
|
55
59
|
|
|
56
60
|
# FIXME Quick hack when trying to get `Internal` model keys while running in `External` mode (should probably return error, or None)
|
|
57
61
|
if ref_model.mode == Mode.external and not check_if_model_has_backend_and_source(ref_model):
|
|
58
|
-
|
|
62
|
+
val = {"_id": keymap.encode(keymap_name, target_value)}
|
|
63
|
+
if isinstance(original_value, dict):
|
|
64
|
+
for nested_prop_name, nested_prop in ref.properties.items():
|
|
65
|
+
nested_value = original_value[nested_prop_name]
|
|
66
|
+
if isinstance(nested_value, dict):
|
|
67
|
+
nested_value = handle_ref_key_assignment(
|
|
68
|
+
context, keymap, env, nested_value, nested_prop.dtype
|
|
69
|
+
)
|
|
70
|
+
val[nested_prop_name] = nested_value
|
|
71
|
+
return val
|
|
59
72
|
|
|
60
73
|
expr_parts = ["select()"]
|
|
61
74
|
for i, prop in enumerate(ref.refprops):
|
|
@@ -67,7 +80,10 @@ def handle_ref_key_assignment(context: Context, keymap: KeyMap, env: Env, value:
|
|
|
67
80
|
for row in rows:
|
|
68
81
|
if val is not None:
|
|
69
82
|
raise MultiplePrimaryKeyCandidatesFound(ref, values=target_value)
|
|
70
|
-
|
|
83
|
+
if "_id" in row:
|
|
84
|
+
val = row["_id"]
|
|
85
|
+
else:
|
|
86
|
+
val = keymap.encode(keymap_name, target_value)
|
|
71
87
|
found_value = True
|
|
72
88
|
|
|
73
89
|
if not found_value:
|
|
@@ -84,6 +100,13 @@ def handle_ref_key_assignment(context: Context, keymap: KeyMap, env: Env, value:
|
|
|
84
100
|
values = values[0]
|
|
85
101
|
val[prop] = values
|
|
86
102
|
i = i + count
|
|
103
|
+
|
|
104
|
+
if isinstance(original_value, dict):
|
|
105
|
+
for nested_prop_name, nested_prop in ref.properties.items():
|
|
106
|
+
nested_value = original_value[nested_prop_name]
|
|
107
|
+
if isinstance(nested_value, dict):
|
|
108
|
+
nested_value = handle_ref_key_assignment(context, keymap, env, nested_value, nested_prop.dtype)
|
|
109
|
+
val[nested_prop_name] = nested_value
|
|
87
110
|
return val
|
|
88
111
|
|
|
89
112
|
|
|
@@ -1223,3 +1223,9 @@ class SourceOrPrepareNotAllowed(UserError):
|
|
|
1223
1223
|
template = """
|
|
1224
1224
|
The source {source} was not expected. Delete it from the manifest or update the prepare function to allow it.
|
|
1225
1225
|
"""
|
|
1226
|
+
|
|
1227
|
+
|
|
1228
|
+
class PartialIncorrectProperty(BaseError):
|
|
1229
|
+
template = (
|
|
1230
|
+
"The composite property {property} is not correct. Check if all parts of the composite property are present."
|
|
1231
|
+
)
|
|
@@ -94,7 +94,6 @@ def create_remote_server(
|
|
|
94
94
|
{
|
|
95
95
|
"config_path": confdir,
|
|
96
96
|
"default_auth_client": None,
|
|
97
|
-
"default_access_level": "protected",
|
|
98
97
|
}
|
|
99
98
|
)
|
|
100
99
|
context = create_test_context(rc)
|
|
@@ -294,7 +293,6 @@ def create_rc(
|
|
|
294
293
|
},
|
|
295
294
|
# tests/config/clients/3388ea36-4a4f-4821-900a-b574c8829d52.yml
|
|
296
295
|
"default_auth_client": "3388ea36-4a4f-4821-900a-b574c8829d52",
|
|
297
|
-
"default_access_level": "protected",
|
|
298
296
|
}
|
|
299
297
|
)
|
|
300
298
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import pathlib
|
|
2
|
+
|
|
3
|
+
from requests.models import Response
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def parse_csv(resp: Response) -> list[list[str]]:
|
|
7
|
+
resp.raise_for_status()
|
|
8
|
+
return [line.strip().split(",") for line in resp.text.splitlines()]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def read_csv(path: pathlib.Path) -> list[list[str]]:
|
|
12
|
+
with path.open("r") as f:
|
|
13
|
+
return [line.strip().split(",") for line in f.readlines()]
|