spinta 0.2.dev5__tar.gz → 0.2.dev6__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.dev5 → spinta-0.2.dev6}/PKG-INFO +4 -5
- {spinta-0.2.dev5 → spinta-0.2.dev6}/pyproject.toml +8 -6
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/api/__init__.py +31 -28
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/auth.py +188 -87
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/config.py +7 -1
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/script/registry.py +1 -1
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/store.py +11 -5
- spinta-0.2.dev6/spinta/cli/helpers/sync/__init__.py +9 -0
- spinta-0.2.dev6/spinta/cli/helpers/sync/controllers/data_service.py +11 -0
- spinta-0.2.dev6/spinta/cli/helpers/sync/controllers/dataset.py +105 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/sync/controllers/distribution.py +4 -8
- spinta-0.2.dev6/spinta/cli/helpers/sync/controllers/enum.py +9 -0
- spinta-0.2.dev6/spinta/cli/helpers/sync/helpers.py +233 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/manifest.py +20 -12
- spinta-0.2.dev6/spinta/cli/sync.py +75 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/auth.py +5 -3
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/read.py +14 -7
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/components.py +4 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/config.py +6 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/core/config.py +3 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/core/context.py +5 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/core/enums.py +3 -3
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/soap/commands/read.py +3 -0
- spinta-0.2.dev6/spinta/datasets/backends/dataframe/backends/soap/components.py +50 -0
- spinta-0.2.dev6/spinta/datasets/backends/dataframe/backends/xml/commands/read.py +136 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/commands/read.py +14 -126
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/ufuncs/query/ufuncs.py +4 -21
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/commands/load.py +8 -6
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/enum/helpers.py +1 -1
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/exceptions.py +10 -2
- spinta-0.2.dev6/spinta/handlers.py +51 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/helpers.py +1 -1
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/auth.py +18 -9
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/open_api/helpers.py +10 -0
- spinta-0.2.dev6/spinta/manifests/open_api/openapi_config.py +697 -0
- spinta-0.2.dev6/spinta/manifests/open_api/openapi_generator.py +683 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/helpers.py +6 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd2/helpers.py +37 -9
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/load.py +2 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/client.py +8 -8
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/pytest.py +10 -65
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/config.py +4 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/model.py +3 -3
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/store.py +11 -9
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/common.py +19 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/linkbuilder/ufuncs.py +4 -17
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/resultbuilder/ufuncs.py +25 -0
- spinta-0.2.dev6/spinta/units/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/enums.py +7 -2
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/response.py +62 -1
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/scopes.py +2 -1
- spinta-0.2.dev5/spinta/cli/helpers/sync/__init__.py +0 -2
- spinta-0.2.dev5/spinta/cli/helpers/sync/controllers/dataset.py +0 -64
- spinta-0.2.dev5/spinta/cli/helpers/sync/helpers.py +0 -194
- spinta-0.2.dev5/spinta/cli/sync.py +0 -72
- spinta-0.2.dev5/spinta/datasets/backends/dataframe/backends/soap/components.py +0 -18
- {spinta-0.2.dev5 → spinta-0.2.dev6}/LICENSE +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/README.rst +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/__main__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/accesslog/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/accesslog/file.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/accesslog/python.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/api/inspect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/api/schema.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/api/validators.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/asgi.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/constants.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/decode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/encode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/validate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/commands/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/fs/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/auth.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/encode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/commands/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/memory/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/encode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/validate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/commands/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/array/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/array/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/file/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/file/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/object/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/types/object/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/ufuncs/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/mongo/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/commands/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/nobackend/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/column.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/encode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/link.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/constants.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/model.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/property.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/datatype.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/file.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/geometry.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/ref.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/string.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/migrate/types/text.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/redirect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/summary.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/validate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/commands/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/constants.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/files.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/exceptions.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/extractors.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/migrate/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/migrate/actions.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/migrate/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/name.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/redirect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/helpers/validate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/sqlalchemy.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array_backref/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/array_backref/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/backref/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/backref/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/denorm/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/external_ref/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/file/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/file/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/file/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/file/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/file/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/geometry/encode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/geometry/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/geometry/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/geometry/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/object/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/object/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/object/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/object/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/object/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/ref/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/ref/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/ref/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/ref/validate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/text/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/types/text/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/result/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/result/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/postgresql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/backends/types/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/admin.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/auth.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/data.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/get.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/admin/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/admin/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/admin/registry.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/admin/scripts/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/admin/scripts/changelog.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/admin/scripts/deduplicate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/auth.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/data.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/errors.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/backends/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/backends/postgresql/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/backends/postgresql/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/export/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/delete.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/error.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/state.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/sync.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/utils.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/push/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/script/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/script/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/script/core.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/script/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/sync/controllers/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/sync/controllers/dsa.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/typer.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/registry.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/clients.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/keymaps/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/initial_setup.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/modified_time.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/keymaps/sqlalchemy/redirect_support.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/helpers/upgrade/scripts/redirect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/inspect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/keymap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/main.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/pii.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/pull.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/push.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/server.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/show.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/cli/upgrade.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/client.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/search.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/version.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/commands/write.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/compat.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/config.yml +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/core/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/core/access.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/core/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/csv/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/csv/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/json/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/json/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/memory/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/soap/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/soap/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/soap/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/xml/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/dataframe → spinta-0.2.dev6/spinta/datasets/backends/dataframe/backends/xml}/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/backends/xml/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/dataframe/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/dataframe/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/dataframe/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/dataframe/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/ufuncs/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/notimpl → spinta-0.2.dev6/spinta/datasets/backends/dataframe/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/dataframe/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/notimpl/commands → spinta-0.2.dev6/spinta/datasets/backends/notimpl}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql → spinta-0.2.dev6/spinta/datasets/backends/notimpl/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/notimpl/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/notimpl/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/notimpl/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends → spinta-0.2.dev6/spinta/datasets/backends/sql}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mariadb → spinta-0.2.dev6/spinta/datasets/backends/sql/backends}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mariadb/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mariadb}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mariadb/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mariadb/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mariadb/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mssql → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mssql/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mssql}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mssql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mssql/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mssql/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mssql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mysql → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mssql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mysql/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mysql}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mysql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mysql/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/mysql/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mysql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/oracle → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/mysql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/oracle/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/oracle}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/oracle/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/oracle/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/oracle/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/oracle/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/postgresql → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/oracle/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/postgresql/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/postgresql}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/postgresql/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/postgresql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/sqlite → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/sqlite/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/sqlite}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/sqlite/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/sqlite/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/sqlite/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/commands → spinta-0.2.dev6/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sql/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/cast.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/column.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/ufuncs/query → spinta-0.2.dev6/spinta/datasets/backends/sql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sql/ufuncs/result → spinta-0.2.dev6/spinta/datasets/backends/sql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/query/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/query/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/query/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sqldump → spinta-0.2.dev6/spinta/datasets/backends/sql/ufuncs/result}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/result/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sqldump/commands → spinta-0.2.dev6/spinta/datasets/backends/sqldump}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/sqldump/ufuncs → spinta-0.2.dev6/spinta/datasets/backends/sqldump/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sqldump/commands/inspect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sqldump/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sqldump/commands/wait.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sqldump/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/wsdl → spinta-0.2.dev6/spinta/datasets/backends/sqldump/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sqldump/ufuncs/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/sqldump/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/backends/wsdl/commads → spinta-0.2.dev6/spinta/datasets/backends/wsdl}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/commands → spinta-0.2.dev6/spinta/datasets/backends/wsdl/commads}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/wsdl/commads/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/backends/wsdl/components.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/inspect → spinta-0.2.dev6/spinta/datasets/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/commands/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/commands/error.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/commands/inspect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/commands/link.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/commands/wipe.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/enums.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/inspect/commands → spinta-0.2.dev6/spinta/datasets/inspect}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/datasets/keymaps → spinta-0.2.dev6/spinta/datasets/inspect/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/inspect/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/inspect/commands/merge.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/inspect/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/inspect/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions → spinta-0.2.dev6/spinta/datasets/keymaps}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/keymaps/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/keymaps/sqlalchemy.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/keymaps/sync.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/datasets/utils.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions/comments → spinta-0.2.dev6/spinta/dimensions}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions/enum → spinta-0.2.dev6/spinta/dimensions/comments}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/comments/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/comments/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions/lang → spinta-0.2.dev6/spinta/dimensions/enum}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/enum/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/enum/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/enum/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions/param → spinta-0.2.dev6/spinta/dimensions/lang}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/lang/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/lang/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions/prefix → spinta-0.2.dev6/spinta/dimensions/param}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/param/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/param/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/param/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/dimensions/prefix/commands → spinta-0.2.dev6/spinta/dimensions/prefix}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/formats → spinta-0.2.dev6/spinta/dimensions/prefix/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/prefix/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/prefix/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dimensions/prefix/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/dispatcher.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/fetcher.py +0 -0
- {spinta-0.2.dev5/spinta/formats/ascii → spinta-0.2.dev6/spinta/formats}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/formats/csv → spinta-0.2.dev6/spinta/formats/ascii}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/ascii/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/ascii/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/ascii/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/components.py +0 -0
- {spinta-0.2.dev5/spinta/formats/html → spinta-0.2.dev6/spinta/formats/csv}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/csv/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/csv/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/formats/json → spinta-0.2.dev6/spinta/formats/html}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/html/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/html/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/html/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/formats/jsonlines → spinta-0.2.dev6/spinta/formats/json}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/json/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/json/components.py +0 -0
- {spinta-0.2.dev5/spinta/formats/xlsx → spinta-0.2.dev6/spinta/formats/jsonlines}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/jsonlines/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/jsonlines/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/rdf/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/rdf/components.py +0 -0
- {spinta-0.2.dev5/spinta/hacks → spinta-0.2.dev6/spinta/formats/xlsx}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/xlsx/commands.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/formats/xlsx/components.py +0 -0
- {spinta-0.2.dev5/spinta/manifests → spinta-0.2.dev6/spinta/hacks}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/hacks/spyna.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/hacks/urlparams.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/logging_config.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifest/_ns.yml +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifest/_schema/version.yml +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifest/_schema.yml +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifest/_txn.yml +0 -0
- {spinta-0.2.dev5/spinta/manifests/backend → spinta-0.2.dev6/spinta/manifests}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/backend/commands → spinta-0.2.dev6/spinta/manifests/backend}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests → spinta-0.2.dev6/spinta/manifests/backend}/commands/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/commands/sync.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/backend/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/dict → spinta-0.2.dev6/spinta/manifests/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/auth.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/error.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/init.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/inspect.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/link.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/components.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/dict/commands → spinta-0.2.dev6/spinta/manifests/dict}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/internal → spinta-0.2.dev6/spinta/manifests/dict/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/dict/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/dict/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/dict/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/dict/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/internal/commands → spinta-0.2.dev6/spinta/manifests/internal}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/internal_sql → spinta-0.2.dev6/spinta/manifests/internal/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal/components.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/internal_sql/commands → spinta-0.2.dev6/spinta/manifests/internal_sql}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/memory → spinta-0.2.dev6/spinta/manifests/internal_sql/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/backend.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/commands/read.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/internal_sql/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/memory/commands → spinta-0.2.dev6/spinta/manifests/memory}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/mermaid → spinta-0.2.dev6/spinta/manifests/memory/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/memory/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/memory/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/memory/components.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/open_api → spinta-0.2.dev6/spinta/manifests/mermaid}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/mermaid/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/mermaid/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/open_api/commands → spinta-0.2.dev6/spinta/manifests/open_api}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/sql → spinta-0.2.dev6/spinta/manifests/open_api/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/open_api/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/open_api/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/open_api/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/rdf/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/rdf/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/rdf/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/rdf/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/rdf/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/sql/commands → spinta-0.2.dev6/spinta/manifests/sql}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/tabular → spinta-0.2.dev6/spinta/manifests/sql/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/sql/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/sql/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/sql/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/sql/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/tabular/commands → spinta-0.2.dev6/spinta/manifests/tabular}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/tabular/formats → spinta-0.2.dev6/spinta/manifests/tabular/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/constants.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/xsd → spinta-0.2.dev6/spinta/manifests/tabular/formats}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/tabular/formats/gsheets.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/xsd/commands → spinta-0.2.dev6/spinta/manifests/xsd}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/xsd2 → spinta-0.2.dev6/spinta/manifests/xsd/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/xsd2/commands → spinta-0.2.dev6/spinta/manifests/xsd2}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/yaml → spinta-0.2.dev6/spinta/manifests/xsd2/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd2/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd2/commands/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/xsd2/components.py +0 -0
- {spinta-0.2.dev5/spinta/manifests/yaml/commands → spinta-0.2.dev6/spinta/manifests/yaml}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/migrations/schema → spinta-0.2.dev6/spinta/manifests/yaml/commands}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/bootstrap.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/configure.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/freeze.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/migrate.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/commands/sync.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/manifests/yaml/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/methods.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/middlewares.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/migrations/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/naming → spinta-0.2.dev6/spinta/migrations/schema}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/migrations/schema/alembic.py +0 -0
- {spinta-0.2.dev5/spinta/testing/types → spinta-0.2.dev6/spinta/naming}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/naming/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/naming/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/naming/ufuncts.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/nodes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/renderer.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/spyna.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/templates/base.html +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/templates/data.html +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/templates/error.html +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/templates/form.html +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/cli.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/config.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/context.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/csv.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/data.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/datasets.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/dtypes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/manifest.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/push.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/request.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/tabular.py +0 -0
- {spinta-0.2.dev5/spinta → spinta-0.2.dev6/spinta/testing}/types/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/types/geometry.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/testing/utils.py +0 -0
- {spinta-0.2.dev5/spinta/types/array → spinta-0.2.dev6/spinta/types}/__init__.py +0 -0
- {spinta-0.2.dev5/spinta/types/backref → spinta-0.2.dev6/spinta/types/array}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/array/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/array/link.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/array/resolve.py +0 -0
- {spinta-0.2.dev5/spinta/types/denorm → spinta-0.2.dev6/spinta/types/backref}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/backref/link.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/command.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/datatype.py +0 -0
- {spinta-0.2.dev5/spinta/types/file → spinta-0.2.dev6/spinta/types/denorm}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/denorm/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/denorm/link.py +0 -0
- {spinta-0.2.dev5/spinta/types/geometry → spinta-0.2.dev6/spinta/types/file}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/file/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/file/decode.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/file/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/types/inherit → spinta-0.2.dev6/spinta/types/geometry}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/geometry/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/geometry/constants.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/geometry/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/geometry/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/types/object → spinta-0.2.dev6/spinta/types/inherit}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/inherit/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/namespace.py +0 -0
- {spinta-0.2.dev5/spinta/types/partial → spinta-0.2.dev6/spinta/types/object}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/object/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/object/link.py +0 -0
- {spinta-0.2.dev5/spinta/types/ref → spinta-0.2.dev6/spinta/types/partial}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/partial/link.py +0 -0
- {spinta-0.2.dev5/spinta/types/text → spinta-0.2.dev6/spinta/types/ref}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/ref/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/ref/link.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/ref/resolve.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs → spinta-0.2.dev6/spinta/types/text}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/text/check.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/text/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/text/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/types/text/load.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/typing.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/changebase → spinta-0.2.dev6/spinta/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/binds.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/linkbuilder → spinta-0.2.dev6/spinta/ufuncs/changebase}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/changebase/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/changebase/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/changebase/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/loadbuilder → spinta-0.2.dev6/spinta/ufuncs/linkbuilder}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/linkbuilder/components.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/propertyresolver → spinta-0.2.dev6/spinta/ufuncs/loadbuilder}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/loadbuilder/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/loadbuilder/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/loadbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/querybuilder → spinta-0.2.dev6/spinta/ufuncs/propertyresolver}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/propertyresolver/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/propertyresolver/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/requestparamsbuilder → spinta-0.2.dev6/spinta/ufuncs/querybuilder}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/querybuilder/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/querybuilder/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/querybuilder/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/resultbuilder → spinta-0.2.dev6/spinta/ufuncs/requestparamsbuilder}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/requestparamsbuilder/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/requestparamsbuilder/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/requestparamsbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev5/spinta/ufuncs/summaryenv → spinta-0.2.dev6/spinta/ufuncs/resultbuilder}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/resultbuilder/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/resultbuilder/helpers.py +0 -0
- {spinta-0.2.dev5/spinta/units → spinta-0.2.dev6/spinta/ufuncs/summaryenv}/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/summaryenv/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/ufuncs/summaryenv/ufuncs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/units/components.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/units/helpers.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/urlparams.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/__init__.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/aiotools.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/changes.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/config.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/data.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/encoding.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/errors.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/functools.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/idgen.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/imports.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/itertools.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/json.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/naming.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/nestedstruct.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/nin.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/passwords.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/path.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/refs.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/schema.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/sqlalchemy.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/sqlite.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/starlette.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/streams.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/tree.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/types.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/units.py +0 -0
- {spinta-0.2.dev5 → spinta-0.2.dev6}/spinta/utils/url.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: spinta
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.dev6
|
|
4
4
|
Summary: A platform for describing, extracting, transforming, loading and serving open data.
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Mantas Zimnickas
|
|
@@ -33,7 +33,7 @@ Requires-Dist: aiofiles
|
|
|
33
33
|
Requires-Dist: aiohttp
|
|
34
34
|
Requires-Dist: alembic (>=1.11.0,<1.12.0) ; extra == "migrations" or extra == "all"
|
|
35
35
|
Requires-Dist: asyncpg
|
|
36
|
-
Requires-Dist: authlib (>=0.
|
|
36
|
+
Requires-Dist: authlib (>=1.0.0)
|
|
37
37
|
Requires-Dist: cachetools
|
|
38
38
|
Requires-Dist: click
|
|
39
39
|
Requires-Dist: dask[dataframe]
|
|
@@ -46,7 +46,6 @@ Requires-Dist: lark-parser
|
|
|
46
46
|
Requires-Dist: lxml
|
|
47
47
|
Requires-Dist: msgpack
|
|
48
48
|
Requires-Dist: multipledispatch
|
|
49
|
-
Requires-Dist: mypy
|
|
50
49
|
Requires-Dist: numpy
|
|
51
50
|
Requires-Dist: openpyxl
|
|
52
51
|
Requires-Dist: phonenumbers
|
|
@@ -65,8 +64,8 @@ Requires-Dist: ruamel.yaml
|
|
|
65
64
|
Requires-Dist: setuptools
|
|
66
65
|
Requires-Dist: setuptools-scm
|
|
67
66
|
Requires-Dist: sqlalchemy (>=1.4,<1.5)
|
|
68
|
-
Requires-Dist: sqlalchemy-utils
|
|
69
|
-
Requires-Dist: sqlean-py
|
|
67
|
+
Requires-Dist: sqlalchemy-utils (<=0.41.2)
|
|
68
|
+
Requires-Dist: sqlean-py (<=3.49.1)
|
|
70
69
|
Requires-Dist: sqlparse
|
|
71
70
|
Requires-Dist: starlette (>=0.40)
|
|
72
71
|
Requires-Dist: tabulate
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "spinta"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.dev6"
|
|
4
4
|
description = "A platform for describing, extracting, transforming, loading and serving open data."
|
|
5
5
|
authors = ["Mantas Zimnickas <sirexas@gmail.com>"]
|
|
6
6
|
license = "MIT"
|
|
@@ -36,7 +36,9 @@ spinta = "spinta.cli.main:app"
|
|
|
36
36
|
[tool.poetry.dependencies]
|
|
37
37
|
python = "^3.9"
|
|
38
38
|
aiofiles = "*"
|
|
39
|
-
|
|
39
|
+
# https://github.com/atviriduomenys/spinta/issues/675
|
|
40
|
+
# 0.x -> 1.x upgrade changed their implementation API, so we can no longer support 0.x.
|
|
41
|
+
authlib = ">=1.0.0"
|
|
40
42
|
jinja2 = "*"
|
|
41
43
|
jsonpatch = "*"
|
|
42
44
|
lark-parser = "*"
|
|
@@ -79,7 +81,8 @@ psycopg2-binary = "*"
|
|
|
79
81
|
# sqlalchemy = "~1.4"
|
|
80
82
|
sqlalchemy = "~1.4"
|
|
81
83
|
# https://github.com/kvesteri/sqlalchemy-utils/issues/472
|
|
82
|
-
sqlalchemy-utils
|
|
84
|
+
# https://github.com/kvesteri/sqlalchemy-utils/issues/791
|
|
85
|
+
sqlalchemy-utils = "<=0.41.2"
|
|
83
86
|
|
|
84
87
|
# Mongo backend dependendencies
|
|
85
88
|
# https://github.com/atviriduomenys/spinta/issues/806
|
|
@@ -106,12 +109,11 @@ psutil = "*"
|
|
|
106
109
|
tabulate = "*"
|
|
107
110
|
pyproj = [{version = ">=3.7.0", python = ">=3.13"}, {version = "3.6.1", python = "<3.13"}]
|
|
108
111
|
xmltodict = "*"
|
|
109
|
-
|
|
112
|
+
# Error when trying to install >=3.50
|
|
113
|
+
sqlean-py = "<=3.49.1"
|
|
110
114
|
cachetools = "*"
|
|
111
115
|
docutils = "^0.21.2"
|
|
112
116
|
zeep = "^4.3.1"
|
|
113
|
-
# mypy naudojamas tam, kad galima būtų naudoti `defaultdict`, ne tik tipų tikrinimui
|
|
114
|
-
mypy = "*"
|
|
115
117
|
|
|
116
118
|
[tool.poetry.extras]
|
|
117
119
|
http = ["gunicorn", "uvicorn"]
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import logging
|
|
2
3
|
import uuid
|
|
3
4
|
from typing import Type
|
|
4
5
|
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
6
|
from authlib.common.errors import AuthlibHTTPError
|
|
8
7
|
from authlib.oauth2.rfc6750.errors import InsufficientScopeError
|
|
9
8
|
from pydantic import ValidationError
|
|
10
|
-
|
|
11
9
|
from starlette.applications import Starlette
|
|
10
|
+
from starlette.datastructures import FormData
|
|
12
11
|
from starlette.exceptions import HTTPException
|
|
12
|
+
from starlette.middleware import Middleware
|
|
13
13
|
from starlette.requests import Request
|
|
14
|
-
from starlette.responses import Response, JSONResponse
|
|
15
14
|
from starlette.responses import RedirectResponse
|
|
16
|
-
from starlette.
|
|
17
|
-
from starlette.staticfiles import StaticFiles
|
|
15
|
+
from starlette.responses import Response, JSONResponse
|
|
18
16
|
from starlette.routing import Route, Mount
|
|
19
|
-
from starlette.
|
|
17
|
+
from starlette.staticfiles import StaticFiles
|
|
18
|
+
from starlette.templating import Jinja2Templates
|
|
20
19
|
|
|
21
20
|
from spinta import components, commands
|
|
21
|
+
from spinta.accesslog import create_accesslog
|
|
22
22
|
from spinta.api.validators import ClientAddData, ClientPatchData, ClientSecretPatchData
|
|
23
23
|
from spinta.auth import (
|
|
24
24
|
AuthorizationServer,
|
|
@@ -32,19 +32,19 @@ from spinta.auth import (
|
|
|
32
32
|
get_clients_path,
|
|
33
33
|
Scopes,
|
|
34
34
|
authenticate_token,
|
|
35
|
+
StarletteOAuth2Data,
|
|
35
36
|
)
|
|
36
|
-
from spinta.auth import ResourceProtector
|
|
37
37
|
from spinta.auth import BearerTokenValidator
|
|
38
|
+
from spinta.auth import ResourceProtector
|
|
38
39
|
from spinta.auth import get_auth_request
|
|
39
40
|
from spinta.auth import get_auth_token
|
|
40
41
|
from spinta.commands import prepare, get_version
|
|
41
42
|
from spinta.components import Context, UrlParams
|
|
42
43
|
from spinta.exceptions import BaseError, MultipleErrors, error_response, InsufficientPermission, ClientValidationError
|
|
44
|
+
from spinta.exceptions import NoAuthServer
|
|
43
45
|
from spinta.middlewares import ContextMiddleware
|
|
44
46
|
from spinta.urlparams import Version
|
|
45
47
|
from spinta.urlparams import get_response_type
|
|
46
|
-
from spinta.accesslog import create_accesslog
|
|
47
|
-
from spinta.exceptions import NoAuthServer
|
|
48
48
|
from spinta.utils.path import resource_filename
|
|
49
49
|
|
|
50
50
|
log = logging.getLogger(__name__)
|
|
@@ -79,12 +79,13 @@ async def auth_token(request: Request):
|
|
|
79
79
|
auth_server = context.get("auth.server")
|
|
80
80
|
if auth_server.enabled():
|
|
81
81
|
resp: JSONResponse = auth_server.create_token_response(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
StarletteOAuth2Data(
|
|
83
|
+
method=request.method,
|
|
84
|
+
uri=str(request.url.replace(query="")),
|
|
85
|
+
headers=request.headers,
|
|
86
|
+
form=await request.form(),
|
|
87
|
+
query=request.query_params,
|
|
88
|
+
)
|
|
88
89
|
)
|
|
89
90
|
|
|
90
91
|
payload = json.loads(resp.body.decode("utf-8"))
|
|
@@ -117,12 +118,13 @@ def _auth_client_context(request: Request) -> Context:
|
|
|
117
118
|
context.set(
|
|
118
119
|
"auth.request",
|
|
119
120
|
get_auth_request(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
121
|
+
StarletteOAuth2Data(
|
|
122
|
+
method=request.method,
|
|
123
|
+
uri=str(request.url.replace(query="")),
|
|
124
|
+
headers=request.headers,
|
|
125
|
+
form=FormData(),
|
|
126
|
+
query=request.query_params,
|
|
127
|
+
)
|
|
126
128
|
),
|
|
127
129
|
)
|
|
128
130
|
context.set("auth.token", get_auth_token(context))
|
|
@@ -295,12 +297,13 @@ async def homepage(request: Request):
|
|
|
295
297
|
context.set(
|
|
296
298
|
"auth.request",
|
|
297
299
|
get_auth_request(
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
300
|
+
StarletteOAuth2Data(
|
|
301
|
+
method=request.method,
|
|
302
|
+
uri=str(request.url.replace(query="")),
|
|
303
|
+
headers=request.headers,
|
|
304
|
+
form=await request.form(),
|
|
305
|
+
query=request.query_params,
|
|
306
|
+
)
|
|
304
307
|
),
|
|
305
308
|
)
|
|
306
309
|
context.set("auth.token", get_auth_token(context))
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import base64
|
|
4
|
+
import dataclasses
|
|
4
5
|
import datetime
|
|
5
6
|
import enum
|
|
6
7
|
import json
|
|
@@ -9,27 +10,31 @@ import os
|
|
|
9
10
|
import pathlib
|
|
10
11
|
import time
|
|
11
12
|
import uuid
|
|
13
|
+
from collections import defaultdict
|
|
14
|
+
from functools import cached_property
|
|
12
15
|
from threading import Lock
|
|
13
16
|
from typing import Set, Any
|
|
14
17
|
from typing import Type
|
|
15
18
|
from typing import Union, List, Tuple
|
|
16
19
|
|
|
17
20
|
import ruamel.yaml
|
|
18
|
-
from authlib.jose import
|
|
21
|
+
from authlib.jose import JsonWebKey
|
|
19
22
|
from authlib.jose import jwt
|
|
20
23
|
from authlib.jose.errors import JoseError
|
|
21
24
|
from authlib.oauth2 import OAuth2Error
|
|
22
25
|
from authlib.oauth2 import OAuth2Request
|
|
23
26
|
from authlib.oauth2 import rfc6749
|
|
24
27
|
from authlib.oauth2 import rfc6750
|
|
25
|
-
from authlib.oauth2.rfc6749 import grants
|
|
26
|
-
from authlib.oauth2.rfc6749.errors import InvalidClientError
|
|
28
|
+
from authlib.oauth2.rfc6749 import grants, OAuth2Payload, scope_to_list, list_to_scope
|
|
29
|
+
from authlib.oauth2.rfc6749.errors import InvalidClientError
|
|
27
30
|
from authlib.oauth2.rfc6750.errors import InsufficientScopeError
|
|
31
|
+
from authlib.oauth2.rfc6749.util import scope_to_list
|
|
28
32
|
from cachetools import cached, LRUCache
|
|
29
33
|
from cachetools.keys import hashkey
|
|
30
34
|
from cryptography.hazmat.backends import default_backend
|
|
31
35
|
from cryptography.hazmat.primitives.asymmetric import rsa
|
|
32
36
|
from multipledispatch import dispatch
|
|
37
|
+
from starlette.datastructures import FormData, QueryParams, Headers
|
|
33
38
|
from starlette.exceptions import HTTPException
|
|
34
39
|
from starlette.responses import JSONResponse
|
|
35
40
|
|
|
@@ -68,6 +73,10 @@ CLIENT_FILE_CACHE_SIZE_LIMIT = 1000
|
|
|
68
73
|
KEYMAP_CACHE_SIZE_LIMIT = 1
|
|
69
74
|
DEFAULT_CLIENT_ID_CACHE_SIZE_LIMIT = 1
|
|
70
75
|
DEFAULT_CREDENTIALS_SECTION = "default"
|
|
76
|
+
DEPRECATED_SCOPE_PREFIX = "spinta_"
|
|
77
|
+
|
|
78
|
+
# Scope types taken from authlib.oauth2.rfc6749.util.scope_to_list
|
|
79
|
+
SCOPE_TYPE = Union[tuple, list, set, str, None]
|
|
71
80
|
|
|
72
81
|
|
|
73
82
|
class KeyType(enum.Enum):
|
|
@@ -92,31 +101,31 @@ class Scopes(enum.Enum):
|
|
|
92
101
|
# Grants access to change meta fields (like _id) through request
|
|
93
102
|
SET_META_FIELDS = "set_meta_fields"
|
|
94
103
|
|
|
95
|
-
def __str__(self):
|
|
104
|
+
def __str__(self) -> str:
|
|
96
105
|
return self.value
|
|
97
106
|
|
|
98
107
|
|
|
99
108
|
class AuthorizationServer(rfc6749.AuthorizationServer):
|
|
100
109
|
def __init__(self, context):
|
|
101
|
-
super().__init__(
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
super().__init__()
|
|
111
|
+
self.register_grant(grants.ClientCredentialsGrant)
|
|
112
|
+
self.register_token_generator(
|
|
113
|
+
"default",
|
|
114
|
+
rfc6750.BearerToken(
|
|
104
115
|
access_token_generator=self._generate_token,
|
|
105
116
|
expires_generator=self._get_expires_in,
|
|
106
117
|
),
|
|
107
|
-
save_token=self._save_token,
|
|
108
118
|
)
|
|
109
|
-
self.register_grant(grants.ClientCredentialsGrant)
|
|
110
119
|
self._context = context
|
|
111
120
|
self._private_key = load_key(context, KeyType.private, required=False)
|
|
112
121
|
|
|
113
|
-
def enabled(self):
|
|
122
|
+
def enabled(self) -> bool:
|
|
114
123
|
return self._private_key is not None
|
|
115
124
|
|
|
116
|
-
def create_oauth2_request(self, request):
|
|
125
|
+
def create_oauth2_request(self, request: StarletteOAuth2Data) -> OAuth2Request:
|
|
117
126
|
return get_auth_request(request)
|
|
118
127
|
|
|
119
|
-
def handle_response(self, status_code, payload, headers) -> JSONResponse:
|
|
128
|
+
def handle_response(self, status_code: int, payload: Any, headers: Any) -> JSONResponse:
|
|
120
129
|
return JSONResponse(payload, status_code=status_code, headers=dict(headers))
|
|
121
130
|
|
|
122
131
|
def handle_error_response(
|
|
@@ -130,19 +139,19 @@ class AuthorizationServer(rfc6749.AuthorizationServer):
|
|
|
130
139
|
def send_signal(self, *args, **kwargs):
|
|
131
140
|
pass
|
|
132
141
|
|
|
133
|
-
def
|
|
142
|
+
def query_client(self, client_name: str) -> Client:
|
|
134
143
|
path = get_clients_path(self._context.get("config"))
|
|
135
144
|
return query_client(path, client_name, is_name=True)
|
|
136
145
|
|
|
137
|
-
def
|
|
146
|
+
def save_token(self, token, request):
|
|
138
147
|
pass
|
|
139
148
|
|
|
140
|
-
def _get_expires_in(self, client, grant_type):
|
|
149
|
+
def _get_expires_in(self, client: Client, grant_type: str) -> int:
|
|
141
150
|
return int(datetime.timedelta(days=10).total_seconds())
|
|
142
151
|
|
|
143
|
-
def _generate_token(self, client: Client,
|
|
152
|
+
def _generate_token(self, grant_type: str, client: Client, user: str, scope: str, **kwargs) -> str:
|
|
144
153
|
expires_in = self._get_expires_in(client, grant_type)
|
|
145
|
-
scopes = scope.split() if scope else
|
|
154
|
+
scopes = set(scope.split()) if scope else set()
|
|
146
155
|
return create_access_token(self._context, self._private_key, client.id, expires_in, scopes)
|
|
147
156
|
|
|
148
157
|
|
|
@@ -152,9 +161,8 @@ class ResourceProtector(rfc6749.ResourceProtector):
|
|
|
152
161
|
context: Context,
|
|
153
162
|
Validator: Type[rfc6750.BearerTokenValidator],
|
|
154
163
|
):
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
164
|
+
super().__init__()
|
|
165
|
+
self.register_token_validator(Validator(context))
|
|
158
166
|
|
|
159
167
|
|
|
160
168
|
class BearerTokenValidator(rfc6750.BearerTokenValidator):
|
|
@@ -163,15 +171,9 @@ class BearerTokenValidator(rfc6750.BearerTokenValidator):
|
|
|
163
171
|
self._context = context
|
|
164
172
|
self._public_key = load_key(context, KeyType.public)
|
|
165
173
|
|
|
166
|
-
def authenticate_token(self, token_string: str):
|
|
174
|
+
def authenticate_token(self, token_string: str) -> Token:
|
|
167
175
|
return Token(token_string, self)
|
|
168
176
|
|
|
169
|
-
def request_invalid(self, request):
|
|
170
|
-
return False
|
|
171
|
-
|
|
172
|
-
def token_revoked(self, token):
|
|
173
|
-
return False
|
|
174
|
-
|
|
175
177
|
|
|
176
178
|
class Client(rfc6749.ClientMixin):
|
|
177
179
|
id: str
|
|
@@ -195,21 +197,45 @@ class Client(rfc6749.ClientMixin):
|
|
|
195
197
|
self.scopes = set(scopes)
|
|
196
198
|
self.backends = backends
|
|
197
199
|
|
|
198
|
-
|
|
200
|
+
# Auth method used for token endpoint.
|
|
201
|
+
# More info: token_endpoint_auth_method https://datatracker.ietf.org/doc/html/rfc7591#autoid-5
|
|
202
|
+
self.token_endpoint_auth_method = "client_secret_basic"
|
|
203
|
+
|
|
204
|
+
# Allowed grant types.
|
|
205
|
+
# More info: grant_types https://datatracker.ietf.org/doc/html/rfc7591#autoid-5
|
|
206
|
+
self.grant_types = ["client_credentials"]
|
|
207
|
+
|
|
208
|
+
def __repr__(self) -> str:
|
|
199
209
|
cls = type(self)
|
|
200
210
|
return f"{cls.__module__}.{cls.__name__}(id={self.id!r})"
|
|
201
211
|
|
|
202
|
-
def
|
|
212
|
+
def get_client_id(self) -> str:
|
|
213
|
+
return self.id
|
|
214
|
+
|
|
215
|
+
def get_allowed_scope(self, scope: str) -> str:
|
|
216
|
+
scopes = set(scope_to_list(scope))
|
|
217
|
+
unknown_scopes = scopes - self.scopes
|
|
218
|
+
if unknown_scopes:
|
|
219
|
+
log.warning("requested unknown scopes: %s", ", ".join(sorted(unknown_scopes)))
|
|
220
|
+
unknown_scopes = ", ".join(sorted(unknown_scopes))
|
|
221
|
+
raise InvalidScopes(scopes=unknown_scopes)
|
|
222
|
+
else:
|
|
223
|
+
result = list_to_scope(scopes)
|
|
224
|
+
return result
|
|
225
|
+
|
|
226
|
+
def check_client_secret(self, client_secret: Any) -> bool:
|
|
203
227
|
log.debug(f"Incorrect client {self.id!r} secret hash.")
|
|
204
228
|
return passwords.verify(client_secret, self.secret_hash)
|
|
205
229
|
|
|
206
|
-
def
|
|
207
|
-
|
|
230
|
+
def check_endpoint_auth_method(self, method: str, endpoint: str) -> bool:
|
|
231
|
+
if endpoint == "token":
|
|
232
|
+
return method == self.token_endpoint_auth_method
|
|
233
|
+
return False
|
|
208
234
|
|
|
209
|
-
def check_grant_type(self, grant_type: str):
|
|
210
|
-
return grant_type
|
|
235
|
+
def check_grant_type(self, grant_type: str) -> bool:
|
|
236
|
+
return grant_type in self.grant_types
|
|
211
237
|
|
|
212
|
-
def check_requested_scopes(self, scopes: set):
|
|
238
|
+
def check_requested_scopes(self, scopes: set) -> bool:
|
|
213
239
|
unknown_scopes = scopes - self.scopes
|
|
214
240
|
if unknown_scopes:
|
|
215
241
|
log.warning("requested unknown scopes: %s", ", ".join(sorted(unknown_scopes)))
|
|
@@ -226,22 +252,32 @@ class Token(rfc6749.TokenMixin):
|
|
|
226
252
|
except JoseError as e:
|
|
227
253
|
raise InvalidToken(error=str(e))
|
|
228
254
|
|
|
255
|
+
self.expires_in = self._token["exp"] - self._token["iat"]
|
|
256
|
+
self.client_id = self.get_aud()
|
|
257
|
+
|
|
229
258
|
self._validator = validator
|
|
230
259
|
|
|
231
|
-
def valid_scope(self, scope
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
260
|
+
def valid_scope(self, scope: SCOPE_TYPE) -> bool:
|
|
261
|
+
required_scopes = scope_to_list(scope)
|
|
262
|
+
return not self._validator.scope_insufficient(self.get_scope(), required_scopes)
|
|
263
|
+
|
|
264
|
+
def check_scope(self, scope: SCOPE_TYPE):
|
|
265
|
+
token_scopes = set(scope_to_list(self._token.get("scope", "")))
|
|
266
|
+
if any(token_scope for token_scope in token_scopes if token_scope.startswith(DEPRECATED_SCOPE_PREFIX)):
|
|
267
|
+
log.warning(
|
|
268
|
+
"Deprecation warning: using 'spinta_*' scopes is deprecated and will be removed in a future version."
|
|
269
|
+
)
|
|
236
270
|
|
|
237
|
-
|
|
238
|
-
if not self.valid_scope(scope, operator=operator):
|
|
271
|
+
if not self.valid_scope(scope):
|
|
239
272
|
client_id = self._token["aud"]
|
|
240
273
|
|
|
274
|
+
operator = "OR"
|
|
241
275
|
if isinstance(scope, str):
|
|
276
|
+
operator = "AND"
|
|
242
277
|
scope = [scope]
|
|
243
|
-
|
|
244
|
-
|
|
278
|
+
missing_scopes = ", ".join(
|
|
279
|
+
sorted([single_scope for single_scope in scope if not single_scope.startswith(DEPRECATED_SCOPE_PREFIX)])
|
|
280
|
+
)
|
|
245
281
|
|
|
246
282
|
# FIXME: this should be wrapped into UserError.
|
|
247
283
|
if operator == "AND":
|
|
@@ -253,51 +289,110 @@ class Token(rfc6749.TokenMixin):
|
|
|
253
289
|
else:
|
|
254
290
|
raise Exception(f"Unknown operator {operator}.")
|
|
255
291
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
def get_scope(self):
|
|
260
|
-
return self._token.get("scope", "")
|
|
292
|
+
# No longer mandatory, but will keep it, since it is used in other places.
|
|
293
|
+
def get_client_id(self) -> str:
|
|
294
|
+
return self.get_aud()
|
|
261
295
|
|
|
262
|
-
def get_sub(self): # User.
|
|
296
|
+
def get_sub(self) -> str: # User.
|
|
263
297
|
return self._token.get("sub", "")
|
|
264
298
|
|
|
265
|
-
def get_aud(self): # Client.
|
|
299
|
+
def get_aud(self) -> str: # Client.
|
|
266
300
|
return self._token.get("aud", "")
|
|
267
301
|
|
|
268
|
-
def get_jti(self):
|
|
302
|
+
def get_jti(self) -> str:
|
|
269
303
|
return self._token.get("jti", "")
|
|
270
304
|
|
|
271
|
-
|
|
272
|
-
|
|
305
|
+
# Currently required implementations for authlib >= 1.0
|
|
306
|
+
# https://gist.github.com/lepture/506bfc29b827fae87981fc58eff2393e#token-model
|
|
307
|
+
|
|
308
|
+
def get_scope(self) -> str:
|
|
309
|
+
return self._token.get("scope", "")
|
|
310
|
+
|
|
311
|
+
def check_client(self, client) -> bool:
|
|
312
|
+
return self.get_aud() == client.id
|
|
313
|
+
|
|
314
|
+
def get_expires_in(self) -> int:
|
|
315
|
+
return self.expires_in
|
|
316
|
+
|
|
317
|
+
def is_revoked(self) -> bool:
|
|
318
|
+
return False
|
|
319
|
+
|
|
320
|
+
def is_expired(self) -> bool:
|
|
321
|
+
return time.time() > self._token["exp"]
|
|
273
322
|
|
|
274
323
|
|
|
275
324
|
class AdminToken(rfc6749.TokenMixin):
|
|
276
|
-
def valid_scope(self, scope, **kwargs):
|
|
325
|
+
def valid_scope(self, scope: SCOPE_TYPE, **kwargs) -> bool:
|
|
277
326
|
return True
|
|
278
327
|
|
|
279
|
-
def check_scope(self, scope, **kwargs):
|
|
328
|
+
def check_scope(self, scope: SCOPE_TYPE, **kwargs):
|
|
280
329
|
pass
|
|
281
330
|
|
|
282
|
-
def get_sub(self): # User.
|
|
331
|
+
def get_sub(self) -> str: # User.
|
|
283
332
|
return "admin"
|
|
284
333
|
|
|
285
|
-
def get_aud(self): # Client.
|
|
334
|
+
def get_aud(self) -> str: # Client.
|
|
286
335
|
return "admin"
|
|
287
336
|
|
|
288
|
-
def get_jti(self):
|
|
337
|
+
def get_jti(self) -> str:
|
|
289
338
|
return "admin"
|
|
290
339
|
|
|
291
|
-
def get_client_id(self):
|
|
340
|
+
def get_client_id(self) -> str:
|
|
292
341
|
return self.get_aud()
|
|
293
342
|
|
|
294
343
|
|
|
344
|
+
@dataclasses.dataclass
|
|
345
|
+
class StarletteOAuth2Data:
|
|
346
|
+
method: str
|
|
347
|
+
uri: str
|
|
348
|
+
headers: Headers
|
|
349
|
+
query: QueryParams
|
|
350
|
+
form: FormData
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
class StarletteOAuth2Payload(OAuth2Payload):
|
|
354
|
+
# Implementation was taken from DjangoOAuth2Payload
|
|
355
|
+
|
|
356
|
+
def __init__(self, data: StarletteOAuth2Data):
|
|
357
|
+
self.query = data.query
|
|
358
|
+
self.form = data.form
|
|
359
|
+
|
|
360
|
+
@property
|
|
361
|
+
def data(self) -> dict:
|
|
362
|
+
data = {}
|
|
363
|
+
data.update(self.query)
|
|
364
|
+
data.update(self.form)
|
|
365
|
+
return data
|
|
366
|
+
|
|
367
|
+
@cached_property
|
|
368
|
+
def datalist(self) -> dict:
|
|
369
|
+
values = defaultdict(list)
|
|
370
|
+
for k in self.query:
|
|
371
|
+
values[k].extend(self.query.getlist(k))
|
|
372
|
+
for k in self.form:
|
|
373
|
+
values[k].extend(self.form.getlist(k))
|
|
374
|
+
return values
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
class StarletteOAuth2Request(OAuth2Request):
|
|
378
|
+
def __init__(self, data: StarletteOAuth2Data):
|
|
379
|
+
super().__init__(method=data.method, uri=data.uri, headers=data.headers)
|
|
380
|
+
self.payload = StarletteOAuth2Payload(data)
|
|
381
|
+
self._data = data
|
|
382
|
+
|
|
383
|
+
@property
|
|
384
|
+
def args(self) -> QueryParams:
|
|
385
|
+
return self._data.query
|
|
386
|
+
|
|
387
|
+
@property
|
|
388
|
+
def form(self) -> FormData:
|
|
389
|
+
return self._data.form
|
|
390
|
+
|
|
391
|
+
|
|
295
392
|
def authenticate_token(protector: ResourceProtector, token: str, type_: str) -> Token:
|
|
296
393
|
type_ = type_.lower()
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
return protector.TOKEN_VALIDATORS[type_].authenticate_token(token)
|
|
394
|
+
validator = protector.get_token_validator(type_)
|
|
395
|
+
return validator.authenticate_token(token)
|
|
301
396
|
|
|
302
397
|
|
|
303
398
|
def get_auth_token(context: Context) -> Token:
|
|
@@ -357,13 +452,8 @@ def get_token_from_http_basic_auth(context: Context, request: OAuth2Request):
|
|
|
357
452
|
return create_client_access_token(context, client)
|
|
358
453
|
|
|
359
454
|
|
|
360
|
-
def get_auth_request(
|
|
361
|
-
return
|
|
362
|
-
request["method"],
|
|
363
|
-
request["url"],
|
|
364
|
-
request["body"],
|
|
365
|
-
request["headers"],
|
|
366
|
-
)
|
|
455
|
+
def get_auth_request(data: StarletteOAuth2Data) -> StarletteOAuth2Request:
|
|
456
|
+
return StarletteOAuth2Request(data)
|
|
367
457
|
|
|
368
458
|
|
|
369
459
|
def create_key_pair():
|
|
@@ -397,8 +487,7 @@ def load_key(context: Context, key_type: KeyType, *, required: bool = True):
|
|
|
397
487
|
keys = [k for k in key["keys"] if k["alg"] == "RS512"]
|
|
398
488
|
key = keys[0]
|
|
399
489
|
|
|
400
|
-
|
|
401
|
-
return key
|
|
490
|
+
return JsonWebKey.import_key(key)
|
|
402
491
|
|
|
403
492
|
|
|
404
493
|
def create_client_access_token(context: Context, client: Union[str, Client]):
|
|
@@ -457,13 +546,14 @@ def check_scope(context: Context, scope: Union[Scopes, str]):
|
|
|
457
546
|
if isinstance(scope, Scopes):
|
|
458
547
|
scope = scope.value
|
|
459
548
|
|
|
460
|
-
token.check_scope(f"{config.scope_prefix}{scope}")
|
|
549
|
+
token.check_scope([f"{config.scope_prefix}{scope}", f"{config.scope_prefix_udts}:{scope}"])
|
|
461
550
|
|
|
462
551
|
|
|
463
552
|
def get_scope_name(
|
|
464
553
|
context: Context,
|
|
465
554
|
node: Union[Namespace, Model, Property],
|
|
466
555
|
action: Action,
|
|
556
|
+
is_udts: bool = False,
|
|
467
557
|
) -> str:
|
|
468
558
|
config = context.get("config")
|
|
469
559
|
|
|
@@ -472,18 +562,24 @@ def get_scope_name(
|
|
|
472
562
|
elif isinstance(node, Model):
|
|
473
563
|
name = node.model_type()
|
|
474
564
|
elif isinstance(node, Property):
|
|
475
|
-
name = node.model.model_type() + "_" + node.place
|
|
565
|
+
name = node.model.model_type() + "/@" + node.place if is_udts else node.model.model_type() + "_" + node.place
|
|
476
566
|
else:
|
|
477
567
|
raise Exception(f"Unknown node type {node}.")
|
|
478
568
|
|
|
569
|
+
if is_udts:
|
|
570
|
+
template = "{prefix}{name}/:{action}" if name else "{prefix}:{action}"
|
|
571
|
+
else:
|
|
572
|
+
template = "{prefix}{name}_{action}" if name else "{prefix}{action}"
|
|
573
|
+
|
|
479
574
|
return name_to_scope(
|
|
480
|
-
|
|
575
|
+
template,
|
|
481
576
|
name,
|
|
482
577
|
maxlen=config.scope_max_length,
|
|
483
578
|
params={
|
|
484
|
-
"prefix": config.scope_prefix,
|
|
485
|
-
"action": action.value,
|
|
579
|
+
"prefix": config.scope_prefix_udts if is_udts else config.scope_prefix,
|
|
580
|
+
"action": "create" if action.value == "insert" and is_udts else action.value,
|
|
486
581
|
},
|
|
582
|
+
is_udts=is_udts,
|
|
487
583
|
)
|
|
488
584
|
|
|
489
585
|
|
|
@@ -520,7 +616,6 @@ def authorized(
|
|
|
520
616
|
):
|
|
521
617
|
config: Config = context.get("config")
|
|
522
618
|
token = context.get("auth.token")
|
|
523
|
-
|
|
524
619
|
# Unauthorized clients can only access open nodes.
|
|
525
620
|
unauthorized = token.get_client_id() == get_default_auth_client_id(context)
|
|
526
621
|
open_node = node.access >= Access.open
|
|
@@ -559,13 +654,14 @@ def authorized(
|
|
|
559
654
|
scope_formatter = scope_formatter or config.scope_formatter
|
|
560
655
|
if not isinstance(action, (list, tuple)):
|
|
561
656
|
action = [action]
|
|
562
|
-
scopes = [
|
|
563
|
-
|
|
657
|
+
scopes = [
|
|
658
|
+
scope_formatter(context, scope, act, is_udts) for act in action for scope in scopes for is_udts in [False, True]
|
|
659
|
+
]
|
|
564
660
|
# Check if client has at least one of required scopes.
|
|
565
661
|
if throw:
|
|
566
|
-
token.check_scope(scopes
|
|
662
|
+
token.check_scope(scopes)
|
|
567
663
|
else:
|
|
568
|
-
return token.valid_scope(scopes
|
|
664
|
+
return token.valid_scope(scopes)
|
|
569
665
|
|
|
570
666
|
|
|
571
667
|
def auth_server_keys_exists(path: pathlib.Path):
|
|
@@ -598,11 +694,16 @@ def gen_auth_server_keys(
|
|
|
598
694
|
create = True
|
|
599
695
|
|
|
600
696
|
if create:
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
697
|
+
private_key = create_key_pair()
|
|
698
|
+
public_key = private_key.public_key()
|
|
699
|
+
|
|
700
|
+
with files[0].open("w") as f:
|
|
701
|
+
result = JsonWebKey.import_key(private_key, {"kty": "RSA"})
|
|
702
|
+
json.dump(result.as_dict(is_private=True), f, indent=4, ensure_ascii=False)
|
|
703
|
+
|
|
704
|
+
with files[1].open("w") as f:
|
|
705
|
+
result = JsonWebKey.import_key(public_key, {"kty": "RSA"})
|
|
706
|
+
json.dump(result.as_dict(), f, indent=4, ensure_ascii=False)
|
|
606
707
|
|
|
607
708
|
return files
|
|
608
709
|
|