spinta 0.2.dev1__tar.gz → 0.2.dev3__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.dev1 → spinta-0.2.dev3}/PKG-INFO +10 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/pyproject.toml +12 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/accesslog/__init__.py +34 -10
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/api/__init__.py +48 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/api/schema.py +9 -10
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/auth.py +149 -77
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/__init__.py +243 -37
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/components.py +16 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/constants.py +1 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/validate.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/write.py +3 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/helpers.py +59 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/encode.py +1 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/read.py +4 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/validate.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/components.py +3 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/helpers.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/array/write.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/file/write.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/object/write.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/ufuncs/components.py +4 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/ufuncs/ufuncs.py +10 -14
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/write.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/changes.py +16 -6
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/encode.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/init.py +7 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/migrate.py +46 -32
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/model.py +177 -99
- spinta-0.2.dev3/spinta/backends/postgresql/commands/migrate/property.py +78 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/types/datatype.py +146 -56
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/types/file.py +37 -20
- spinta-0.2.dev3/spinta/backends/postgresql/commands/migrate/types/geometry.py +28 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/types/ref.py +109 -63
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/types/string.py +34 -22
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/types/text.py +41 -23
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/read.py +6 -6
- spinta-0.2.dev3/spinta/backends/postgresql/commands/redirect.py +59 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/wipe.py +18 -7
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/write.py +171 -5
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/components.py +8 -3
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/exceptions.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/migrate/actions.py +32 -25
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/migrate/migrate.py +412 -118
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/name.py +2 -24
- spinta-0.2.dev3/spinta/backends/postgresql/helpers/redirect.py +37 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/validate.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array/init.py +1 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array/write.py +6 -7
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/file/write.py +3 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/geometry/encode.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/geometry/helpers.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/query/components.py +8 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/query/ufuncs.py +132 -50
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/config.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/data.py +10 -2
- spinta-0.2.dev3/spinta/cli/get.py +34 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/data.py +24 -19
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/backends/postgresql/commands.py +7 -7
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/backends/postgresql/helpers.py +3 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/commands.py +224 -2
- spinta-0.2.dev3/spinta/cli/helpers/export/helpers.py +159 -0
- spinta-0.2.dev3/spinta/cli/helpers/migrate.py +19 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/read.py +12 -57
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/sync.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/utils.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/store.py +1 -1
- spinta-0.2.dev3/spinta/cli/helpers/upgrade/components.py +51 -0
- spinta-0.2.dev3/spinta/cli/helpers/upgrade/core.py +143 -0
- spinta-0.2.dev3/spinta/cli/helpers/upgrade/helpers.py +29 -0
- {spinta-0.2.dev1/spinta/cli/helpers/upgrade → spinta-0.2.dev3/spinta/cli/helpers/upgrade/scripts}/clients.py +3 -3
- spinta-0.2.dev3/spinta/cli/helpers/upgrade/scripts/deduplicate.py +263 -0
- spinta-0.2.dev3/spinta/cli/helpers/upgrade/scripts/redirect.py +107 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/inspect.py +0 -11
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/keymap.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/main.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/manifest.py +0 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/migrate.py +9 -7
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/pii.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/push.py +1 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/server.py +13 -10
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/show.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/upgrade.py +17 -5
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/__init__.py +179 -13
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/read.py +89 -43
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/write.py +132 -144
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/compat.py +48 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/components.py +44 -58
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/config.py +47 -3
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/core/config.py +9 -3
- spinta-0.2.dev3/spinta/core/enums.py +194 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/core/ufuncs.py +23 -4
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/csv/components.py +11 -0
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/json/components.py +11 -0
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/memory/components.py +11 -0
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/soap/commands/read.py +49 -0
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/soap/components.py +16 -0
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/xml/components.py +11 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/dataframe/commands/read.py +89 -24
- spinta-0.2.dev3/spinta/datasets/backends/dataframe/components.py +14 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/dataframe/ufuncs/query/components.py +5 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/dataframe/ufuncs/query/ufuncs.py +56 -6
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/helpers.py +72 -6
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/helpers.py +9 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb/components.py +7 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb/helpers.py +10 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/components.py +8 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query/ufuncs.py +10 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql/components.py +7 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql/helpers.py +12 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/components.py +8 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql/ufuncs/query/ufuncs.py +10 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql/components.py +7 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql/helpers.py +10 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/components.py +8 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql/ufuncs/query/ufuncs.py +10 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle/components.py +7 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/components.py +9 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle/ufuncs/query/ufuncs.py +16 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql/components.py +7 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql/helpers.py +15 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/components.py +8 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query/ufuncs.py +57 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite/components.py +7 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite/helpers.py +10 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/components.py +8 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query/ufuncs.py +23 -0
- spinta-0.2.dev3/spinta/datasets/backends/sql/commands/cast.py +238 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/commands/column.py +10 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/commands/read.py +9 -11
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/components.py +3 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/ufuncs/components.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/ufuncs/query/components.py +64 -5
- spinta-0.2.dev3/spinta/datasets/backends/sql/ufuncs/query/helpers.py +78 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/ufuncs/query/ufuncs.py +286 -128
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/ufuncs/result/ufuncs.py +0 -13
- spinta-0.2.dev3/spinta/datasets/backends/wsdl/commads/read.py +26 -0
- spinta-0.2.dev3/spinta/datasets/backends/wsdl/components.py +26 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/commands/link.py +4 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/components.py +9 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/helpers.py +1 -1
- spinta-0.2.dev3/spinta/datasets/inspect/commands/manifest.py +57 -0
- spinta-0.2.dev1/spinta/datasets/inspect/helpers.py → spinta-0.2.dev3/spinta/datasets/inspect/commands/merge.py +6 -383
- spinta-0.2.dev3/spinta/datasets/inspect/components.py +35 -0
- spinta-0.2.dev3/spinta/datasets/inspect/helpers.py +355 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/keymaps/components.py +1 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/keymaps/sqlalchemy.py +1 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/keymaps/sync.py +36 -31
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/enum/commands.py +30 -7
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/enum/components.py +17 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/enum/helpers.py +6 -0
- spinta-0.2.dev3/spinta/dimensions/enum/ufuncs.py +27 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/exceptions.py +142 -29
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/ascii/commands.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/ascii/components.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/csv/commands.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/helpers.py +4 -3
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/html/commands.py +25 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/json/commands.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/jsonlines/commands.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/rdf/commands.py +31 -12
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/xlsx/commands.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/helpers.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/auth.py +2 -1
- spinta-0.2.dev3/spinta/manifests/commands/migrate.py +17 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/read.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/components.py +1 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/dict/components.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/dict/helpers.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/helpers.py +1 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/auth.py +2 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/read.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/helpers.py +41 -27
- spinta-0.2.dev3/spinta/manifests/open_api/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/open_api/commands/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/open_api/commands/configure.py +15 -0
- spinta-0.2.dev3/spinta/manifests/open_api/commands/load.py +48 -0
- spinta-0.2.dev3/spinta/manifests/open_api/components.py +10 -0
- spinta-0.2.dev3/spinta/manifests/open_api/helpers.py +112 -0
- spinta-0.2.dev3/spinta/manifests/sql/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/sql/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/sql/helpers.py +6 -4
- spinta-0.2.dev3/spinta/manifests/tabular/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/tabular/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/components.py +37 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/constants.py +7 -2
- spinta-0.2.dev3/spinta/manifests/tabular/formats/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/helpers.py +438 -242
- spinta-0.2.dev3/spinta/manifests/xsd/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/xsd/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/helpers.py +1 -1
- spinta-0.2.dev3/spinta/manifests/xsd2/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/xsd2/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd2/helpers.py +4 -3
- spinta-0.2.dev3/spinta/manifests/yaml/__init__.py +0 -0
- spinta-0.2.dev3/spinta/manifests/yaml/commands/__init__.py +0 -0
- spinta-0.2.dev3/spinta/methods.py +0 -0
- spinta-0.2.dev3/spinta/migrations/schema/__init__.py +0 -0
- spinta-0.2.dev3/spinta/naming/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/nodes.py +20 -9
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/renderer.py +2 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/spyna.py +6 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/client.py +20 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/datasets.py +0 -8
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/request.py +1 -1
- spinta-0.2.dev3/spinta/testing/types/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/utils.py +13 -0
- spinta-0.2.dev3/spinta/types/__init__.py +0 -0
- spinta-0.2.dev3/spinta/types/array/__init__.py +0 -0
- spinta-0.2.dev3/spinta/types/array/check.py +54 -0
- spinta-0.2.dev3/spinta/types/array/link.py +92 -0
- spinta-0.2.dev3/spinta/types/array/resolve.py +10 -0
- spinta-0.2.dev3/spinta/types/backref/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/datatype.py +27 -0
- spinta-0.2.dev3/spinta/types/denorm/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/denorm/check.py +1 -6
- spinta-0.2.dev3/spinta/types/file/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/file/helpers.py +2 -1
- spinta-0.2.dev3/spinta/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/helpers.py +1 -0
- spinta-0.2.dev3/spinta/types/inherit/__init__.py +0 -0
- spinta-0.2.dev3/spinta/types/inherit/check.py +16 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/model.py +51 -26
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/namespace.py +8 -4
- spinta-0.2.dev3/spinta/types/object/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/object/link.py +1 -1
- spinta-0.2.dev3/spinta/types/partial/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/partial/link.py +8 -2
- spinta-0.2.dev3/spinta/types/ref/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/ref/link.py +3 -1
- spinta-0.2.dev3/spinta/types/ref/resolve.py +10 -0
- spinta-0.2.dev3/spinta/types/text/__init__.py +0 -0
- spinta-0.2.dev3/spinta/ufuncs/__init__.py +0 -0
- spinta-0.2.dev3/spinta/ufuncs/changebase/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/common.py +11 -10
- spinta-0.2.dev3/spinta/ufuncs/linkbuilder/__init__.py +0 -0
- spinta-0.2.dev3/spinta/ufuncs/linkbuilder/components.py +13 -0
- spinta-0.2.dev3/spinta/ufuncs/linkbuilder/ufuncs.py +59 -0
- spinta-0.2.dev3/spinta/ufuncs/loadbuilder/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/loadbuilder/components.py +0 -2
- spinta-0.2.dev3/spinta/ufuncs/propertyresolver/__init__.py +0 -0
- spinta-0.2.dev3/spinta/ufuncs/propertyresolver/components.py +20 -0
- spinta-0.2.dev3/spinta/ufuncs/propertyresolver/ufuncs.py +329 -0
- spinta-0.2.dev3/spinta/ufuncs/querybuilder/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/basequerybuilder → spinta-0.2.dev3/spinta/ufuncs/querybuilder}/components.py +42 -15
- {spinta-0.2.dev1/spinta/ufuncs/basequerybuilder → spinta-0.2.dev3/spinta/ufuncs/querybuilder}/helpers.py +47 -6
- spinta-0.2.dev3/spinta/ufuncs/querybuilder/ufuncs.py +537 -0
- spinta-0.2.dev3/spinta/ufuncs/requestparamsbuilder/__init__.py +0 -0
- spinta-0.2.dev3/spinta/ufuncs/requestparamsbuilder/components.py +18 -0
- spinta-0.2.dev3/spinta/ufuncs/requestparamsbuilder/ufuncs.py +169 -0
- spinta-0.2.dev3/spinta/ufuncs/resultbuilder/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/resultbuilder/components.py +10 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/resultbuilder/helpers.py +17 -9
- spinta-0.2.dev3/spinta/ufuncs/resultbuilder/ufuncs.py +58 -0
- spinta-0.2.dev3/spinta/ufuncs/summaryenv/__init__.py +0 -0
- spinta-0.2.dev3/spinta/units/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/urlparams.py +7 -4
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/data.py +4 -3
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/enums.py +6 -3
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/nestedstruct.py +38 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/response.py +13 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/sqlite.py +8 -6
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/url.py +3 -0
- spinta-0.2.dev1/spinta/backends/postgresql/commands/migrate/property.py +0 -25
- spinta-0.2.dev1/spinta/backends/postgresql/commands/migrate/types/geometry.py +0 -20
- spinta-0.2.dev1/spinta/backends/postgresql/ufuncs/result/init.py +0 -12
- spinta-0.2.dev1/spinta/cli/helpers/export/helpers.py +0 -106
- spinta-0.2.dev1/spinta/cli/helpers/migrate.py +0 -117
- spinta-0.2.dev1/spinta/cli/helpers/upgrade/components.py +0 -32
- spinta-0.2.dev1/spinta/cli/helpers/upgrade/helpers.py +0 -12
- spinta-0.2.dev1/spinta/cli/helpers/upgrade/scripts.py +0 -66
- spinta-0.2.dev1/spinta/core/enums.py +0 -41
- spinta-0.2.dev1/spinta/datasets/backends/dataframe/components.py +0 -36
- spinta-0.2.dev1/spinta/datasets/backends/sql/helpers.py +0 -99
- spinta-0.2.dev1/spinta/datasets/backends/sql/ufuncs/result/init.py +0 -12
- spinta-0.2.dev1/spinta/dimensions/enum/ufuncs.py +0 -9
- spinta-0.2.dev1/spinta/manifests/commands/migrate.py +0 -31
- spinta-0.2.dev1/spinta/types/array/check.py +0 -9
- spinta-0.2.dev1/spinta/types/array/link.py +0 -26
- spinta-0.2.dev1/spinta/ufuncs/basequerybuilder/ufuncs.py +0 -494
- spinta-0.2.dev1/spinta/ufuncs/requestparamsbuilder/components.py +0 -14
- spinta-0.2.dev1/spinta/ufuncs/requestparamsbuilder/ufuncs.py +0 -77
- spinta-0.2.dev1/spinta/ufuncs/resultbuilder/init.py +0 -12
- spinta-0.2.dev1/spinta/ufuncs/resultbuilder/ufuncs.py +0 -7
- {spinta-0.2.dev1 → spinta-0.2.dev3}/LICENSE +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/README.rst +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/__main__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/accesslog/file.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/accesslog/python.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/api/inspect.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/asgi.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/changes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/decode.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/encode.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/migrate.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/read.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/commands/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/fs/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/auth.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/changes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/check.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/encode.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/read.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/commands/write.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/memory/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/changes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/load.py +1 -1
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/migrate.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/commands/write.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/array/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/file/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/types/object/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/mongo/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/changes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/read.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/commands/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/nobackend/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/column.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/link.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/load.py +2 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/constants.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/migrate/types/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/summary.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/validate.py +2 -2
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/constants.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/files.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/changes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/extractors.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/helpers/migrate/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/sqlalchemy.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array_backref/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/array_backref/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/backref/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/backref/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/denorm/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/external_ref/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/file/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/file/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/file/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/file/read.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/geometry/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/geometry/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/geometry/write.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/object/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/object/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/object/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/object/read.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/object/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/ref/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/ref/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/ref/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/ref/validate.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/text/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/types/text/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/query/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/result/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/result/ufuncs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/postgresql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/backends/types/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/auth.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/auth.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/errors.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/backends/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/backends/postgresql/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/backends/postgresql/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/export/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/delete.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/error.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/state.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/push/write.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/typer.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/helpers/upgrade/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/core → spinta-0.2.dev3/spinta/cli/helpers/upgrade/scripts}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/cli/pull.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/client.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/auth.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/search.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/commands/version.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/config.yml +0 -0
- {spinta-0.2.dev1/spinta/datasets → spinta-0.2.dev3/spinta/core}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/core/access.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/core/context.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends → spinta-0.2.dev3/spinta/datasets}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/dataframe → spinta-0.2.dev3/spinta/datasets/backends}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/dataframe/commands → spinta-0.2.dev3/spinta/datasets/backends/dataframe}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/dataframe/ufuncs → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/dataframe/ufuncs/query → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/csv}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/notimpl → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/json}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/notimpl/commands → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/memory}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sql → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/soap}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sql → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/soap}/commands/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sql/ufuncs → spinta-0.2.dev3/spinta/datasets/backends/dataframe/backends/xml}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sql/ufuncs/query → spinta-0.2.dev3/spinta/datasets/backends/dataframe/commands}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sql/ufuncs/result → spinta-0.2.dev3/spinta/datasets/backends/dataframe/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/dataframe/ufuncs/components.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sqldump → spinta-0.2.dev3/spinta/datasets/backends/dataframe/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/dataframe/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sqldump/commands → spinta-0.2.dev3/spinta/datasets/backends/notimpl}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/backends/sqldump/ufuncs → spinta-0.2.dev3/spinta/datasets/backends/notimpl/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/notimpl/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/notimpl/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/notimpl/components.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/commands → spinta-0.2.dev3/spinta/datasets/backends/sql}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/inspect → spinta-0.2.dev3/spinta/datasets/backends/sql/backends}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/datasets/keymaps → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions/comments → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mariadb/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions/enum → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions/lang → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions/param → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mssql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions/prefix → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/dimensions/prefix/commands → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/formats → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/mysql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/formats/ascii → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle}/__init__.py +0 -0
- /spinta-0.2.dev1/spinta/datasets/commands/inspect.py → /spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle/helpers.py +0 -0
- {spinta-0.2.dev1/spinta/formats/csv → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/formats/html → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/oracle/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/formats/json → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/formats/jsonlines → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/formats/xlsx → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/postgresql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/hacks → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/backend → spinta-0.2.dev3/spinta/datasets/backends/sql/backends/sqlite/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/backend → spinta-0.2.dev3/spinta/datasets/backends/sql}/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/commands/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/commands/wait.py +0 -0
- /spinta-0.2.dev1/spinta/manifests/commands/__init__.py → /spinta-0.2.dev3/spinta/datasets/backends/sql/helpers.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/dict → spinta-0.2.dev3/spinta/datasets/backends/sql/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/dict/commands → spinta-0.2.dev3/spinta/datasets/backends/sql/ufuncs/query}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/internal → spinta-0.2.dev3/spinta/datasets/backends/sql/ufuncs/result}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/ufuncs/result/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sql/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/internal/commands → spinta-0.2.dev3/spinta/datasets/backends/sqldump}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/internal_sql → spinta-0.2.dev3/spinta/datasets/backends/sqldump/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sqldump/commands/inspect.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sqldump/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sqldump/commands/wait.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sqldump/components.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/internal_sql/commands → spinta-0.2.dev3/spinta/datasets/backends/sqldump/ufuncs}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sqldump/ufuncs/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/backends/sqldump/ufuncs/ufuncs.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/memory → spinta-0.2.dev3/spinta/datasets/backends/wsdl}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/memory/commands → spinta-0.2.dev3/spinta/datasets/backends/wsdl/commads}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/mermaid → spinta-0.2.dev3/spinta/datasets/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/commands/check.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/commands/error.py +0 -0
- /spinta-0.2.dev1/spinta/manifests/sql/__init__.py → /spinta-0.2.dev3/spinta/datasets/commands/inspect.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/commands/wipe.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/enums.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/sql/commands → spinta-0.2.dev3/spinta/datasets/inspect}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/tabular → spinta-0.2.dev3/spinta/datasets/inspect/commands}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/tabular/commands → spinta-0.2.dev3/spinta/datasets/keymaps}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/datasets/utils.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/tabular/formats → spinta-0.2.dev3/spinta/dimensions}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/xsd → spinta-0.2.dev3/spinta/dimensions/comments}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/comments/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/comments/helpers.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/xsd/commands → spinta-0.2.dev3/spinta/dimensions/enum}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/xsd2 → spinta-0.2.dev3/spinta/dimensions/lang}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/lang/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/lang/helpers.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/xsd2/commands → spinta-0.2.dev3/spinta/dimensions/param}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/param/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/param/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/param/ufuncs.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/yaml → spinta-0.2.dev3/spinta/dimensions/prefix}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/manifests/yaml → spinta-0.2.dev3/spinta/dimensions/prefix}/commands/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/prefix/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/prefix/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dimensions/prefix/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/dispatcher.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/fetcher.py +0 -0
- {spinta-0.2.dev1/spinta/migrations/schema → spinta-0.2.dev3/spinta/formats}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/naming → spinta-0.2.dev3/spinta/formats/ascii}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/ascii/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/components.py +0 -0
- {spinta-0.2.dev1/spinta/testing/types → spinta-0.2.dev3/spinta/formats/csv}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/csv/components.py +0 -0
- {spinta-0.2.dev1/spinta/types → spinta-0.2.dev3/spinta/formats/html}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/html/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/html/helpers.py +0 -0
- {spinta-0.2.dev1/spinta/types/array → spinta-0.2.dev3/spinta/formats/json}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/json/components.py +0 -0
- {spinta-0.2.dev1/spinta/types/backref → spinta-0.2.dev3/spinta/formats/jsonlines}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/jsonlines/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/rdf/components.py +0 -0
- {spinta-0.2.dev1/spinta/types/file → spinta-0.2.dev3/spinta/formats/xlsx}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/formats/xlsx/components.py +0 -0
- {spinta-0.2.dev1/spinta/types/geometry → spinta-0.2.dev3/spinta/hacks}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/hacks/spyna.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/hacks/urlparams.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/logging_config.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifest/_ns.yml +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifest/_schema/version.yml +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifest/_schema.yml +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifest/_txn.yml +0 -0
- {spinta-0.2.dev1/spinta/types/object → spinta-0.2.dev3/spinta/manifests}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/types/partial → spinta-0.2.dev3/spinta/manifests/backend}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/types/ref → spinta-0.2.dev3/spinta/manifests/backend/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/migrate.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/commands/sync.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/backend/components.py +0 -0
- {spinta-0.2.dev1/spinta/types/text → spinta-0.2.dev3/spinta/manifests/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/check.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/error.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/init.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/inspect.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/link.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/commands/manifest.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs → spinta-0.2.dev3/spinta/manifests/dict}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/basequerybuilder → spinta-0.2.dev3/spinta/manifests/dict/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/dict/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/dict/commands/load.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/changebase → spinta-0.2.dev3/spinta/manifests/internal}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/loadbuilder → spinta-0.2.dev3/spinta/manifests/internal/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal/components.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/requestparamsbuilder → spinta-0.2.dev3/spinta/manifests/internal_sql}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/resultbuilder → spinta-0.2.dev3/spinta/manifests/internal_sql/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/backend.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/commands/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/internal_sql/components.py +0 -0
- {spinta-0.2.dev1/spinta/ufuncs/summaryenv → spinta-0.2.dev3/spinta/manifests/memory}/__init__.py +0 -0
- {spinta-0.2.dev1/spinta/units → spinta-0.2.dev3/spinta/manifests/memory/commands}/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/memory/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/memory/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/memory/components.py +0 -0
- /spinta-0.2.dev1/spinta/methods.py → /spinta-0.2.dev3/spinta/manifests/mermaid/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/mermaid/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/mermaid/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/rdf/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/rdf/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/rdf/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/rdf/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/rdf/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/sql/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/sql/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/sql/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/tabular/formats/gsheets.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/compare_xsd_to_dsa.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/download_xsd_rc.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd/tryout.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd2/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd2/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/xsd2/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/bootstrap.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/configure.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/freeze.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/migrate.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/commands/sync.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/manifests/yaml/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/middlewares.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/migrations/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/migrations/schema/alembic.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/naming/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/naming/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/naming/ufuncts.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/templates/base.html +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/templates/data.html +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/templates/error.html +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/templates/form.html +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/cli.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/config.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/context.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/csv.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/data.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/dtypes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/manifest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/push.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/pytest.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/tabular.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/types/geometry.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/testing/ufuncs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/backref/link.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/command.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/config.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/denorm/link.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/file/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/file/decode.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/geometry/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/geometry/constants.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/geometry/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/geometry/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/object/check.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/ref/check.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/store.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/text/check.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/text/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/text/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/types/text/load.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/typing.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/binds.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/changebase/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/changebase/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/changebase/ufuncs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/loadbuilder/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/loadbuilder/ufuncs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/requestparamsbuilder/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/summaryenv/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/ufuncs/summaryenv/ufuncs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/units/components.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/units/helpers.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/__init__.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/aiotools.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/changes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/config.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/encoding.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/errors.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/functools.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/idgen.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/imports.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/itertools.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/json.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/naming.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/nin.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/passwords.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/path.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/refs.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/schema.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/scopes.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/sqlalchemy.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/starlette.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/streams.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/tree.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/types.py +0 -0
- {spinta-0.2.dev1 → spinta-0.2.dev3}/spinta/utils/units.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: spinta
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.dev3
|
|
4
4
|
Summary: A platform for describing, extracting, transforming, loading and serving open data.
|
|
5
5
|
Home-page: https://github.com/atviriduomenys/spinta
|
|
6
6
|
License: MIT
|
|
@@ -20,22 +20,27 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
24
|
Classifier: Topic :: Database
|
|
24
25
|
Classifier: Topic :: Database :: Database Engines/Servers
|
|
25
26
|
Classifier: Topic :: Database :: Front-Ends
|
|
27
|
+
Provides-Extra: all
|
|
28
|
+
Provides-Extra: http
|
|
29
|
+
Provides-Extra: migrations
|
|
26
30
|
Requires-Dist: GeoAlchemy2
|
|
27
31
|
Requires-Dist: Shapely
|
|
28
32
|
Requires-Dist: XlsxWriter
|
|
29
33
|
Requires-Dist: aiofiles
|
|
30
34
|
Requires-Dist: aiohttp
|
|
31
|
-
Requires-Dist: alembic (>=1.11.0,<1.12.0)
|
|
35
|
+
Requires-Dist: alembic (>=1.11.0,<1.12.0) ; extra == "migrations" or extra == "all"
|
|
32
36
|
Requires-Dist: asyncpg
|
|
33
37
|
Requires-Dist: authlib (>=0.11,<0.12)
|
|
38
|
+
Requires-Dist: cachetools
|
|
34
39
|
Requires-Dist: click
|
|
35
40
|
Requires-Dist: dask[dataframe]
|
|
36
41
|
Requires-Dist: docutils (>=0.21.2,<0.22.0)
|
|
37
42
|
Requires-Dist: fsspec
|
|
38
|
-
Requires-Dist: gunicorn
|
|
43
|
+
Requires-Dist: gunicorn ; extra == "http" or extra == "all"
|
|
39
44
|
Requires-Dist: jinja2
|
|
40
45
|
Requires-Dist: jsonpatch
|
|
41
46
|
Requires-Dist: lark-parser
|
|
@@ -68,9 +73,10 @@ Requires-Dist: tqdm
|
|
|
68
73
|
Requires-Dist: typer[all]
|
|
69
74
|
Requires-Dist: ujson
|
|
70
75
|
Requires-Dist: unidecode
|
|
71
|
-
Requires-Dist: uvicorn
|
|
76
|
+
Requires-Dist: uvicorn ; extra == "http" or extra == "all"
|
|
72
77
|
Requires-Dist: xlrd
|
|
73
78
|
Requires-Dist: xmltodict
|
|
79
|
+
Requires-Dist: zeep (>=4.3.1,<5.0.0)
|
|
74
80
|
Project-URL: Bug Tracker, https://github.com/atviriduomenys/spinta/issues
|
|
75
81
|
Project-URL: Documentation, https://spinta.readthedocs.io/
|
|
76
82
|
Project-URL: Repository, https://github.com/atviriduomenys/spinta
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "spinta"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.dev3"
|
|
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"
|
|
@@ -67,11 +67,11 @@ click = "*"
|
|
|
67
67
|
typer = { version = "*", extras = ["all"] }
|
|
68
68
|
|
|
69
69
|
# API server dependencies
|
|
70
|
-
gunicorn = "*"
|
|
71
|
-
uvicorn = "*"
|
|
70
|
+
gunicorn = { version = "*", optional = true }
|
|
71
|
+
uvicorn = { version = "*", optional = true }
|
|
72
72
|
|
|
73
73
|
# PostgreSQL backend dependencies
|
|
74
|
-
alembic = "~1.11.0"
|
|
74
|
+
alembic = { version = "~1.11.0", optional = true }
|
|
75
75
|
asyncpg = "*"
|
|
76
76
|
psycopg2-binary = "*"
|
|
77
77
|
# FIXME: https://github.com/python-poetry/poetry/issues/4402
|
|
@@ -106,7 +106,14 @@ tabulate = "*"
|
|
|
106
106
|
pyproj = "*"
|
|
107
107
|
xmltodict = "*"
|
|
108
108
|
sqlean-py = "*"
|
|
109
|
+
cachetools = "*"
|
|
109
110
|
docutils = "^0.21.2"
|
|
111
|
+
zeep = "^4.3.1"
|
|
112
|
+
|
|
113
|
+
[tool.poetry.extras]
|
|
114
|
+
http = ["gunicorn", "uvicorn"]
|
|
115
|
+
migrations = ["alembic"]
|
|
116
|
+
all = ["gunicorn", "uvicorn", "alembic"]
|
|
110
117
|
|
|
111
118
|
|
|
112
119
|
[tool.poetry.group.dev.dependencies]
|
|
@@ -120,6 +127,7 @@ pytest-mock = "*"
|
|
|
120
127
|
responses = "*"
|
|
121
128
|
snoop = "*"
|
|
122
129
|
python-dotenv = "*"
|
|
130
|
+
docutils = "*"
|
|
123
131
|
|
|
124
132
|
# Starlette
|
|
125
133
|
httpx = "*"
|
|
@@ -25,13 +25,14 @@ class AccessLog:
|
|
|
25
25
|
reason: str = None
|
|
26
26
|
url: str = None
|
|
27
27
|
buffer_size: int = 100
|
|
28
|
-
format: str = None
|
|
29
|
-
content_type: str = None
|
|
30
|
-
agent: str = None
|
|
31
|
-
txn: str = None
|
|
32
|
-
start: float = None
|
|
33
|
-
memory: int = None
|
|
34
|
-
scopes: List[str] = None
|
|
28
|
+
format: str = None # response format
|
|
29
|
+
content_type: str = None # request content-type header
|
|
30
|
+
agent: str = None # request user-agent header
|
|
31
|
+
txn: str = None # request transaction id
|
|
32
|
+
start: float = None # request start time in seconds
|
|
33
|
+
memory: int = None # memory used in bytes at the start of request
|
|
34
|
+
scopes: List[str] = None # list of scopes
|
|
35
|
+
token: str = None # token used for request
|
|
35
36
|
|
|
36
37
|
def __enter__(self):
|
|
37
38
|
return self
|
|
@@ -75,7 +76,7 @@ class AccessLog:
|
|
|
75
76
|
'format': self.format,
|
|
76
77
|
'url': self.url,
|
|
77
78
|
'client': self.client,
|
|
78
|
-
'
|
|
79
|
+
'token': self.token,
|
|
79
80
|
'reason': reason or self.reason,
|
|
80
81
|
'agent': self.agent,
|
|
81
82
|
}
|
|
@@ -100,6 +101,27 @@ class AccessLog:
|
|
|
100
101
|
|
|
101
102
|
self.log(message)
|
|
102
103
|
|
|
104
|
+
def auth(
|
|
105
|
+
self,
|
|
106
|
+
*,
|
|
107
|
+
reason: str = None,
|
|
108
|
+
):
|
|
109
|
+
message = {
|
|
110
|
+
'time': datetime.datetime.now(datetime.timezone.utc).isoformat(),
|
|
111
|
+
'type': 'auth',
|
|
112
|
+
'client': self.client,
|
|
113
|
+
'token': self.token,
|
|
114
|
+
'scope': self.scopes,
|
|
115
|
+
'reason': reason or self.reason,
|
|
116
|
+
'method': self.method,
|
|
117
|
+
'rctype': self.content_type,
|
|
118
|
+
'format': self.format,
|
|
119
|
+
'url': self.url,
|
|
120
|
+
'agent': self.agent,
|
|
121
|
+
}
|
|
122
|
+
message = {k: v for k, v in message.items() if v is not None}
|
|
123
|
+
self.log(message)
|
|
124
|
+
|
|
103
125
|
def _get_time(self) -> float:
|
|
104
126
|
"Get current time in seconds"
|
|
105
127
|
return time.monotonic()
|
|
@@ -124,8 +146,10 @@ def load(context: Context, accesslog: AccessLog, token: Token): # noqa
|
|
|
124
146
|
|
|
125
147
|
client_id = token.get_client_id()
|
|
126
148
|
config = context.get('config')
|
|
127
|
-
if
|
|
128
|
-
|
|
149
|
+
if client_id != get_default_auth_client_id(context):
|
|
150
|
+
if config.scope_log:
|
|
151
|
+
accesslog.scopes = token.get_scope()
|
|
152
|
+
accesslog.token = token.get_jti()
|
|
129
153
|
|
|
130
154
|
|
|
131
155
|
@overload
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import uuid
|
|
2
3
|
from typing import Type
|
|
3
4
|
|
|
@@ -18,13 +19,14 @@ from starlette.middleware import Middleware
|
|
|
18
19
|
|
|
19
20
|
from spinta import components, commands
|
|
20
21
|
from spinta.auth import AuthorizationServer, check_scope, query_client, get_clients_list, \
|
|
21
|
-
client_exists, create_client_file, delete_client_file, update_client_file, get_clients_path, Scopes
|
|
22
|
+
client_exists, create_client_file, delete_client_file, update_client_file, get_clients_path, Scopes, Token, \
|
|
23
|
+
authenticate_token
|
|
22
24
|
from spinta.auth import ResourceProtector
|
|
23
25
|
from spinta.auth import BearerTokenValidator
|
|
24
26
|
from spinta.auth import get_auth_request
|
|
25
27
|
from spinta.auth import get_auth_token
|
|
26
28
|
from spinta.commands import prepare, get_version
|
|
27
|
-
from spinta.components import Context
|
|
29
|
+
from spinta.components import Context, UrlParams
|
|
28
30
|
from spinta.exceptions import BaseError, MultipleErrors, error_response, InsufficientPermission, \
|
|
29
31
|
UnknownPropertyInRequest, InsufficientPermissionForUpdate, EmptyPassword
|
|
30
32
|
from spinta.middlewares import ContextMiddleware
|
|
@@ -60,18 +62,60 @@ async def version(request: Request):
|
|
|
60
62
|
|
|
61
63
|
|
|
62
64
|
async def auth_token(request: Request):
|
|
63
|
-
|
|
65
|
+
context = request.state.context
|
|
66
|
+
auth_server = context.get('auth.server')
|
|
64
67
|
if auth_server.enabled():
|
|
65
|
-
|
|
68
|
+
resp: JSONResponse = auth_server.create_token_response({
|
|
66
69
|
'method': request.method,
|
|
67
70
|
'url': str(request.url.replace(query='')),
|
|
68
71
|
'body': dict(await request.form()),
|
|
69
72
|
'headers': request.headers,
|
|
70
73
|
})
|
|
74
|
+
|
|
75
|
+
payload = json.loads(resp.body.decode("utf-8"))
|
|
76
|
+
_auth_accesslog(
|
|
77
|
+
context,
|
|
78
|
+
request,
|
|
79
|
+
payload,
|
|
80
|
+
'json'
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
return resp
|
|
71
84
|
else:
|
|
72
85
|
raise NoAuthServer()
|
|
73
86
|
|
|
74
87
|
|
|
88
|
+
def _auth_accesslog(
|
|
89
|
+
context: Context,
|
|
90
|
+
request: Request,
|
|
91
|
+
payload: dict,
|
|
92
|
+
output_format: str
|
|
93
|
+
):
|
|
94
|
+
access_token = payload.get('access_token')
|
|
95
|
+
if not access_token:
|
|
96
|
+
return
|
|
97
|
+
|
|
98
|
+
token = payload['access_token']
|
|
99
|
+
type_ = payload['token_type']
|
|
100
|
+
|
|
101
|
+
resource_protector = context.get('auth.resource_protector')
|
|
102
|
+
token = authenticate_token(
|
|
103
|
+
resource_protector,
|
|
104
|
+
token=token,
|
|
105
|
+
type_=type_
|
|
106
|
+
)
|
|
107
|
+
params = UrlParams()
|
|
108
|
+
params.format = output_format
|
|
109
|
+
context.attach('accesslog', create_accesslog, context, loaders=(
|
|
110
|
+
context.get('store'),
|
|
111
|
+
request,
|
|
112
|
+
token,
|
|
113
|
+
params
|
|
114
|
+
))
|
|
115
|
+
accesslog = context.get('accesslog')
|
|
116
|
+
accesslog.auth()
|
|
117
|
+
|
|
118
|
+
|
|
75
119
|
def _auth_client_context(request: Request) -> Context:
|
|
76
120
|
context: Context = request.state.context
|
|
77
121
|
context.set('auth.request', get_auth_request({
|
|
@@ -2,13 +2,14 @@ import os
|
|
|
2
2
|
import tempfile
|
|
3
3
|
from uuid import UUID
|
|
4
4
|
|
|
5
|
+
from starlette.requests import Request
|
|
6
|
+
from starlette.responses import JSONResponse
|
|
7
|
+
|
|
5
8
|
from spinta import commands
|
|
6
9
|
from spinta.auth import check_scope, Scopes
|
|
10
|
+
from spinta.cli.helpers.migrate import MigrationConfig
|
|
7
11
|
from spinta.cli.helpers.store import prepare_manifest
|
|
8
|
-
from spinta.cli.helpers.migrate import MigrateRename, MigrateMeta
|
|
9
12
|
from spinta.components import Context, UrlParams, Store, Model, Config, Property
|
|
10
|
-
from starlette.requests import Request
|
|
11
|
-
|
|
12
13
|
from spinta.core.context import configure_context, create_context
|
|
13
14
|
from spinta.datasets.commands.check import check_dataset_name
|
|
14
15
|
from spinta.datasets.inspect.helpers import zipitems
|
|
@@ -19,7 +20,6 @@ from spinta.manifests.components import ManifestPath, Manifest
|
|
|
19
20
|
from spinta.manifests.tabular.helpers import datasets_to_tabular
|
|
20
21
|
from spinta.utils.schema import NA
|
|
21
22
|
from spinta.utils.types import is_str_uuid
|
|
22
|
-
from starlette.responses import JSONResponse
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def _clean_up_file(file_path: str):
|
|
@@ -184,16 +184,15 @@ async def schema_api(context: Context, request: Request, params: UrlParams):
|
|
|
184
184
|
validate_manifest(context, target_manifest, dataset_name)
|
|
185
185
|
|
|
186
186
|
rename_data = create_migrate_rename_mapping(context, target_context, manifest, target_manifest, dataset_name)
|
|
187
|
-
|
|
187
|
+
migration_config = MigrationConfig(
|
|
188
188
|
plan=False,
|
|
189
189
|
autocommit=False,
|
|
190
|
-
|
|
191
|
-
rename_src=rename_data
|
|
192
|
-
),
|
|
190
|
+
rename_src=rename_data,
|
|
193
191
|
datasets=[dataset_name],
|
|
194
|
-
migration_extension=(lambda: commands.update_manifest_dataset_schema(context, manifest, target_manifest))
|
|
192
|
+
migration_extension=(lambda: commands.update_manifest_dataset_schema(context, manifest, target_manifest)),
|
|
193
|
+
raise_error=True,
|
|
195
194
|
)
|
|
196
|
-
commands.migrate(context, target_manifest,
|
|
195
|
+
commands.migrate(context, target_manifest, migration_config)
|
|
197
196
|
backend = manifest.backend
|
|
198
197
|
commands.reload_backend_metadata(context, manifest, backend)
|
|
199
198
|
reset_affected_objects(context, manifest, dataset_name)
|
|
@@ -1,48 +1,47 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
from functools import lru_cache
|
|
5
|
-
|
|
6
|
-
from multipledispatch import dispatch
|
|
7
|
-
from typing import Set
|
|
8
|
-
from typing import Type
|
|
9
|
-
from typing import Union, List, Tuple
|
|
10
|
-
|
|
3
|
+
import base64
|
|
11
4
|
import datetime
|
|
12
5
|
import enum
|
|
13
6
|
import json
|
|
14
7
|
import logging
|
|
15
|
-
import
|
|
8
|
+
import os
|
|
16
9
|
import pathlib
|
|
17
|
-
import
|
|
10
|
+
import time
|
|
11
|
+
import uuid
|
|
12
|
+
from threading import Lock
|
|
13
|
+
from typing import Set
|
|
14
|
+
from typing import Type
|
|
15
|
+
from typing import Union, List, Tuple
|
|
18
16
|
|
|
19
17
|
import ruamel.yaml
|
|
20
|
-
|
|
21
|
-
from starlette.responses import JSONResponse
|
|
22
|
-
from starlette.exceptions import HTTPException
|
|
23
|
-
from cryptography.hazmat.backends import default_backend
|
|
24
|
-
from cryptography.hazmat.primitives.asymmetric import rsa
|
|
25
|
-
|
|
26
18
|
from authlib.jose import jwk
|
|
27
19
|
from authlib.jose import jwt
|
|
28
20
|
from authlib.jose.errors import JoseError
|
|
21
|
+
from authlib.oauth2 import OAuth2Error
|
|
29
22
|
from authlib.oauth2 import OAuth2Request
|
|
30
23
|
from authlib.oauth2 import rfc6749
|
|
31
24
|
from authlib.oauth2 import rfc6750
|
|
32
25
|
from authlib.oauth2.rfc6749 import grants
|
|
26
|
+
from authlib.oauth2.rfc6749.errors import InvalidClientError, UnsupportedTokenTypeError
|
|
33
27
|
from authlib.oauth2.rfc6750.errors import InsufficientScopeError
|
|
34
|
-
from
|
|
35
|
-
from
|
|
28
|
+
from cachetools import cached, LRUCache
|
|
29
|
+
from cachetools.keys import hashkey
|
|
30
|
+
from cryptography.hazmat.backends import default_backend
|
|
31
|
+
from cryptography.hazmat.primitives.asymmetric import rsa
|
|
32
|
+
from multipledispatch import dispatch
|
|
33
|
+
from starlette.exceptions import HTTPException
|
|
34
|
+
from starlette.responses import JSONResponse
|
|
36
35
|
|
|
37
36
|
from spinta.components import Config
|
|
37
|
+
from spinta.components import Context, Namespace, Model, Property
|
|
38
38
|
from spinta.components import ScopeFormatterFunc
|
|
39
|
-
from spinta.core.enums import Access
|
|
40
|
-
from spinta.
|
|
39
|
+
from spinta.core.enums import Access, Action
|
|
40
|
+
from spinta.exceptions import AuthorizedClientsOnly
|
|
41
|
+
from spinta.exceptions import BasicAuthRequired
|
|
41
42
|
from spinta.exceptions import InvalidToken, NoTokenValidationKey, ClientWithNameAlreadyExists, ClientAlreadyExists, \
|
|
42
43
|
ClientsKeymapNotFound, ClientsIdFolderNotFound, InvalidClientsKeymapStructure, InvalidScopes, \
|
|
43
44
|
InvalidClientFileFormat
|
|
44
|
-
from spinta.exceptions import AuthorizedClientsOnly
|
|
45
|
-
from spinta.exceptions import BasicAuthRequired
|
|
46
45
|
from spinta.utils import passwords
|
|
47
46
|
from spinta.utils.config import get_clients_path, get_keymap_path, get_id_path, get_helpers_path
|
|
48
47
|
from spinta.utils.scopes import name_to_scope
|
|
@@ -56,6 +55,16 @@ yml.indent(mapping=2, sequence=4, offset=2)
|
|
|
56
55
|
yml.width = 80
|
|
57
56
|
yml.explicit_start = False
|
|
58
57
|
|
|
58
|
+
# Cache limits
|
|
59
|
+
CLIENT_FILE_CACHE_SIZE_LIMIT = 1000
|
|
60
|
+
KEYMAP_CACHE_SIZE_LIMIT = 1
|
|
61
|
+
DEFAULT_CLIENT_ID_CACHE_SIZE_LIMIT = 1
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class KeyType(enum.Enum):
|
|
65
|
+
public = 'public'
|
|
66
|
+
private = 'private'
|
|
67
|
+
|
|
59
68
|
|
|
60
69
|
class Scopes(enum.Enum):
|
|
61
70
|
"""
|
|
@@ -189,7 +198,7 @@ class Client(rfc6749.ClientMixin):
|
|
|
189
198
|
if unknown_scopes:
|
|
190
199
|
log.warning(f"requested unknown scopes: %s", ', '.join(sorted(unknown_scopes)))
|
|
191
200
|
unknown_scopes = ', '.join(sorted(unknown_scopes))
|
|
192
|
-
raise InvalidScopes(scopes
|
|
201
|
+
raise InvalidScopes(scopes=unknown_scopes)
|
|
193
202
|
else:
|
|
194
203
|
return True
|
|
195
204
|
|
|
@@ -241,6 +250,9 @@ class Token(rfc6749.TokenMixin):
|
|
|
241
250
|
def get_aud(self): # Client.
|
|
242
251
|
return self._token.get('aud', '')
|
|
243
252
|
|
|
253
|
+
def get_jti(self):
|
|
254
|
+
return self._token.get('jti', '')
|
|
255
|
+
|
|
244
256
|
def get_client_id(self):
|
|
245
257
|
return self.get_aud()
|
|
246
258
|
|
|
@@ -259,10 +271,21 @@ class AdminToken(rfc6749.TokenMixin):
|
|
|
259
271
|
def get_aud(self): # Client.
|
|
260
272
|
return 'admin'
|
|
261
273
|
|
|
274
|
+
def get_jti(self):
|
|
275
|
+
return 'admin'
|
|
276
|
+
|
|
262
277
|
def get_client_id(self):
|
|
263
278
|
return self.get_aud()
|
|
264
279
|
|
|
265
280
|
|
|
281
|
+
def authenticate_token(protector: ResourceProtector, token: str, type_: str) -> Token:
|
|
282
|
+
type_ = type_.lower()
|
|
283
|
+
if type_ not in protector.TOKEN_VALIDATORS:
|
|
284
|
+
raise UnsupportedTokenTypeError()
|
|
285
|
+
|
|
286
|
+
return protector.TOKEN_VALIDATORS[type_].authenticate_token(token)
|
|
287
|
+
|
|
288
|
+
|
|
266
289
|
def get_auth_token(context: Context) -> Token:
|
|
267
290
|
scope = None # Scopes will be validated later using Token.check_scope
|
|
268
291
|
request: OAuth2Request = context.get('auth.request')
|
|
@@ -333,11 +356,6 @@ def create_key_pair():
|
|
|
333
356
|
return rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend())
|
|
334
357
|
|
|
335
358
|
|
|
336
|
-
class KeyType(enum.Enum):
|
|
337
|
-
public = 'public'
|
|
338
|
-
private = 'private'
|
|
339
|
-
|
|
340
|
-
|
|
341
359
|
def load_key(context: Context, key_type: KeyType, *, required: bool = True):
|
|
342
360
|
key = None
|
|
343
361
|
config = context.get('config')
|
|
@@ -397,6 +415,7 @@ def create_access_token(
|
|
|
397
415
|
iat = int(time.time())
|
|
398
416
|
exp = iat + expires_in
|
|
399
417
|
scopes = ' '.join(sorted(scopes)) if scopes else ''
|
|
418
|
+
jti = str(uuid.uuid4())
|
|
400
419
|
payload = {
|
|
401
420
|
'iss': config.server_url,
|
|
402
421
|
'sub': client,
|
|
@@ -404,39 +423,11 @@ def create_access_token(
|
|
|
404
423
|
'iat': iat,
|
|
405
424
|
'exp': exp,
|
|
406
425
|
'scope': scopes,
|
|
426
|
+
'jti': jti
|
|
407
427
|
}
|
|
408
428
|
return jwt.encode(header, payload, private_key).decode('ascii')
|
|
409
429
|
|
|
410
430
|
|
|
411
|
-
def query_client(path: pathlib.Path, client: str, is_name: bool = False) -> Client:
|
|
412
|
-
if is_name:
|
|
413
|
-
keymap_path = get_keymap_path(path)
|
|
414
|
-
validate_keymap_path(keymap_path)
|
|
415
|
-
|
|
416
|
-
data = _load_keymap_data(keymap_path)
|
|
417
|
-
if not client_name_exists(data, client):
|
|
418
|
-
raise (InvalidClientError(description='Invalid client name'))
|
|
419
|
-
client = data[client]
|
|
420
|
-
client_file = get_client_file_path(path, client)
|
|
421
|
-
|
|
422
|
-
id_path = get_id_path(path)
|
|
423
|
-
validate_id_path(id_path)
|
|
424
|
-
|
|
425
|
-
try:
|
|
426
|
-
data = yaml.load(client_file)
|
|
427
|
-
except FileNotFoundError:
|
|
428
|
-
raise (InvalidClientError(description='Invalid client id or secret'))
|
|
429
|
-
if not isinstance(data, dict):
|
|
430
|
-
raise InvalidClientFileFormat(client_file=client_file.name, client_file_type=type(data))
|
|
431
|
-
if not isinstance(data['scopes'], list):
|
|
432
|
-
raise Exception(f'Client {client_file} scopes must be list of scopes.')
|
|
433
|
-
client_id = data["client_id"]
|
|
434
|
-
client_name = data["client_name"] if ("client_name" in data.keys() and data["client_name"]) else None
|
|
435
|
-
client = Client(id_=client_id, name_=client_name, secret_hash=data['client_secret_hash'],
|
|
436
|
-
scopes=data['scopes'])
|
|
437
|
-
return client
|
|
438
|
-
|
|
439
|
-
|
|
440
431
|
def get_client_file_path(
|
|
441
432
|
path: pathlib.Path,
|
|
442
433
|
client: str
|
|
@@ -623,18 +614,6 @@ def client_exists(path: pathlib.Path, client: str) -> bool:
|
|
|
623
614
|
return False
|
|
624
615
|
|
|
625
616
|
|
|
626
|
-
def _load_keymap_data(keymap_path: pathlib.Path) -> dict:
|
|
627
|
-
keymap = yaml.load(keymap_path)
|
|
628
|
-
# This could mean keymap is empty, or keymap has bad yml structure
|
|
629
|
-
if keymap is None:
|
|
630
|
-
if os.stat(keymap_path).st_size == 0:
|
|
631
|
-
return {}
|
|
632
|
-
raise InvalidClientsKeymapStructure()
|
|
633
|
-
if not isinstance(keymap, dict):
|
|
634
|
-
raise InvalidClientsKeymapStructure()
|
|
635
|
-
return keymap
|
|
636
|
-
|
|
637
|
-
|
|
638
617
|
@dispatch(pathlib.Path, str)
|
|
639
618
|
def client_name_exists(path: pathlib.Path, client_name: str) -> bool:
|
|
640
619
|
keymap_path = get_keymap_path(path)
|
|
@@ -747,7 +726,7 @@ def update_client_file(
|
|
|
747
726
|
new_scopes = scopes if scopes is not None else client.scopes
|
|
748
727
|
|
|
749
728
|
client_path = get_client_file_path(path, client_id)
|
|
750
|
-
keymap =
|
|
729
|
+
keymap = _load_keymap_data(keymap_path)
|
|
751
730
|
if new_name != client.name:
|
|
752
731
|
if client_name_exists(keymap, new_name):
|
|
753
732
|
raise ClientWithNameAlreadyExists(client_name=new_name)
|
|
@@ -798,13 +777,6 @@ def validate_id_path(id_path: pathlib.Path):
|
|
|
798
777
|
raise ClientsIdFolderNotFound()
|
|
799
778
|
|
|
800
779
|
|
|
801
|
-
# Get default auth client id using cache
|
|
802
|
-
@lru_cache
|
|
803
|
-
def get_default_auth_client_id(context: Context) -> str:
|
|
804
|
-
config: Config = context.get('config')
|
|
805
|
-
return get_client_id_from_name(get_clients_path(config.config_path), config.default_auth_client)
|
|
806
|
-
|
|
807
|
-
|
|
808
780
|
def ensure_client_folders_exist(clients_path: pathlib.Path):
|
|
809
781
|
# Ensure clients folder exist
|
|
810
782
|
clients_path.mkdir(parents=True, exist_ok=True)
|
|
@@ -820,3 +792,103 @@ def ensure_client_folders_exist(clients_path: pathlib.Path):
|
|
|
820
792
|
# Ensure clients/id directory
|
|
821
793
|
id_path = get_id_path(clients_path)
|
|
822
794
|
id_path.mkdir(parents=True, exist_ok=True)
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
def _keymap_file_cache_key(path: pathlib.Path, *args, **kwargs):
|
|
798
|
+
"""
|
|
799
|
+
Creates keymap file cache key using
|
|
800
|
+
keymap path and keymap file update time.
|
|
801
|
+
"""
|
|
802
|
+
key = hashkey(path, *args, **kwargs)
|
|
803
|
+
time_ = os.path.getmtime(path)
|
|
804
|
+
key += tuple([time_])
|
|
805
|
+
return key
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
def _default_client_id_cache_key(context: Context, *args, **kwargs):
|
|
809
|
+
"""
|
|
810
|
+
Creates default client id cache key using
|
|
811
|
+
client folder path, default client name and keymap update time.
|
|
812
|
+
"""
|
|
813
|
+
key = hashkey(*args, **kwargs)
|
|
814
|
+
config: Config = context.get('config')
|
|
815
|
+
path = get_clients_path(config.config_path)
|
|
816
|
+
client = config.default_auth_client
|
|
817
|
+
keymap_path = get_keymap_path(path)
|
|
818
|
+
validate_keymap_path(keymap_path)
|
|
819
|
+
time_ = os.path.getmtime(keymap_path)
|
|
820
|
+
key += tuple([path, client, time_])
|
|
821
|
+
return key
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
def _client_file_cache_key(path: pathlib.Path, client: str, *args, is_name: bool = False, **kwargs):
|
|
825
|
+
"""
|
|
826
|
+
Creates client file cache key using
|
|
827
|
+
client folder path, client id and client file update time.
|
|
828
|
+
"""
|
|
829
|
+
id_path = get_id_path(path)
|
|
830
|
+
validate_id_path(id_path)
|
|
831
|
+
|
|
832
|
+
key = hashkey(path, client, *args, **kwargs)
|
|
833
|
+
if is_name:
|
|
834
|
+
client_id = get_client_id_from_name(path, client)
|
|
835
|
+
if client_id is None:
|
|
836
|
+
raise (InvalidClientError(description='Invalid client name'))
|
|
837
|
+
|
|
838
|
+
client = client_id
|
|
839
|
+
|
|
840
|
+
client_file = get_client_file_path(path, client)
|
|
841
|
+
if not client_file.exists():
|
|
842
|
+
raise (InvalidClientError(description='Invalid client id or secret'))
|
|
843
|
+
|
|
844
|
+
time_ = os.path.getmtime(client_file)
|
|
845
|
+
key += tuple([time_])
|
|
846
|
+
return key
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
@cached(LRUCache(KEYMAP_CACHE_SIZE_LIMIT), key=_keymap_file_cache_key)
|
|
850
|
+
def _load_keymap_data(keymap_path: pathlib.Path) -> dict:
|
|
851
|
+
keymap = yaml.load(keymap_path)
|
|
852
|
+
# This could mean keymap is empty, or keymap has bad yml structure
|
|
853
|
+
if keymap is None:
|
|
854
|
+
if os.stat(keymap_path).st_size == 0:
|
|
855
|
+
return {}
|
|
856
|
+
raise InvalidClientsKeymapStructure()
|
|
857
|
+
if not isinstance(keymap, dict):
|
|
858
|
+
raise InvalidClientsKeymapStructure()
|
|
859
|
+
return keymap
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
@cached(LRUCache(DEFAULT_CLIENT_ID_CACHE_SIZE_LIMIT), key=_default_client_id_cache_key)
|
|
863
|
+
def get_default_auth_client_id(context: Context) -> str:
|
|
864
|
+
config: Config = context.get('config')
|
|
865
|
+
return get_client_id_from_name(get_clients_path(config.config_path), config.default_auth_client)
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
@cached(LRUCache(CLIENT_FILE_CACHE_SIZE_LIMIT), key=_client_file_cache_key, lock=Lock())
|
|
869
|
+
def query_client(path: pathlib.Path, client: str, is_name: bool = False) -> Client:
|
|
870
|
+
if is_name:
|
|
871
|
+
client_id = get_client_id_from_name(path, client)
|
|
872
|
+
if client_id is None:
|
|
873
|
+
raise (InvalidClientError(description='Invalid client name'))
|
|
874
|
+
|
|
875
|
+
client = client_id
|
|
876
|
+
client_file = get_client_file_path(path, client)
|
|
877
|
+
|
|
878
|
+
id_path = get_id_path(path)
|
|
879
|
+
validate_id_path(id_path)
|
|
880
|
+
|
|
881
|
+
try:
|
|
882
|
+
data = yaml.load(client_file)
|
|
883
|
+
except FileNotFoundError:
|
|
884
|
+
raise (InvalidClientError(description='Invalid client id or secret'))
|
|
885
|
+
if not isinstance(data, dict):
|
|
886
|
+
raise InvalidClientFileFormat(client_file=client_file.name, client_file_type=type(data))
|
|
887
|
+
if not isinstance(data['scopes'], list):
|
|
888
|
+
raise Exception(f'Client {client_file} scopes must be list of scopes.')
|
|
889
|
+
client_id = data["client_id"]
|
|
890
|
+
client_name = data["client_name"] if ("client_name" in data.keys() and data["client_name"]) else None
|
|
891
|
+
client = Client(id_=client_id, name_=client_name, secret_hash=data['client_secret_hash'],
|
|
892
|
+
scopes=data['scopes'])
|
|
893
|
+
return client
|
|
894
|
+
|