spinta 0.2.dev20__tar.gz → 0.2.dev21__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.dev20 → spinta-0.2.dev21}/PKG-INFO +1 -1
- {spinta-0.2.dev20 → spinta-0.2.dev21}/pyproject.toml +1 -1
- spinta-0.2.dev21/spinta/backends/helpers.py +598 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/init.py +3 -3
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/manifest.py +1 -2
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/read.py +7 -7
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/bootstrap.py +16 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/init.py +10 -11
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/manifest.py +5 -9
- spinta-0.2.dev21/spinta/backends/postgresql/commands/migrate/constants.py +1 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/migrate.py +26 -118
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/model.py +233 -153
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/array.py +55 -29
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/datatype.py +45 -34
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/file.py +27 -18
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/ref.py +112 -88
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/string.py +20 -10
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/text.py +21 -9
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/redirect.py +5 -4
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/summary.py +22 -18
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/wipe.py +13 -10
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/components.py +6 -4
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/__init__.py +15 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/changes.py +5 -5
- spinta-0.2.dev21/spinta/backends/postgresql/helpers/migrate/actions.py +578 -0
- spinta-0.2.dev21/spinta/backends/postgresql/helpers/migrate/cast.py +67 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/migrate/migrate.py +367 -430
- spinta-0.2.dev21/spinta/backends/postgresql/helpers/migrate/name.py +219 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/name.py +18 -42
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/redirect.py +5 -5
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/array/init.py +9 -8
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/file/init.py +7 -6
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/ref/init.py +21 -6
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/admin.py +3 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/admin/scripts/changelog.py +16 -16
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/admin/scripts/deduplicate.py +7 -7
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/script/components.py +13 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/script/core.py +27 -6
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/components.py +1 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/registry.py +15 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/backends/postgresql/comments.py +37 -28
- spinta-0.2.dev21/spinta/cli/helpers/upgrade/scripts/backends/postgresql/schemas.py +313 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/redirect.py +3 -3
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/main.py +0 -1
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/migrate.py +0 -16
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/upgrade.py +4 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/__init__.py +0 -23
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/config.py +1 -3
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/ufuncs/query/ufuncs.py +16 -1
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/query/ufuncs.py +0 -6
- spinta-0.2.dev21/spinta/datasets/backends/sql/ufuncs/result/ufuncs.py +29 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/load.py +1 -3
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/manifest.py +0 -13
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/dict/commands/load.py +0 -2
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/helpers.py +0 -12
- spinta-0.2.dev21/spinta/manifests/internal/commands/load.py +41 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/load.py +0 -2
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/memory/commands/load.py +0 -2
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/commands/load.py +0 -2
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/rdf/commands/load.py +0 -2
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/sql/commands/load.py +0 -4
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/sql/helpers.py +11 -3
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/commands/load.py +0 -4
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/constants.py +1 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/xsd/commands/load.py +0 -4
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/commands/load.py +13 -34
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/commands/manifest.py +0 -11
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/helpers.py +1 -11
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/nodes.py +0 -4
- spinta-0.2.dev21/spinta/testing/migration.py +325 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/pytest.py +21 -4
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/datatype.py +6 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/text/helpers.py +1 -1
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/querybuilder/ufuncs.py +9 -0
- spinta-0.2.dev21/spinta/ufuncs/resultbuilder/ufuncs.py +207 -0
- spinta-0.2.dev20/spinta/backends/helpers.py +0 -402
- spinta-0.2.dev20/spinta/backends/mongo/commands/freeze.py +0 -15
- spinta-0.2.dev20/spinta/backends/postgresql/commands/freeze.py +0 -190
- spinta-0.2.dev20/spinta/backends/postgresql/commands/migrate/constants.py +0 -1
- spinta-0.2.dev20/spinta/backends/postgresql/helpers/migrate/actions.py +0 -462
- spinta-0.2.dev20/spinta/backends/postgresql/types/array/freeze.py +0 -86
- spinta-0.2.dev20/spinta/backends/postgresql/types/file/freeze.py +0 -102
- spinta-0.2.dev20/spinta/backends/postgresql/types/object/freeze.py +0 -57
- spinta-0.2.dev20/spinta/backends/postgresql/types/ref/freeze.py +0 -83
- spinta-0.2.dev20/spinta/datasets/backends/sql/ufuncs/result/ufuncs.py +0 -66
- spinta-0.2.dev20/spinta/manifests/backend/commands/freeze.py +0 -10
- spinta-0.2.dev20/spinta/manifests/internal/commands/load.py +0 -59
- spinta-0.2.dev20/spinta/manifests/yaml/commands/freeze.py +0 -50
- spinta-0.2.dev20/spinta/migrations/__init__.py +0 -23
- spinta-0.2.dev20/spinta/migrations/schema/alembic.py +0 -119
- spinta-0.2.dev20/spinta/testing/migration.py +0 -204
- spinta-0.2.dev20/spinta/ufuncs/resultbuilder/ufuncs.py +0 -100
- {spinta-0.2.dev20 → spinta-0.2.dev21}/LICENSE +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/README.rst +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/__main__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/accesslog/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/accesslog/file.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/accesslog/python.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/adapters/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/adapters/rc/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/adapters/rc/signature_adapter.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/adapters/soap_plugins.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/api/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/api/inspect.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/api/schema.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/api/validators.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/asgi.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/constants.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/changes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/decode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/encode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/migrate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/validate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/commands/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/fs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/changes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/encode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/commands/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/memory/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/changes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/encode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/migrate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/validate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/commands/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/array/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/array/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/file/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/file/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/object/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/types/object/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/mongo/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/changes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/commands/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/nobackend/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/changes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/column.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/encode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/property.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/geometry.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/migrate/types/object.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/validate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/commands/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/constants.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/files.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/exceptions.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/extractors.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/migrate/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/type.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/helpers/validate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/sqlalchemy.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/array/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/array/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/array/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/array_backref/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/array_backref/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/backref/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/backref/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/denorm/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/denorm/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/external_ref/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/external_ref/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/file/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/file/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/file/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/geometry/encode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/geometry/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/geometry/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/object/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/object/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/object/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/object/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/ref/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/ref/validate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/text/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/types/text/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/result/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/result/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/postgresql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/backends/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/data.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/get.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/admin/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/admin/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/admin/registry.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/admin/scripts/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/data.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/errors.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/backends/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/backends/postgresql/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/backends/postgresql/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/export/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/message.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/migrate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/delete.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/error.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/state.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/sync.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/utils.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/push/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/script/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/script/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/script/registry.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/store.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/api_helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/data_service.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/dataset.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/distribution.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/dsa.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/synchronization/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/synchronization/connection.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/controllers/synchronization/manifest_catalog_to_agent.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/enum.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/sync/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/typer.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/backends/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/clients.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/keymaps/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/initial_setup.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/modified_time.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/redirect_support.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/inspect.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/keymap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/pii.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/pull.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/push.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/server.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/show.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/cli/sync.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/client.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/search.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/version.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/commands/write.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/compat.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/config.yml +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/core/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/core/access.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/core/config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/core/context.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/core/enums.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/core/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/csv/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/csv/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/csv/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/csv/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/json/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/json/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/json/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/json/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/memory/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/xml/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/xml/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/xml/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/backends/xml/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/commands/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/dataframe/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/notimpl/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/notimpl/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/notimpl/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/notimpl/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/notimpl/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/types/geometry/encode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/base.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/commands/cast.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/constants.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/dialect.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/formats.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/identifier.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/introspection.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/log4j.properties +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/types.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sas/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/cast.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/column.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/query/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/result/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/commands/inspect.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/commands/wait.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/sqldump/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/wsdl/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/wsdl/commads/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/wsdl/commads/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/backends/wsdl/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/error.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/inspect.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/commands/wipe.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/enums.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/inspect/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/inspect/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/inspect/commands/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/inspect/commands/merge.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/inspect/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/inspect/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/keymaps/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/keymaps/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/keymaps/redis.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/keymaps/sqlalchemy.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/keymaps/sync.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/datasets/utils.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/comments/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/comments/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/comments/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/enum/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/enum/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/enum/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/enum/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/enum/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/lang/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/lang/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/lang/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/param/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/param/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/param/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/param/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/prefix/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/prefix/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/prefix/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/prefix/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dimensions/prefix/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/dispatcher.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/exceptions.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/fetcher.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/ascii/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/ascii/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/ascii/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/ascii/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/csv/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/csv/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/csv/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/html/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/html/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/html/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/html/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/json/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/json/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/json/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/jsonlines/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/jsonlines/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/jsonlines/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/rdf/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/rdf/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/xlsx/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/xlsx/commands.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/formats/xlsx/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/hacks/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/hacks/spyna.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/hacks/urlparams.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/handlers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/logging_config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifest/_ns.yml +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifest/_schema/version.yml +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifest/_schema.yml +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifest/_txn.yml +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/migrate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/commands/sync.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/backend/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/error.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/init.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/inspect.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/migrate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/dict/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/dict/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/dict/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/dict/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/dict/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/auth.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/backend.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/commands/read.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/internal_sql/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/memory/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/memory/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/memory/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/memory/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/mermaid/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/mermaid/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/mermaid/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/openapi_config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/open_api/openapi_generator.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/rdf/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/rdf/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/rdf/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/rdf/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/sql/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/sql/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/sql/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/sql/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/formats/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/formats/gsheets.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/tabular/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/xsd/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/xsd/commands/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/xsd/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/xsd/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/xsd/helpers.py +0 -0
- /spinta-0.2.dev20/spinta/manifests/yaml/__init__.py → /spinta-0.2.dev21/spinta/manifests/xsd2/commands/load.py +0 -0
- {spinta-0.2.dev20/spinta/manifests/yaml/commands → spinta-0.2.dev21/spinta/manifests/yaml}/__init__.py +0 -0
- {spinta-0.2.dev20/spinta/migrations/schema → spinta-0.2.dev21/spinta/manifests/yaml/commands}/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/commands/bootstrap.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/commands/configure.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/commands/migrate.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/commands/sync.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/manifests/yaml/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/methods.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/middlewares.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/naming/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/naming/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/naming/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/naming/ufuncts.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/renderer.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/spyna.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/templates/base.html +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/templates/data.html +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/templates/error.html +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/templates/form.html +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/cli.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/client.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/context.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/csv.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/data.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/datasets.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/dtypes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/manifest.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/push.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/request.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/tabular.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/types/geometry.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/testing/utils.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/array/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/array/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/array/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/array/resolve.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/backref/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/backref/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/command.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/denorm/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/denorm/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/denorm/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/file/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/file/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/file/decode.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/file/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/geometry/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/geometry/constants.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/geometry/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/geometry/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/inherit/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/inherit/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/model.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/namespace.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/object/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/object/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/object/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/partial/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/partial/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/ref/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/ref/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/ref/link.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/ref/resolve.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/store.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/text/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/text/check.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/text/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/types/text/load.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/typing.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/binds.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/changebase/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/changebase/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/changebase/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/changebase/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/common.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/linkbuilder/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/linkbuilder/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/linkbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/loadbuilder/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/loadbuilder/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/loadbuilder/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/loadbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/propertyresolver/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/propertyresolver/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/propertyresolver/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/querybuilder/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/querybuilder/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/querybuilder/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/requestparamsbuilder/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/requestparamsbuilder/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/requestparamsbuilder/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/requestparamsbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/resultbuilder/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/resultbuilder/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/resultbuilder/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/summaryenv/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/summaryenv/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/ufuncs/summaryenv/ufuncs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/units/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/units/components.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/units/helpers.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/urlparams.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/__init__.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/aiotools.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/changes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/collections.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/config.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/data.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/encoding.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/enums.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/errors.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/functools.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/idgen.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/imports.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/itertools.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/json.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/naming.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/nestedstruct.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/nin.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/passwords.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/path.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/refs.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/response.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/schema.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/scopes.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/sqlalchemy.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/sqlite.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/starlette.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/streams.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/tree.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/types.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/units.py +0 -0
- {spinta-0.2.dev20 → spinta-0.2.dev21}/spinta/utils/url.py +0 -0
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import dataclasses
|
|
4
|
+
from typing import Any
|
|
5
|
+
from typing import Iterable
|
|
6
|
+
from typing import Iterator
|
|
7
|
+
from typing import TypeVar
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
|
|
11
|
+
from multipledispatch import dispatch
|
|
12
|
+
|
|
13
|
+
from spinta import commands
|
|
14
|
+
from spinta import exceptions
|
|
15
|
+
from spinta import spyna
|
|
16
|
+
from spinta.auth import authorized
|
|
17
|
+
from spinta.backends import Backend
|
|
18
|
+
from spinta.backends.components import SelectTree
|
|
19
|
+
from spinta.backends.postgresql.helpers import get_pg_name
|
|
20
|
+
from spinta.commands import build_full_response
|
|
21
|
+
from spinta.components import Config, DataItem
|
|
22
|
+
from spinta.core.enums import Action
|
|
23
|
+
from spinta.components import Component
|
|
24
|
+
from spinta.components import Context
|
|
25
|
+
from spinta.components import Model
|
|
26
|
+
from spinta.components import Namespace
|
|
27
|
+
from spinta.components import Property
|
|
28
|
+
from spinta.exceptions import BackendUnavailable
|
|
29
|
+
from spinta.types.datatype import DataType, Denorm
|
|
30
|
+
from spinta.utils.data import take
|
|
31
|
+
from spinta.backends.constants import TableType, BackendOrigin
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
from sqlalchemy.dialects import postgresql
|
|
35
|
+
|
|
36
|
+
pg_identifier_preparer = postgresql.dialect().identifier_preparer
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def validate_and_return_transaction(context: Context, backend: Backend, **kwargs):
|
|
40
|
+
if not backend.available:
|
|
41
|
+
backend.available = commands.wait(context, backend)
|
|
42
|
+
|
|
43
|
+
# Backend is still unavailable
|
|
44
|
+
if not backend.available:
|
|
45
|
+
raise BackendUnavailable(backend)
|
|
46
|
+
|
|
47
|
+
return backend.transaction(**kwargs)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def validate_and_return_begin(context: Context, backend: Backend, **kwargs):
|
|
51
|
+
if not backend.available:
|
|
52
|
+
backend.available = commands.wait(context, backend)
|
|
53
|
+
|
|
54
|
+
# Backend is still unavailable
|
|
55
|
+
if not backend.available:
|
|
56
|
+
raise BackendUnavailable(backend)
|
|
57
|
+
|
|
58
|
+
return backend.begin(**kwargs)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def load_backend(
|
|
62
|
+
context: Context, component: Component, name: str, origin: BackendOrigin, data: dict[str, str]
|
|
63
|
+
) -> Backend:
|
|
64
|
+
config = context.get("config")
|
|
65
|
+
type_ = data.get("type")
|
|
66
|
+
if not type_:
|
|
67
|
+
raise exceptions.RequiredConfigParam(
|
|
68
|
+
component,
|
|
69
|
+
name=f"backends.{name}.type",
|
|
70
|
+
)
|
|
71
|
+
if type_ not in config.components["backends"]:
|
|
72
|
+
raise exceptions.BackendNotFound(component, name=type_)
|
|
73
|
+
Backend_ = config.components["backends"][type_]
|
|
74
|
+
backend: Backend = Backend_()
|
|
75
|
+
backend.type = type_
|
|
76
|
+
backend.name = name
|
|
77
|
+
backend.origin = origin
|
|
78
|
+
backend.config = data
|
|
79
|
+
load_query_builder_class(config, backend)
|
|
80
|
+
load_result_builder_class(config, backend)
|
|
81
|
+
commands.load(context, backend, data)
|
|
82
|
+
return backend
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def get_select_tree(
|
|
86
|
+
context: Context,
|
|
87
|
+
action: Action,
|
|
88
|
+
select: list[str] | None,
|
|
89
|
+
) -> SelectTree:
|
|
90
|
+
if isinstance(select, dict):
|
|
91
|
+
select = list(select.keys())
|
|
92
|
+
|
|
93
|
+
select = _apply_always_show_id(context, action, select)
|
|
94
|
+
if select is None and action in (Action.GETALL, Action.SEARCH):
|
|
95
|
+
# If select is not given, select everything.
|
|
96
|
+
select = {"*": {}}
|
|
97
|
+
return flat_select_to_nested(select)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _apply_always_show_id(
|
|
101
|
+
context: Context,
|
|
102
|
+
action: Action,
|
|
103
|
+
select: list[str] | None,
|
|
104
|
+
) -> list[str] | None:
|
|
105
|
+
if action in (Action.GETALL, Action.SEARCH):
|
|
106
|
+
config = context.get("config")
|
|
107
|
+
if config.always_show_id:
|
|
108
|
+
if select is None:
|
|
109
|
+
return ["_id"]
|
|
110
|
+
elif "_id" not in select:
|
|
111
|
+
return ["_id"] + select
|
|
112
|
+
return select
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def get_select_prop_names(
|
|
116
|
+
context: Context,
|
|
117
|
+
node: Model | Property | DataType,
|
|
118
|
+
props: dict[str, Property],
|
|
119
|
+
action: Action,
|
|
120
|
+
select: SelectTree,
|
|
121
|
+
*,
|
|
122
|
+
# If False, do not check if client has access to this property.
|
|
123
|
+
auth: bool = True,
|
|
124
|
+
# Allowed reserved property names.
|
|
125
|
+
reserved: list[str] = None,
|
|
126
|
+
# If False, do not include Denorm type props
|
|
127
|
+
include_denorm_props: bool = True,
|
|
128
|
+
) -> list[str]:
|
|
129
|
+
known = set(reserved or []) | set(take(props))
|
|
130
|
+
check_unknown_props(node, select, known)
|
|
131
|
+
|
|
132
|
+
if select is None or "*" in select:
|
|
133
|
+
return [
|
|
134
|
+
p.name
|
|
135
|
+
for p in props.values()
|
|
136
|
+
if (
|
|
137
|
+
not p.name.startswith("_")
|
|
138
|
+
and not p.hidden
|
|
139
|
+
and (not auth or authorized(context, p, action))
|
|
140
|
+
and (include_denorm_props or not isinstance(p.dtype, Denorm))
|
|
141
|
+
)
|
|
142
|
+
]
|
|
143
|
+
else:
|
|
144
|
+
return list(select)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def select_model_props(
|
|
148
|
+
model: Model,
|
|
149
|
+
prop_names: list[str],
|
|
150
|
+
value: dict,
|
|
151
|
+
select: SelectTree,
|
|
152
|
+
reserved: list[str],
|
|
153
|
+
) -> Iterator[
|
|
154
|
+
tuple[
|
|
155
|
+
Property | str,
|
|
156
|
+
Any,
|
|
157
|
+
SelectTree,
|
|
158
|
+
]
|
|
159
|
+
]:
|
|
160
|
+
yield from select_props(
|
|
161
|
+
model,
|
|
162
|
+
reserved,
|
|
163
|
+
model.properties,
|
|
164
|
+
value,
|
|
165
|
+
select,
|
|
166
|
+
)
|
|
167
|
+
yield from select_props(
|
|
168
|
+
model,
|
|
169
|
+
prop_names,
|
|
170
|
+
model.properties,
|
|
171
|
+
value,
|
|
172
|
+
select,
|
|
173
|
+
reserved=False,
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
T = TypeVar("T")
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def select_props(
|
|
181
|
+
node: Namespace | Model | Property,
|
|
182
|
+
keys: Iterable[str],
|
|
183
|
+
props: dict[str, Property],
|
|
184
|
+
value: dict[str, T],
|
|
185
|
+
select: SelectTree,
|
|
186
|
+
*,
|
|
187
|
+
reserved: bool = True,
|
|
188
|
+
) -> Iterator[
|
|
189
|
+
tuple[
|
|
190
|
+
Property | str,
|
|
191
|
+
T,
|
|
192
|
+
SelectTree,
|
|
193
|
+
]
|
|
194
|
+
]:
|
|
195
|
+
for key, val, sel in select_keys(keys, value, select, reserved=reserved):
|
|
196
|
+
prop = _select_prop(key, props, node)
|
|
197
|
+
if prop:
|
|
198
|
+
yield prop, val, sel
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def select_only_props(
|
|
202
|
+
node: Namespace | Model | Property,
|
|
203
|
+
keys: Iterable[str],
|
|
204
|
+
props: dict[str, Property],
|
|
205
|
+
select: SelectTree,
|
|
206
|
+
*,
|
|
207
|
+
reserved: bool = True,
|
|
208
|
+
) -> Iterator[
|
|
209
|
+
tuple[
|
|
210
|
+
Property | str,
|
|
211
|
+
SelectTree,
|
|
212
|
+
]
|
|
213
|
+
]:
|
|
214
|
+
for key, sel in select_only_keys(keys, select, reserved=reserved):
|
|
215
|
+
prop = _select_prop(key, props, node)
|
|
216
|
+
if prop:
|
|
217
|
+
yield prop, sel
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def _select_prop(
|
|
221
|
+
key: str,
|
|
222
|
+
props: dict[str, Property],
|
|
223
|
+
node: Namespace | Model | Property,
|
|
224
|
+
) -> Property | None:
|
|
225
|
+
if not (prop := props.get(key)) or prop.hidden:
|
|
226
|
+
return None
|
|
227
|
+
|
|
228
|
+
return prop
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def select_keys(
|
|
232
|
+
keys: Iterable[str],
|
|
233
|
+
value: dict[str, T],
|
|
234
|
+
select: SelectTree,
|
|
235
|
+
*,
|
|
236
|
+
reserved: bool = True,
|
|
237
|
+
) -> Iterator[
|
|
238
|
+
tuple[
|
|
239
|
+
str,
|
|
240
|
+
T,
|
|
241
|
+
SelectTree,
|
|
242
|
+
]
|
|
243
|
+
]:
|
|
244
|
+
for key, sel in select_only_keys(keys, select, reserved=reserved):
|
|
245
|
+
if select is None and key not in value:
|
|
246
|
+
# Omit all keys if they are not present in value, this is a common
|
|
247
|
+
# case in PATCH requests.
|
|
248
|
+
continue
|
|
249
|
+
|
|
250
|
+
if key in value:
|
|
251
|
+
val = value[key]
|
|
252
|
+
else:
|
|
253
|
+
val = None
|
|
254
|
+
|
|
255
|
+
yield key, val, sel
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def select_only_keys(
|
|
259
|
+
keys: Iterable[str],
|
|
260
|
+
select: SelectTree,
|
|
261
|
+
*,
|
|
262
|
+
reserved: bool = True,
|
|
263
|
+
) -> Iterator[
|
|
264
|
+
tuple[
|
|
265
|
+
str,
|
|
266
|
+
SelectTree,
|
|
267
|
+
]
|
|
268
|
+
]:
|
|
269
|
+
for key in keys:
|
|
270
|
+
if reserved is False and key.startswith("_"):
|
|
271
|
+
continue
|
|
272
|
+
|
|
273
|
+
if select is None:
|
|
274
|
+
sel = None
|
|
275
|
+
elif "*" in select:
|
|
276
|
+
sel = select["*"]
|
|
277
|
+
elif key in select:
|
|
278
|
+
sel = select[key]
|
|
279
|
+
else:
|
|
280
|
+
continue
|
|
281
|
+
|
|
282
|
+
if sel is not None and sel == {}:
|
|
283
|
+
sel = {"*": {}}
|
|
284
|
+
|
|
285
|
+
yield key, sel
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
# FIXME: We should check select list at the very beginning of
|
|
289
|
+
# request, not when returning results.
|
|
290
|
+
def check_unknown_props(
|
|
291
|
+
node: Model | Property | DataType,
|
|
292
|
+
select: Iterable[str] | None,
|
|
293
|
+
known: Iterable[str],
|
|
294
|
+
):
|
|
295
|
+
unknown_properties = set(select or []) - set(known) - {"*"}
|
|
296
|
+
if unknown_properties:
|
|
297
|
+
raise exceptions.MultipleErrors(
|
|
298
|
+
exceptions.FieldNotInResource(node, property=prop) for prop in sorted(unknown_properties)
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def flat_select_to_nested(select: list[str] | None) -> SelectTree:
|
|
303
|
+
"""
|
|
304
|
+
>>> flat_select_to_nested(None)
|
|
305
|
+
|
|
306
|
+
>>> flat_select_to_nested(['foo.bar'])
|
|
307
|
+
{'foo': {'bar': {}}}
|
|
308
|
+
|
|
309
|
+
"""
|
|
310
|
+
if select is None:
|
|
311
|
+
return None
|
|
312
|
+
|
|
313
|
+
res = {}
|
|
314
|
+
for v in select:
|
|
315
|
+
if isinstance(v, dict):
|
|
316
|
+
v = spyna.unparse(v)
|
|
317
|
+
names = v.split(".")
|
|
318
|
+
vref = res
|
|
319
|
+
for name in names:
|
|
320
|
+
if name not in vref:
|
|
321
|
+
vref[name] = {}
|
|
322
|
+
vref = vref[name]
|
|
323
|
+
|
|
324
|
+
return res
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def get_model_reserved_props(action: Action, include_page: bool) -> list[str]:
|
|
328
|
+
if action == Action.GETALL:
|
|
329
|
+
reserved = ["_type", "_id", "_revision"]
|
|
330
|
+
elif action == Action.SEARCH:
|
|
331
|
+
reserved = ["_type", "_id", "_revision", "_base"]
|
|
332
|
+
elif action == Action.CHANGES:
|
|
333
|
+
return ["_cid", "_created", "_op", "_id", "_txn", "_revision", "_same_as"]
|
|
334
|
+
elif action == Action.MOVE:
|
|
335
|
+
return ["_type", "_revision", "_id", "_same_as"]
|
|
336
|
+
else:
|
|
337
|
+
reserved = ["_type", "_id", "_revision"]
|
|
338
|
+
if include_page:
|
|
339
|
+
reserved.append("_page")
|
|
340
|
+
return reserved
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def get_ns_reserved_props(action: Action) -> list[str]:
|
|
344
|
+
return []
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
@dataclasses.dataclass
|
|
348
|
+
class TableIdentifier:
|
|
349
|
+
"""
|
|
350
|
+
Represents a table identifier across logical (app) and PostgreSQL layers.
|
|
351
|
+
|
|
352
|
+
It builds derived names used for internal logic and SQL queries, including
|
|
353
|
+
schema-qualified and escaped identifiers.
|
|
354
|
+
|
|
355
|
+
Attributes:
|
|
356
|
+
schema (str | None): Logical schema/namespace (e.g. "datasets/gov/rc").
|
|
357
|
+
base_name (str): Base table name (e.g. "Building").
|
|
358
|
+
table_type (TableType): Table type suffix (default: TableType.MAIN).
|
|
359
|
+
table_arg (str | None): Optional argument appended used for table types that require property.
|
|
360
|
+
default_pg_schema (str | None): Fallback PG schema if schema is not given.
|
|
361
|
+
|
|
362
|
+
logical_name (str): Computed name (base + type + optional arg).
|
|
363
|
+
Example: "Building/:list/apartments"
|
|
364
|
+
logical_qualified_name (str): Logical name with schema (dataset).
|
|
365
|
+
Example: "datasets/gov/rc/Building/:list/apartments"
|
|
366
|
+
|
|
367
|
+
pg_table_name (str): PG-safe (compressed) table name from logical_name.
|
|
368
|
+
pg_schema_name (str | None): PG-safe (compressed) schema name.
|
|
369
|
+
pg_qualified_name (str): PG-safe (compressed) schema with table name.
|
|
370
|
+
Example: "datasets/gov/rc.Building/:list/apartments" (unescaped).
|
|
371
|
+
pg_escaped_qualified_name (str): Quoted version of pg_qualified_name, used for queries.
|
|
372
|
+
Example: '"datasets/gov/rc"."Building/:list/apartments"' (escaped).
|
|
373
|
+
|
|
374
|
+
Example:
|
|
375
|
+
>>> TableIdentifier("datasets/gov/rc", "Buildings", TableType.LIST, "apartments")
|
|
376
|
+
# logical_qualified_name: "datasets/gov/rc/Buildings/:list/apartments"
|
|
377
|
+
# pg_qualified_name: "datasets/gov/rc.Building/:list/apartments"
|
|
378
|
+
|
|
379
|
+
>>> TableIdentifier("datasets/gov/rc", "Buildings")
|
|
380
|
+
# logical_qualified_name: "datasets/gov/rc/Buildings"
|
|
381
|
+
# pg_qualified_name: "datasets/gov/rc.Building"
|
|
382
|
+
|
|
383
|
+
>>> TableIdentifier("datasets/gov/rc/very/long/dataset/name/that/does/not/fit/withing/limits", "Buildings")
|
|
384
|
+
# logical_qualified_name: "datasets/gov/rc/very/long/dataset/name/that/does/not/fit/withing/limits/Buildings"
|
|
385
|
+
# pg_qualified_name: "datasets/gov/rc/very/long/dataset/nam_e5985b69_t/withing/limits.Building"
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
schema: str | None
|
|
389
|
+
base_name: str
|
|
390
|
+
table_type: TableType = dataclasses.field(default=TableType.MAIN)
|
|
391
|
+
table_arg: str | None = dataclasses.field(default=None)
|
|
392
|
+
default_pg_schema: str | None = dataclasses.field(default=None)
|
|
393
|
+
|
|
394
|
+
logical_name: str = dataclasses.field(init=False)
|
|
395
|
+
# Name with namespace connected with '/', like it is used with Model class
|
|
396
|
+
logical_qualified_name: str = dataclasses.field(init=False)
|
|
397
|
+
|
|
398
|
+
pg_table_name: str = dataclasses.field(init=False)
|
|
399
|
+
pg_schema_name: str | None = dataclasses.field(init=False)
|
|
400
|
+
# Used for hashed schema and table names
|
|
401
|
+
pg_qualified_name: str = dataclasses.field(init=False)
|
|
402
|
+
# Escaped qualified name, used for queries
|
|
403
|
+
pg_escaped_qualified_name: str = dataclasses.field(init=False)
|
|
404
|
+
|
|
405
|
+
def __post_init__(self):
|
|
406
|
+
self.logical_name = self.base_name + self.table_type.value
|
|
407
|
+
if self.table_arg:
|
|
408
|
+
self.logical_name += "/" + self.table_arg
|
|
409
|
+
|
|
410
|
+
self.logical_qualified_name = f"{self.schema}/{self.logical_name}" if self.schema else self.logical_name
|
|
411
|
+
|
|
412
|
+
self.pg_table_name = get_pg_name(self.logical_name)
|
|
413
|
+
self.pg_schema_name = get_pg_name(self.schema) if self.schema else self.default_pg_schema
|
|
414
|
+
self.pg_qualified_name = (
|
|
415
|
+
f"{self.pg_schema_name}.{self.pg_table_name}" if self.pg_schema_name else self.pg_table_name
|
|
416
|
+
)
|
|
417
|
+
self.pg_escaped_qualified_name = (
|
|
418
|
+
f"{pg_identifier_preparer.quote(self.pg_schema_name)}.{pg_identifier_preparer.quote(self.pg_table_name)}"
|
|
419
|
+
if self.pg_schema_name
|
|
420
|
+
else pg_identifier_preparer.quote(self.pg_table_name)
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
def change_table_type(self, new_type: TableType, table_arg: str | None = None) -> "TableIdentifier":
|
|
424
|
+
return dataclasses.replace(self, table_type=new_type, table_arg=table_arg)
|
|
425
|
+
|
|
426
|
+
def apply_removed_prefix(self, remove_model_only: bool = False) -> "TableIdentifier":
|
|
427
|
+
if remove_model_only or not self.table_arg:
|
|
428
|
+
if not self.base_name.startswith("__"):
|
|
429
|
+
return dataclasses.replace(self, base_name=f"__{self.base_name}")
|
|
430
|
+
return self
|
|
431
|
+
|
|
432
|
+
if not self.table_arg.startswith("__"):
|
|
433
|
+
return dataclasses.replace(self, table_arg=f"__{self.table_arg}")
|
|
434
|
+
return self
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
@dispatch(str)
|
|
438
|
+
def get_table_identifier(item: str, **kwargs) -> TableIdentifier:
|
|
439
|
+
schema, model_name, table_type, table_arg = split_logical_name(item)
|
|
440
|
+
return TableIdentifier(schema=schema, base_name=model_name, table_type=table_type, table_arg=table_arg, **kwargs)
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
@dispatch(sa.Table)
|
|
444
|
+
def get_table_identifier(item: sa.Table, **kwargs) -> TableIdentifier:
|
|
445
|
+
if not item.comment:
|
|
446
|
+
return TableIdentifier(schema=item.schema, base_name=item.name, **kwargs)
|
|
447
|
+
if item.schema not in ("public", None):
|
|
448
|
+
return get_table_identifier(item.comment, **kwargs)
|
|
449
|
+
|
|
450
|
+
schema, model_name, table_type, table_arg = split_logical_name(item.comment)
|
|
451
|
+
return TableIdentifier(
|
|
452
|
+
schema=None,
|
|
453
|
+
base_name=f"{schema}/{model_name}" if schema else model_name,
|
|
454
|
+
table_type=table_type,
|
|
455
|
+
table_arg=table_arg,
|
|
456
|
+
**kwargs,
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
@dispatch((Model, Property))
|
|
461
|
+
def get_table_identifier(node: Model | Property, **kwargs) -> TableIdentifier:
|
|
462
|
+
return get_table_identifier(node, TableType.MAIN, **kwargs)
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
@dispatch((Model, Property), TableType)
|
|
466
|
+
def get_table_identifier(
|
|
467
|
+
node: Model | Property, table_type: TableType, table_arg: str = None, **kwargs
|
|
468
|
+
) -> TableIdentifier:
|
|
469
|
+
model = node if isinstance(node, Model) else node.model
|
|
470
|
+
|
|
471
|
+
schema = model.ns.name if model.ns else None
|
|
472
|
+
base_name = model.get_name_without_ns()
|
|
473
|
+
|
|
474
|
+
if isinstance(node, Property) and table_type in (TableType.LIST, TableType.FILE):
|
|
475
|
+
table_arg = node.place
|
|
476
|
+
|
|
477
|
+
return TableIdentifier(schema, base_name, table_type, table_arg, **kwargs)
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
def get_table_name(
|
|
481
|
+
node: Model | Property,
|
|
482
|
+
ttype: TableType = TableType.MAIN,
|
|
483
|
+
) -> str:
|
|
484
|
+
if isinstance(node, Model):
|
|
485
|
+
model = node
|
|
486
|
+
else:
|
|
487
|
+
model = node.model
|
|
488
|
+
if ttype in (TableType.LIST, TableType.FILE):
|
|
489
|
+
name = model.model_type() + ttype.value + "/" + node.place
|
|
490
|
+
else:
|
|
491
|
+
name = model.model_type() + ttype.value
|
|
492
|
+
return name
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
def split_table_name(full_name: str) -> tuple[str | None, str]:
|
|
496
|
+
parts = full_name.split(".", maxsplit=1)
|
|
497
|
+
if len(parts) == 1:
|
|
498
|
+
return None, parts[0]
|
|
499
|
+
return parts[0], parts[1]
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
def split_logical_name(full_name: str) -> tuple[str | None, str, TableType, str | None]:
|
|
503
|
+
base_name, table_type, property_name = extract_table_data_from_logical_name(full_name)
|
|
504
|
+
parts = base_name.split("/")
|
|
505
|
+
if len(parts) == 1:
|
|
506
|
+
return None, parts[0], table_type, property_name
|
|
507
|
+
|
|
508
|
+
for i, part in enumerate(parts):
|
|
509
|
+
if part[0].isupper() or (part[:2] == "__" and part[2].isupper()):
|
|
510
|
+
namespace = "/".join(parts[:i])
|
|
511
|
+
model = "/".join(parts[i:])
|
|
512
|
+
return namespace, model, table_type, property_name
|
|
513
|
+
return None, base_name, table_type, property_name
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def load_query_builder_class(config: Config, backend: Backend):
|
|
517
|
+
if backend.query_builder_type is None:
|
|
518
|
+
return
|
|
519
|
+
|
|
520
|
+
backend.query_builder_class = config.components.get("querybuilders")[backend.query_builder_type]
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
def load_result_builder_class(config: Config, backend: Backend):
|
|
524
|
+
if backend.result_builder_type is None:
|
|
525
|
+
return
|
|
526
|
+
|
|
527
|
+
backend.result_builder_class = config.components.get("resultbuilders")[backend.result_builder_type]
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
def prepare_response(
|
|
531
|
+
context: Context,
|
|
532
|
+
data: DataItem,
|
|
533
|
+
) -> (DataItem, dict):
|
|
534
|
+
if data.action == Action.UPDATE:
|
|
535
|
+
# Minor optimisation: if we querying subresource, then build
|
|
536
|
+
# response only for the subresource tree, do not walk through
|
|
537
|
+
# whole model property tree.
|
|
538
|
+
if data.prop:
|
|
539
|
+
dtype = data.prop.dtype
|
|
540
|
+
patch = data.patch.get(data.prop.name, {})
|
|
541
|
+
saved = data.saved.get(data.prop.name, {})
|
|
542
|
+
else:
|
|
543
|
+
dtype = data.model
|
|
544
|
+
patch = take(data.patch)
|
|
545
|
+
saved = take(data.saved)
|
|
546
|
+
|
|
547
|
+
resp = build_full_response(
|
|
548
|
+
context,
|
|
549
|
+
dtype,
|
|
550
|
+
patch=patch,
|
|
551
|
+
saved=saved,
|
|
552
|
+
)
|
|
553
|
+
|
|
554
|
+
# When querying subresources, response still must be enclosed with
|
|
555
|
+
# the subresource key.
|
|
556
|
+
if data.prop:
|
|
557
|
+
resp = {
|
|
558
|
+
data.prop.name: resp,
|
|
559
|
+
}
|
|
560
|
+
elif data.patch:
|
|
561
|
+
resp = data.patch
|
|
562
|
+
else:
|
|
563
|
+
resp = {}
|
|
564
|
+
return resp
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
def extract_table_data_from_logical_name(table_name: str) -> tuple[str | None, TableType | None, str | None]:
|
|
568
|
+
"""
|
|
569
|
+
Extracts the main table name, table type, and an optional property suffix from a logical
|
|
570
|
+
table name string. It parses the given logical table name and determines whether it belongs
|
|
571
|
+
to the main table or some specific table type. If a specific type is found, it splits the
|
|
572
|
+
table name into its components.
|
|
573
|
+
|
|
574
|
+
Parameters:
|
|
575
|
+
table_name (str): The logical table name string that needs to be processed.
|
|
576
|
+
|
|
577
|
+
Returns:
|
|
578
|
+
tuple: A tuple containing:
|
|
579
|
+
- str | None: The main table name.
|
|
580
|
+
- TableType | None: The type of the table, which can be `MAIN` or other enum members of
|
|
581
|
+
`TableType`.
|
|
582
|
+
- str | None: A property suffix string if present in the logical table name, or
|
|
583
|
+
None otherwise.
|
|
584
|
+
"""
|
|
585
|
+
if "/:" not in table_name:
|
|
586
|
+
return table_name, TableType.MAIN, None
|
|
587
|
+
|
|
588
|
+
for table_type in TableType:
|
|
589
|
+
if table_type is TableType.MAIN:
|
|
590
|
+
continue
|
|
591
|
+
|
|
592
|
+
if table_type.value in table_name:
|
|
593
|
+
data = table_name.split(table_type.value, 1)
|
|
594
|
+
if data[1]:
|
|
595
|
+
return data[0], table_type, data[1][1:] # skip /property slash
|
|
596
|
+
return data[0], table_type, None
|
|
597
|
+
|
|
598
|
+
return None, None, None
|
|
@@ -2,12 +2,12 @@ from spinta import commands
|
|
|
2
2
|
from spinta.components import Context
|
|
3
3
|
from spinta.manifests.components import Manifest
|
|
4
4
|
from spinta.backends.constants import TableType
|
|
5
|
-
from spinta.backends.helpers import
|
|
5
|
+
from spinta.backends.helpers import get_table_identifier
|
|
6
6
|
from spinta.backends.memory.components import Memory
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
@commands.prepare.register(Context, Memory, Manifest)
|
|
10
10
|
def prepare(context: Context, backend: Memory, manifest: Manifest, **kwargs):
|
|
11
11
|
for model in commands.get_models(context, manifest).values():
|
|
12
|
-
backend.create(
|
|
13
|
-
backend.create(
|
|
12
|
+
backend.create(get_table_identifier(model).logical_qualified_name)
|
|
13
|
+
backend.create(get_table_identifier(model, TableType.CHANGELOG).logical_qualified_name)
|
|
@@ -16,7 +16,6 @@ def load(
|
|
|
16
16
|
backend: Memory,
|
|
17
17
|
*,
|
|
18
18
|
into: Manifest = None,
|
|
19
|
-
freezed: bool = True,
|
|
20
19
|
) -> None:
|
|
21
20
|
for source in manifest.sync:
|
|
22
|
-
commands.load(context, source, into=into or manifest
|
|
21
|
+
commands.load(context, source, into=into or manifest)
|
|
@@ -7,13 +7,13 @@ from spinta.components import Model
|
|
|
7
7
|
from spinta.typing import ObjectData
|
|
8
8
|
from spinta.backends.memory.components import Memory
|
|
9
9
|
from spinta.backends.constants import TableType
|
|
10
|
-
from spinta.backends.helpers import
|
|
10
|
+
from spinta.backends.helpers import get_table_identifier
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@commands.getall.register(Context, Model, Memory)
|
|
14
14
|
def getall(context: Context, model: Model, db: Memory, *, query: Expr = None, **kwargs) -> Iterator[ObjectData]:
|
|
15
|
-
table =
|
|
16
|
-
return db.data[table].values()
|
|
15
|
+
table = get_table_identifier(model)
|
|
16
|
+
return db.data[table.logical_qualified_name].values()
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@commands.getone.register(Context, Model, Memory)
|
|
@@ -24,8 +24,8 @@ def getone(
|
|
|
24
24
|
*,
|
|
25
25
|
id_: str,
|
|
26
26
|
) -> ObjectData:
|
|
27
|
-
table =
|
|
28
|
-
return db.data[table][id_]
|
|
27
|
+
table = get_table_identifier(model)
|
|
28
|
+
return db.data[table.logical_qualified_name][id_]
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
@commands.changes.register(Context, Model, Memory)
|
|
@@ -38,5 +38,5 @@ def changes(
|
|
|
38
38
|
limit: int = 100,
|
|
39
39
|
offset: int = -10,
|
|
40
40
|
):
|
|
41
|
-
table =
|
|
42
|
-
return db.data[table].values()
|
|
41
|
+
table = get_table_identifier(model, TableType.CHANGELOG)
|
|
42
|
+
return db.data[table.logical_qualified_name].values()
|
|
@@ -2,6 +2,8 @@ from spinta import commands
|
|
|
2
2
|
from spinta.components import Context
|
|
3
3
|
from spinta.backends.postgresql.components import PostgreSQL
|
|
4
4
|
|
|
5
|
+
import sqlalchemy as sa
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
@commands.bootstrap.register(Context, PostgreSQL)
|
|
7
9
|
def bootstrap(context: Context, backend: PostgreSQL):
|
|
@@ -10,5 +12,19 @@ def bootstrap(context: Context, backend: PostgreSQL):
|
|
|
10
12
|
# line.
|
|
11
13
|
# TODO: update appropriate rows in _schema and save `applied` date
|
|
12
14
|
# of schema migration
|
|
15
|
+
validated_schemas = []
|
|
13
16
|
with backend.engine.connect().execution_options(isolation_level="AUTOCOMMIT") as conn:
|
|
17
|
+
for table in backend.tables.values():
|
|
18
|
+
if not (schema := table.schema):
|
|
19
|
+
continue
|
|
20
|
+
|
|
21
|
+
if schema in validated_schemas:
|
|
22
|
+
continue
|
|
23
|
+
|
|
24
|
+
if conn.dialect.has_schema(conn, schema):
|
|
25
|
+
validated_schemas.append(schema)
|
|
26
|
+
continue
|
|
27
|
+
|
|
28
|
+
conn.execute(sa.schema.CreateSchema(schema))
|
|
29
|
+
validated_schemas.append(schema)
|
|
14
30
|
backend.schema.create_all(conn, checkfirst=True)
|