tai-sql 0.7.12__tar.gz → 0.7.14__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.
- {tai_sql-0.7.12 → tai_sql-0.7.14}/PKG-INFO +1 -1
- {tai_sql-0.7.12 → tai_sql-0.7.14}/pyproject.toml +1 -1
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/schemas/chatbot.py +13 -8
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/context.py +6 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/dtos.py.jinja2 +12 -2
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/model.py.jinja2 +8 -1
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/static/modelo.md +3 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/LICENSE +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_backup/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_backup/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_deploy/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_deploy/config.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_deploy/local.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_deploy/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_deploy/workflow.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_feed/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_feed/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_generate/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_generate/funcs.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_generate/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_hash_migrate/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_hash_migrate/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_info/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_info/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_info/status.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_init/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_init/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_init/model.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_install/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_install/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_ping/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_ping/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_pull/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_pull/funcs.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_pull/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_restore/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_restore/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_rules/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_rules/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/model.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/new.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/schemas/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/schemas/auth.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/schemas/base.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/schemas/default.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/cmd_schema/set_default.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/prompts.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/connectivity.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/create.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/github/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/github/auth.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/github/client.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/commands/utils/github/models.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/errors.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/main.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/preamble.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/services/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/cli/services/backup.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/connection/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/connection/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/connection/provider.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/connection/recipe.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/connection/session.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/connection/sources.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/crypto.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/base.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/bigquery.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/capabilities.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/mysql.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/postgresql.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/drivers/sqlserver.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/errors/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/errors/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/errors/collector.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/errors/render.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/errors/types.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/collect.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/executor.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/feeder.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/plan.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/presenter.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/records.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/feed/transform.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/base.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/assets/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/assets/cytoscape.min.js +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/builder.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/generator.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/graphviz_render.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/html_render.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/layout.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/model.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/templates/er.html.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/diagram/themes.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/calculated.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/base.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/__init__.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/dao.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/facade.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/aggregation.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/dataframe.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/filters.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/hierarchy.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/read.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/triggers.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/upsert.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/vector.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/write.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/session.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/__init__.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/aggregation.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/context.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/utils/__init__.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/utils/encoders.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/utils/funcs.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/utils/hierarchy.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/utils/rls.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/vector.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/triggers/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/triggers/analyzer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/triggers/renderer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/triggers/steps.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/triggers/transformer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/rules/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/rules/templates/schema.md.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/blueprint.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/build.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/defaults.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/naming.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/reader.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/templates/schema.py.jinja2 +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/types.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/introspect/writer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/calculated.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/collector.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/column_analyzer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/constraints.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/hints.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/relation_analyzer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/analysis/schema_analyzer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/annotations.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/base.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/calculated.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/columns.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/constraints.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/datasource.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/descriptors.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/encoders.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/enumerations.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/relations.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/table.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/trigger_api.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/triggers.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/declarative/view.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/mapping/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/mapping/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/mapping/sqlalchemy_mapper.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/column.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/constraints.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/entity.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/enumeration.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/relation.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/schema.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/model/trigger.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/naming.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/ordering.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/registry.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/orm/types.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/project/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/project/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/project/config.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/project/context.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/project/manager.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/project/paths.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/catalog.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/installer.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/meta.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/service.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/staleness.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/static/comandos.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/rules/static/errores.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/schema.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/README.md +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/diff/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/diff/constraints.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/diff/indexes.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/diff/tables.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/diff/views.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/executor.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/ownership.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/plan/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/plan/planner.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/plan/statements.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/presenter.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/report.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/safety.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/state/__init__.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/state/local.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/state/model.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/state/normalize.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/state/remote.py +0 -0
- {tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/sync/synchronizer.py +0 -0
|
@@ -59,9 +59,12 @@ class ChatbotSchema(SchemaTemplate):
|
|
|
59
59
|
title: col[str] = column(description='Título de la conversación')
|
|
60
60
|
username: col[str] = column(description='ID del usuario propietario del chat')
|
|
61
61
|
is_active: col[bool] = column(default=True, description='Estado activo del chat')
|
|
62
|
+
|
|
63
|
+
visible: col[bool] = column(default=True, index=True, description='Si no, la conversación no se lista')
|
|
62
64
|
last_message_timestamp: col[datetime | None] = column(description='Timestamp del último mensaje del chat')
|
|
63
65
|
|
|
64
66
|
messages: onetomany[Mensaje] # Relación one-to-many con la tabla Mensaje
|
|
67
|
+
token_usage: onetomany[TokenUsage] # El consumo de la conversación, tenga mensaje o no
|
|
65
68
|
|
|
66
69
|
|
|
67
70
|
class Feedback(Enum):
|
|
@@ -118,11 +121,13 @@ class ChatbotSchema(SchemaTemplate):
|
|
|
118
121
|
|
|
119
122
|
username: col[str] = column(index=True, description='Usuario que consumió')
|
|
120
123
|
message_id: col[bigint | None] = column(description='Mensaje que lo generó; vacío si se borró la conversación')
|
|
124
|
+
chat_id: col[bigint | None] = column(index=True, description='Conversación en la que se consumió; vacío si no es de ninguna')
|
|
121
125
|
|
|
122
126
|
tarifa_id: col[bigint | None] = column(index=True, description='Tarifa con la que se valora')
|
|
123
127
|
bolsa_id: col[bigint | None] = column(index=True, description='Bolsa a la que se carga; vacío si no hay bolsas')
|
|
124
128
|
|
|
125
129
|
message: manytoone[Mensaje] = relation(fields=['message_id'], references=['id'], backref='token_usage', onDelete='set null')
|
|
130
|
+
chat: manytoone[Chat] = relation(fields=['chat_id'], references=['id'], backref='token_usage', onDelete='set null')
|
|
126
131
|
|
|
127
132
|
|
|
128
133
|
class ToolCall(Table):
|
|
@@ -351,10 +356,10 @@ class ChatbotSchema(SchemaTemplate):
|
|
|
351
356
|
con_tarifa: col[bool]
|
|
352
357
|
|
|
353
358
|
|
|
354
|
-
class
|
|
355
|
-
"""Vista que muestra los usuarios a los que se
|
|
356
|
-
__tablename__ = "
|
|
357
|
-
__query__ = query('
|
|
359
|
+
class UsuarioConsumo(View):
|
|
360
|
+
"""Vista que muestra los usuarios a los que se mide el consumo"""
|
|
361
|
+
__tablename__ = "usuario_consumo"
|
|
362
|
+
__query__ = query('usuario_consumo.sql')
|
|
358
363
|
|
|
359
364
|
username: col[str]
|
|
360
365
|
realm_name: col[str]
|
|
@@ -434,7 +439,7 @@ class ChatbotSchema(SchemaTemplate):
|
|
|
434
439
|
SUM(ROUND(((tu.prompt_tokens * t.precio_input_eur_millon
|
|
435
440
|
+ tu.completion_tokens * t.precio_output_eur_millon)
|
|
436
441
|
* t.margen / 1000000)::numeric, 8))::double precision as total_cost_eur,
|
|
437
|
-
COUNT(DISTINCT me.chat_id) as chat_count,
|
|
442
|
+
COUNT(DISTINCT COALESCE(tu.chat_id, me.chat_id)) as chat_count,
|
|
438
443
|
COUNT(*) as message_count
|
|
439
444
|
FROM token_usage tu
|
|
440
445
|
JOIN tarifa t ON t.id = tu.tarifa_id
|
|
@@ -609,8 +614,8 @@ class ChatbotSchema(SchemaTemplate):
|
|
|
609
614
|
tm.active_days;
|
|
610
615
|
''').rstrip()
|
|
611
616
|
|
|
612
|
-
|
|
613
|
-
-- Vista con los usuarios a los que se
|
|
617
|
+
usuario_consumo_sql = dedent('''\
|
|
618
|
+
-- Vista con los usuarios a los que se mide el consumo. Es la que leen sus pantallas:
|
|
614
619
|
-- /rbac/{realm}/user pide administración del realm y la contraseña no sale de aquí
|
|
615
620
|
SELECT
|
|
616
621
|
u.username,
|
|
@@ -634,4 +639,4 @@ class ChatbotSchema(SchemaTemplate):
|
|
|
634
639
|
(views_dir / 'tarifa_vigente.sql').write_text(tarifa_vigente_sql, encoding='utf-8')
|
|
635
640
|
(views_dir / 'tokens_mensaje.sql').write_text(tokens_mensaje_sql, encoding='utf-8')
|
|
636
641
|
(views_dir / 'user_stats.sql').write_text(user_stats_sql, encoding='utf-8')
|
|
637
|
-
(views_dir / '
|
|
642
|
+
(views_dir / 'usuario_consumo.sql').write_text(usuario_consumo_sql, encoding='utf-8')
|
|
@@ -225,6 +225,12 @@ class TemplateContextBuilder:
|
|
|
225
225
|
'is_operative': column.is_operative,
|
|
226
226
|
'is_calculated': column.is_calculated,
|
|
227
227
|
'self_reference': column.self_reference,
|
|
228
|
+
# La rellena la base de datos (NOW()): no es obligatoria al crear. Faltaba, y las
|
|
229
|
+
# plantillas que la miraban la leían siempre como falsa.
|
|
230
|
+
'server_now': column.server_now,
|
|
231
|
+
# El tamaño máximo de un texto (`column(length=n)`), para quien valide antes de
|
|
232
|
+
# escribir —los esquemas de formulario de tai-api—. `None` si no se declaró.
|
|
233
|
+
'max_length': column.length if column.type == 'str' else None,
|
|
228
234
|
}
|
|
229
235
|
|
|
230
236
|
if column.is_vector:
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/dtos.py.jinja2
RENAMED
|
@@ -247,7 +247,7 @@ class {{ model.name }}Read(PrettyModel):
|
|
|
247
247
|
class {{ model.name }}Create(PrettyModel):
|
|
248
248
|
"""DTO de escritura para {{ model.name }}."""
|
|
249
249
|
{% for column in model.columns -%}
|
|
250
|
-
{% if not column.constraints.get('autoincrement', False) and column.default is none and not column.nullable and not column.is_foreign_key and not column.is_operative and not column.has_encoder|default(false) and not column.is_calculated %}
|
|
250
|
+
{% if not column.constraints.get('autoincrement', False) and column.default is none and not column.nullable and not column.is_foreign_key and not column.is_operative and not column.has_encoder|default(false) and not column.is_calculated and not column.server_now %}
|
|
251
251
|
{{ column.name }}: {{ column.pydantic_type }}
|
|
252
252
|
{% endif %}
|
|
253
253
|
{% endfor %}
|
|
@@ -257,6 +257,9 @@ class {{ model.name }}Create(PrettyModel):
|
|
|
257
257
|
{{ column.name }}: Optional[{{ column.pydantic_type }}] = None
|
|
258
258
|
{% elif column.is_foreign_key %}
|
|
259
259
|
{{ column.name }}: Optional[{{ column.pydantic_type }}] = None
|
|
260
|
+
{% elif column.server_now %}
|
|
261
|
+
{# La rellena la base de datos con NOW() si no llega: no es obligatoria. #}
|
|
262
|
+
{{ column.name }}: Optional[{{ column.pydantic_type }}] = None
|
|
260
263
|
{% elif column.default is none and column.nullable %}
|
|
261
264
|
{{ column.name }}: Optional[{{ column.pydantic_type }}] = None
|
|
262
265
|
{% elif column.default is not none %}
|
|
@@ -295,11 +298,18 @@ class {{ model.name }}Create(PrettyModel):
|
|
|
295
298
|
def to_instance(self) -> {{ model.name }}:
|
|
296
299
|
model = {{ model.name }}(
|
|
297
300
|
{% for column in model.columns %}
|
|
298
|
-
{% if not column.constraints.get('autoincrement', False) and not column.is_operative and not column.is_calculated %}
|
|
301
|
+
{% if not column.constraints.get('autoincrement', False) and not column.is_operative and not column.is_calculated and not column.server_now %}
|
|
299
302
|
{{ column.name }}=self.{{ column.name }},
|
|
300
303
|
{% endif %}
|
|
301
304
|
{% endfor %}
|
|
302
305
|
)
|
|
306
|
+
{% for column in model.columns %}
|
|
307
|
+
{% if column.server_now and not column.is_operative and not column.is_calculated %}
|
|
308
|
+
# Solo si llega: asignarle None mandaría un NULL, y no dejaría a la base de datos poner NOW().
|
|
309
|
+
if self.{{ column.name }} is not None:
|
|
310
|
+
model.{{ column.name }} = self.{{ column.name }}
|
|
311
|
+
{% endif %}
|
|
312
|
+
{% endfor %}
|
|
303
313
|
{% for col in operative_str_cols %}
|
|
304
314
|
model.{{ col.name }} = get_username()
|
|
305
315
|
{% endfor %}
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/model.py.jinja2
RENAMED
|
@@ -83,6 +83,9 @@ from pgvector.sqlalchemy import Vector
|
|
|
83
83
|
{% if column.sa_type and column.sa_type not in sa_imports %}
|
|
84
84
|
{% set _ = sa_imports.append(column.sa_type) %}
|
|
85
85
|
{% endif %}
|
|
86
|
+
{% if column.server_now and 'func' not in sa_imports %}
|
|
87
|
+
{% set _ = sa_imports.append('func') %}
|
|
88
|
+
{% endif %}
|
|
86
89
|
{% endfor %}
|
|
87
90
|
{% if sa_imports %}
|
|
88
91
|
from sqlalchemy import {{ sa_imports | sort | join(', ') }}
|
|
@@ -165,7 +168,7 @@ class {{ model.name }}(Base):
|
|
|
165
168
|
{% set mapped_type = 'Optional[' + py_type + ']' if column.nullable else py_type %}
|
|
166
169
|
{# Determine if mapped_column() call is needed #}
|
|
167
170
|
{% set has_constraints = column.constraints.values() | select | list | length > 0 %}
|
|
168
|
-
{% set needs_mapped_column = has_constraints or column.encrypt or column.hash or column.is_calculated or column.sa_type is not none or column.type == 'vector' %}
|
|
171
|
+
{% set needs_mapped_column = has_constraints or column.encrypt or column.hash or column.is_calculated or column.sa_type is not none or column.type == 'vector' or column.server_now %}
|
|
169
172
|
{% if needs_mapped_column %}
|
|
170
173
|
{% set mc_args = [] %}
|
|
171
174
|
{% if column.type == 'vector' %}{% set _ = mc_args.append('Vector(' + column.dimensions|string + ')') %}
|
|
@@ -185,6 +188,10 @@ class {{ model.name }}(Base):
|
|
|
185
188
|
{% endfor %}
|
|
186
189
|
{% endif %}
|
|
187
190
|
{% if column.encrypt or column.hash %}{% set _ = mc_args.append('name="' + column.name + '"') %}{% endif %}
|
|
191
|
+
{# La pone la base de datos. Sin declararlo aquí, SQLAlchemy la enviaba como NULL —rellena
|
|
192
|
+
con None lo que no tiene valor para poder agrupar el INSERT— y la base de datos no llegaba
|
|
193
|
+
a poner NOW(). #}
|
|
194
|
+
{% if column.server_now %}{% set _ = mc_args.append('server_default=func.now()') %}{% endif %}
|
|
188
195
|
{% if column.is_calculated %}{% set _ = mc_args.append('name="' + column.name + '"') %}{% endif %}
|
|
189
196
|
{{ col_attr }}: Mapped[{{ mapped_type }}] = mapped_column({{ mc_args | join(', ') }})
|
|
190
197
|
{% else %}
|
|
@@ -138,6 +138,9 @@ column(
|
|
|
138
138
|
|
|
139
139
|
Una columna sin `column()` es una columna normal: `nombre: col[str]` basta.
|
|
140
140
|
|
|
141
|
+
`server_now=True` la rellena la base de datos con `NOW()`: en el `Create` es opcional, y si no se
|
|
142
|
+
envía, el cliente no la manda y el motor pone la fecha.
|
|
143
|
+
|
|
141
144
|
### Tipos disponibles
|
|
142
145
|
|
|
143
146
|
`int`, `bigint`, `smallint`, `float`, `numeric`, `str`, `text`, `bool`, `datetime`,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/domain/dao.py.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/facade.py.jinja2
RENAMED
|
File without changes
|
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/dataframe.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/filters.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/hierarchy.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/read.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/triggers.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/upsert.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/vector.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/macros/write.jinja2
RENAMED
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/session.py.jinja2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tai_sql-0.7.12 → tai_sql-0.7.14}/tai_sql/generators/python_client/templates/shared/vector.py.jinja2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|