gamsapi 52.5.0__tar.gz → 53.0.0rc1__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.
- {gamsapi-52.5.0/src/gamsapi.egg-info → gamsapi-53.0.0rc1}/PKG-INFO +16 -16
- gamsapi-53.0.0rc1/VERSION +1 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/pyproject.toml +1 -1
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/setup.py +4 -4
- gamsapi-53.0.0rc1/src/gams/_version.py +1 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_excel/excelagent.py +5 -3
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_excel/workbook.py +15 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_accesshandler.py +1 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_databasehandler.py +17 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlitehandler.py +1 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/connectagent.py +9 -2
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/csvreader.py +74 -16
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/excelreader.py +6 -2
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/ExcelWriter.yaml +8 -2
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/sqlreader.py +5 -1
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/sqlwriter.py +2 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/sqlitewrite.py +92 -99
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/algorithms.py +2 -2
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_container.py +109 -61
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/gdx.py +3 -2
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/gmd.py +5 -4
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_mixins/ccc.py +276 -271
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/pivot.py +3 -3
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/ve.py +4 -1
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_parameter.py +2 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1/src/gamsapi.egg-info}/PKG-INFO +16 -16
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/requires.txt +15 -15
- gamsapi-52.5.0/VERSION +0 -1
- gamsapi-52.5.0/src/gams/_version.py +0 -1
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/LICENSE +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/MANIFEST.in +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/setup.cfg +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_excel/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_mysqlhandler.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_postgreshandler.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_pyodbchandler.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlalchemyhandler.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlserverhandler.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/concatenate.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/csvwriter.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/domainwriter.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/excelwriter.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/filter.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gamsreader.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gamswriter.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gdxreader.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gdxwriter.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/labelmanipulator.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/projection.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/pythoncode.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/rawcsvreader.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/rawexcelreader.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/CSVReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/CSVWriter.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/Concatenate.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/DomainWriter.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/ExcelReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/Filter.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GAMSReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GAMSWriter.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GDXReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GDXWriter.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/LabelManipulator.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/Projection.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/PythonCode.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/RawCSVReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/RawExcelReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/SQLReader.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/SQLWriter.yaml +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/connectdatabase.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/connectvalidator.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/errors.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/database.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/execution.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/options.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/workspace.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/embedded/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/embedded/gamsemb.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/emp/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/emp/emplexer.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/emp/empyacc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gclgms.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/numpy/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/numpy/_gams2numpy.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/numpy/gams2numpy.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc.h +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc_wrap.c +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/auth_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/cleanup_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/default_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/hypercube_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/jobs_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/licenses_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/namespaces_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/usage_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/users_api.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api_client.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api_response.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/configuration.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/exceptions.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/bad_input.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/cleanable_job_result.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/cleanable_job_result_page.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/engine_license.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/files_not_found.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/forwarded_token_response.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/generic_key_value_pair.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube_page.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube_summary.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube_token.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_ldap.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oauth2.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oauth2_scope.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oauth2_with_secret.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oidc.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oidc_with_secret.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/inex.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/invitation.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/invitation_quota.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/invitation_token.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/job.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/job_no_text_entry.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/job_no_text_entry_page.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/license.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/log_piece.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/message.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/message_and_token.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/message_with_webhook_id.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_auth_token.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_configuration.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_default_instance.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_default_user_instance.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_hypercube_job.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_hypercube_usage.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_instance_info.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_instance_info_full.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_instance_pool_info.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_job_labels.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_job_usage.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_pool_usage.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_usage.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_user.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_userinstance_info.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_userinstancepool_info.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_version.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/models.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/namespace.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/namespace_quota.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/namespace_with_permission.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/not_found.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/password_policy.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/perm_and_username.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/quota.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/quota_exceeded.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/status_code_meaning.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/stream_entry.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/system_wide_license.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/text_entries.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/text_entry.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/time_span.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/time_span_pool_worker.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/token_forward_error.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/user.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/user_group_member.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/user_groups.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/vapid_info.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/webhook.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/webhook_parameterized_event.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/py.typed +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/rest.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/magic/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/magic/gams_magic.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/magic/interactive.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/errors.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/alg/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/alg/rank.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/csvread.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/csvwrite.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/exceldump.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/gdxservice/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/gdxservice/gdxencoding.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/gdxservice/gdxrename.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/cholesky.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/eigenvalue.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/eigenvector.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/invert.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/ols.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/tooltemplate.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/excelmerge.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/exceltalk.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/msappavail.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/shellexecute.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/tools.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_abcs/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_abcs/container_abcs.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/casepreservingdict.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/constants.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/domainviolation.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/specialvalues.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/containers.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_mixins/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/tables.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/toDict.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/toList.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/toValue.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/equals.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/generateRecords.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/pve.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/sa.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/sapve.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/saua.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/sauapve.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/spve.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/__init__.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_alias.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_equation.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_set.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_universe_alias.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_variable.py +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/SOURCES.txt +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/dependency_links.txt +0 -0
- {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gamsapi
|
|
3
|
-
Version:
|
|
3
|
+
Version: 53.0.0rc1
|
|
4
4
|
Summary: GAMS Python API
|
|
5
5
|
Home-page: https://www.gams.com/
|
|
6
6
|
Author: GAMS Development Corporation
|
|
@@ -24,7 +24,7 @@ Requires-Python: >=3.10
|
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE
|
|
26
26
|
Provides-Extra: connect
|
|
27
|
-
Requires-Dist: pandas<
|
|
27
|
+
Requires-Dist: pandas<3.1,>=2.2.2; extra == "connect"
|
|
28
28
|
Requires-Dist: pyyaml; extra == "connect"
|
|
29
29
|
Requires-Dist: openpyxl>=3.1.0; extra == "connect"
|
|
30
30
|
Requires-Dist: sqlalchemy; extra == "connect"
|
|
@@ -45,30 +45,30 @@ Requires-Dist: python_dateutil; extra == "engine"
|
|
|
45
45
|
Requires-Dist: urllib3; extra == "engine"
|
|
46
46
|
Provides-Extra: magic
|
|
47
47
|
Requires-Dist: ipython; extra == "magic"
|
|
48
|
-
Requires-Dist: pandas<
|
|
48
|
+
Requires-Dist: pandas<3.1,>=2.2.2; extra == "magic"
|
|
49
49
|
Provides-Extra: tools
|
|
50
|
-
Requires-Dist: pandas<
|
|
50
|
+
Requires-Dist: pandas<3.1,>=2.2.2; extra == "tools"
|
|
51
51
|
Provides-Extra: transfer
|
|
52
|
-
Requires-Dist: pandas<
|
|
52
|
+
Requires-Dist: pandas<3.1,>=2.2.2; extra == "transfer"
|
|
53
53
|
Requires-Dist: scipy; extra == "transfer"
|
|
54
54
|
Provides-Extra: all
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist: pymssql; extra == "all"
|
|
55
|
+
Requires-Dist: openpyxl>=3.1.0; extra == "all"
|
|
56
|
+
Requires-Dist: urllib3; extra == "all"
|
|
58
57
|
Requires-Dist: cerberus; extra == "all"
|
|
59
|
-
Requires-Dist:
|
|
58
|
+
Requires-Dist: pandas<3.1,>=2.2.2; extra == "all"
|
|
59
|
+
Requires-Dist: pydantic; extra == "all"
|
|
60
60
|
Requires-Dist: psycopg2-binary; extra == "all"
|
|
61
|
-
Requires-Dist: pymysql; extra == "all"
|
|
62
|
-
Requires-Dist: urllib3; extra == "all"
|
|
63
|
-
Requires-Dist: python_dateutil; extra == "all"
|
|
64
|
-
Requires-Dist: ply; extra == "all"
|
|
65
61
|
Requires-Dist: pyyaml; extra == "all"
|
|
62
|
+
Requires-Dist: scipy; extra == "all"
|
|
66
63
|
Requires-Dist: certifi; extra == "all"
|
|
67
|
-
Requires-Dist:
|
|
64
|
+
Requires-Dist: pyodbc; extra == "all"
|
|
65
|
+
Requires-Dist: pymssql; extra == "all"
|
|
66
|
+
Requires-Dist: ply; extra == "all"
|
|
68
67
|
Requires-Dist: ipython; extra == "all"
|
|
68
|
+
Requires-Dist: sqlalchemy; extra == "all"
|
|
69
69
|
Requires-Dist: numpy; extra == "all"
|
|
70
|
-
Requires-Dist:
|
|
71
|
-
Requires-Dist:
|
|
70
|
+
Requires-Dist: pymysql; extra == "all"
|
|
71
|
+
Requires-Dist: python_dateutil; extra == "all"
|
|
72
72
|
Dynamic: author
|
|
73
73
|
Dynamic: author-email
|
|
74
74
|
Dynamic: classifier
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
53.0.0rc1
|
|
@@ -35,7 +35,7 @@ py_version = ".".join(sys.version.split(".")[:2])
|
|
|
35
35
|
|
|
36
36
|
EXTRAS = {
|
|
37
37
|
"connect": [
|
|
38
|
-
"pandas>=2.2.2,<
|
|
38
|
+
"pandas>=2.2.2,<3.1",
|
|
39
39
|
"pyyaml",
|
|
40
40
|
"openpyxl>=3.1.0",
|
|
41
41
|
"sqlalchemy",
|
|
@@ -48,9 +48,9 @@ EXTRAS = {
|
|
|
48
48
|
"control": ["certifi", "urllib3"],
|
|
49
49
|
"core": ["ply", "numpy"],
|
|
50
50
|
"engine": ["pydantic", "python_dateutil", "urllib3"],
|
|
51
|
-
"magic": ["ipython", "pandas>=2.2.2,<
|
|
52
|
-
"tools": ["pandas>=2.2.2,<
|
|
53
|
-
"transfer": ["pandas>=2.2.2,<
|
|
51
|
+
"magic": ["ipython", "pandas>=2.2.2,<3.1"],
|
|
52
|
+
"tools": ["pandas>=2.2.2,<3.1"],
|
|
53
|
+
"transfer": ["pandas>=2.2.2,<3.1", "scipy"],
|
|
54
54
|
}
|
|
55
55
|
EXTRAS["all"] = list(set([x for k, v in EXTRAS.items() for x in v]))
|
|
56
56
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "53.0.0"
|
|
@@ -186,8 +186,8 @@ class ExcelAgent(ConnectAgent):
|
|
|
186
186
|
def parse_range(self, sym_range, wb, clear_sheet=False, create_missing=False):
|
|
187
187
|
sheet, rng = self._split_range(sym_range, wb)
|
|
188
188
|
toc_range = f"'{sheet}'!{rng.split(':')[0]}"
|
|
189
|
-
sheet = self.sheet_by_name(sheet, wb, clear_sheet, create_missing)
|
|
190
189
|
nw_col, nw_row, se_col, se_row = self._range_to_coords(rng)
|
|
190
|
+
sheet = self.sheet_by_name(sheet, wb, clear_sheet, create_missing, nw_col, nw_row, se_col, se_row)
|
|
191
191
|
return sheet, nw_col, nw_row, se_col, se_row, toc_range
|
|
192
192
|
|
|
193
193
|
def parse_index(self, index, wb, index_parameter_map):
|
|
@@ -240,12 +240,14 @@ class ExcelAgent(ConnectAgent):
|
|
|
240
240
|
symbols.append(sym)
|
|
241
241
|
return symbols
|
|
242
242
|
|
|
243
|
-
def sheet_by_name(self, sheet, wb, clear_sheet=False, create_missing=False):
|
|
243
|
+
def sheet_by_name(self, sheet, wb, clear_sheet=False, create_missing=False, nw_col=None, nw_row=None, se_col=None, se_row=None):
|
|
244
244
|
for idx, s in enumerate(wb.sheetnames):
|
|
245
245
|
if sheet.lower() == s.lower():
|
|
246
|
-
if clear_sheet:
|
|
246
|
+
if clear_sheet is True:
|
|
247
247
|
wb.delete_sheet(s)
|
|
248
248
|
return wb.create_sheet(s, idx)
|
|
249
|
+
if clear_sheet == "range":
|
|
250
|
+
wb.delete_range(s, nw_col, nw_row, se_col, se_row)
|
|
249
251
|
return wb.get_sheet(s)
|
|
250
252
|
if create_missing:
|
|
251
253
|
return wb.create_sheet(sheet)
|
|
@@ -111,6 +111,21 @@ class Workbook:
|
|
|
111
111
|
else:
|
|
112
112
|
raise Exception("Invalid engine.")
|
|
113
113
|
|
|
114
|
+
def delete_range(self, sheet_name, nw_col, nw_row, se_col, se_row):
|
|
115
|
+
if self._engine == "xlwings":
|
|
116
|
+
raise Exception("Not imlemented.")
|
|
117
|
+
elif self._engine == "openpyxl":
|
|
118
|
+
sheet = self._wb[sheet_name]
|
|
119
|
+
if se_row is None:
|
|
120
|
+
se_row = sheet.max_row
|
|
121
|
+
if se_col is None:
|
|
122
|
+
se_col = sheet.max_column
|
|
123
|
+
for row in range(nw_row+1, se_row + 1):
|
|
124
|
+
for col in range(nw_col+1, se_col + 1):
|
|
125
|
+
sheet.cell(row=row, column=col).value = None
|
|
126
|
+
else:
|
|
127
|
+
raise Exception("Invalid engine.")
|
|
128
|
+
|
|
114
129
|
def delete_sheet(self, sheet_name):
|
|
115
130
|
if self._engine == "xlwings":
|
|
116
131
|
self._wb.sheets[sheet_name].delete()
|
{gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_accesshandler.py
RENAMED
|
@@ -30,6 +30,7 @@ from gams.connect.agents._sqlconnectors._databasehandler import DatabaseConnecto
|
|
|
30
30
|
class AccessConnector(DatabaseConnector):
|
|
31
31
|
SUPPORTED_INSERT_METHODS = ["default", "bulkInsert"]
|
|
32
32
|
QUOTE_CHAR = ["[]", '""', "``"]
|
|
33
|
+
SCHEMA_SUPPORT = False
|
|
33
34
|
|
|
34
35
|
@staticmethod
|
|
35
36
|
def _create_accdb(dbpath):
|
{gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_databasehandler.py
RENAMED
|
@@ -45,10 +45,20 @@ class ConnectionType(Enum):
|
|
|
45
45
|
SQLSERVER = "sqlserver"
|
|
46
46
|
ACCESS = "access"
|
|
47
47
|
|
|
48
|
+
CONNECTOR = {
|
|
49
|
+
"SQLiteConnector": ConnectionType.SQLITE.value,
|
|
50
|
+
"SQLAlchemyConnector": ConnectionType.SQLALCHEMY.value,
|
|
51
|
+
"PyodbcConnector": ConnectionType.PYODBC.value,
|
|
52
|
+
"MySQLConnector": ConnectionType.MYSQL.value,
|
|
53
|
+
"PostgresConnector": ConnectionType.POSTGRES.value,
|
|
54
|
+
"SQLServerConnector": ConnectionType.SQLSERVER.value,
|
|
55
|
+
"AccessConnector": ConnectionType.ACCESS.value,
|
|
56
|
+
}
|
|
48
57
|
|
|
49
58
|
class DatabaseConnector(ABC):
|
|
50
59
|
SUPPORTED_INSERT_METHODS = []
|
|
51
60
|
QUOTE_CHAR = []
|
|
61
|
+
SCHEMA_SUPPORT = True
|
|
52
62
|
|
|
53
63
|
def __init__(
|
|
54
64
|
self,
|
|
@@ -70,6 +80,13 @@ class DatabaseConnector(ABC):
|
|
|
70
80
|
f"Valid methods are >{self.SUPPORTED_INSERT_METHODS}<"
|
|
71
81
|
)
|
|
72
82
|
|
|
83
|
+
def is_schema_available(self, schema: str | None):
|
|
84
|
+
"""Checks if the connectionType allows schema"""
|
|
85
|
+
if (not self.SCHEMA_SUPPORT) and (schema is not None):
|
|
86
|
+
self._raise_error(
|
|
87
|
+
f"connectionType >{CONNECTOR[type(self).__name__]}< does not support schema but schemaName is set to >{schema}<."
|
|
88
|
+
)
|
|
89
|
+
|
|
73
90
|
def read_table(self, sql_query: str, read_sql_args: dict) -> pd.DataFrame:
|
|
74
91
|
"""
|
|
75
92
|
Read data from select DBMS using the provided SQL Query. Returns a pandas.DataFrame
|
{gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlitehandler.py
RENAMED
|
@@ -31,6 +31,7 @@ from gams.connect.agents._sqlconnectors._databasehandler import DatabaseConnecto
|
|
|
31
31
|
class SQLiteConnector(DatabaseConnector):
|
|
32
32
|
SUPPORTED_INSERT_METHODS = ["default"]
|
|
33
33
|
QUOTE_CHAR = ["[]", '""', "``"]
|
|
34
|
+
SCHEMA_SUPPORT = False
|
|
34
35
|
|
|
35
36
|
def connect(self, connection_details, connection_args, **kwargs) -> None:
|
|
36
37
|
|
|
@@ -381,14 +381,21 @@ class ConnectAgent(ABC):
|
|
|
381
381
|
# pandas-version-check
|
|
382
382
|
if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
|
|
383
383
|
df.iloc[:, -1] = df.iloc[:, -1].replace(vs)
|
|
384
|
-
|
|
384
|
+
elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
|
|
385
385
|
with pd.option_context("future.no_silent_downcasting", True):
|
|
386
386
|
df.iloc[:, -1] = df.iloc[:, -1].replace(vs).infer_objects()
|
|
387
|
+
else: # pandas >= 3.0.0
|
|
388
|
+
df.iloc[:, -1] = df.iloc[:, -1].replace(vs).infer_objects()
|
|
389
|
+
|
|
387
390
|
else:
|
|
388
391
|
# pandas-version-check
|
|
389
392
|
if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
|
|
390
393
|
df.iloc[~mask, -1] = df.iloc[~mask, -1].replace(vs)
|
|
391
|
-
|
|
394
|
+
elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
|
|
395
|
+
df.iloc[~mask, -1] = (
|
|
396
|
+
df.iloc[~mask, -1].replace(vs).infer_objects()
|
|
397
|
+
)
|
|
398
|
+
else: # pandas >= 3.0.0
|
|
392
399
|
with pd.option_context("future.no_silent_downcasting", True):
|
|
393
400
|
df.iloc[~mask, -1] = (
|
|
394
401
|
df.iloc[~mask, -1].replace(vs).infer_objects()
|
|
@@ -325,9 +325,11 @@ class CSVReader(ConnectAgent):
|
|
|
325
325
|
# pandas-version-check
|
|
326
326
|
if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
|
|
327
327
|
df.isetitem(-1, df.iloc[:, -1].replace(self._value_sub))
|
|
328
|
-
|
|
328
|
+
elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
|
|
329
329
|
with pd.option_context("future.no_silent_downcasting", True):
|
|
330
330
|
df.isetitem(-1, df.iloc[:, -1].replace(self._value_sub).infer_objects())
|
|
331
|
+
else: # pandas >= 3.0.0
|
|
332
|
+
df.isetitem(-1, df.iloc[:, -1].replace(self._value_sub).infer_objects())
|
|
331
333
|
|
|
332
334
|
if self._trace > 2:
|
|
333
335
|
self._cdb.print_log(f"DataFrame after value substitution:\n{df}")
|
|
@@ -426,9 +428,10 @@ class CSVReader(ConnectAgent):
|
|
|
426
428
|
# pandas-version-check
|
|
427
429
|
if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
|
|
428
430
|
df = df.stack(level=df.columns.names, dropna=False)
|
|
429
|
-
|
|
431
|
+
elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
|
|
430
432
|
df = df.stack(level=df.columns.names, future_stack=True)
|
|
431
|
-
|
|
433
|
+
else: # pandas >= 3.0.0
|
|
434
|
+
df = df.stack(level=df.columns.names)
|
|
432
435
|
return df
|
|
433
436
|
|
|
434
437
|
def _sort_value_columns(self, df: pd.DataFrame) -> pd.DataFrame:
|
|
@@ -495,6 +498,36 @@ class CSVReader(ConnectAgent):
|
|
|
495
498
|
)
|
|
496
499
|
|
|
497
500
|
return df
|
|
501
|
+
|
|
502
|
+
def _create_sym(self, df, domain):
|
|
503
|
+
"""Creates symbol (parameter or set) in the Connect container
|
|
504
|
+
|
|
505
|
+
Parameters
|
|
506
|
+
----------
|
|
507
|
+
df : pd.DataFrame | None
|
|
508
|
+
Symbol records
|
|
509
|
+
domain : list
|
|
510
|
+
Symbol domains
|
|
511
|
+
|
|
512
|
+
Returns
|
|
513
|
+
-------
|
|
514
|
+
Symbol object
|
|
515
|
+
Created symbol
|
|
516
|
+
"""
|
|
517
|
+
if self._sym_type == "par":
|
|
518
|
+
sym = self._cdb.container.addParameter(
|
|
519
|
+
self._name,
|
|
520
|
+
domain,
|
|
521
|
+
records=df,
|
|
522
|
+
)
|
|
523
|
+
else:
|
|
524
|
+
sym = self._cdb.container.addSet(
|
|
525
|
+
self._name,
|
|
526
|
+
domain,
|
|
527
|
+
records=df,
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
return sym
|
|
498
531
|
|
|
499
532
|
def execute(self):
|
|
500
533
|
if self._trace > 0:
|
|
@@ -543,7 +576,37 @@ class CSVReader(ConnectAgent):
|
|
|
543
576
|
f"Arguments for reading the CSV file:\n{self._read_csv_args}"
|
|
544
577
|
)
|
|
545
578
|
|
|
546
|
-
|
|
579
|
+
try:
|
|
580
|
+
df = pd.read_csv(self._file, **self._read_csv_args)
|
|
581
|
+
|
|
582
|
+
except pd.errors.EmptyDataError:
|
|
583
|
+
if self._trace > 1:
|
|
584
|
+
self._cdb.print_log(
|
|
585
|
+
"Empty data after reading CSV file."
|
|
586
|
+
)
|
|
587
|
+
|
|
588
|
+
# set dimensionality
|
|
589
|
+
dim = len(self._index_cols)
|
|
590
|
+
if self._stack:
|
|
591
|
+
if self._multiheader:
|
|
592
|
+
dim += len(self._header)
|
|
593
|
+
else:
|
|
594
|
+
dim += 1
|
|
595
|
+
|
|
596
|
+
sym = self._create_sym(None, ["*"] * dim)
|
|
597
|
+
|
|
598
|
+
# For symbols with None records, empty df is assigned
|
|
599
|
+
self._transform_sym_none_to_empty(sym)
|
|
600
|
+
|
|
601
|
+
if self._trace > 2:
|
|
602
|
+
self._cdb.print_log(
|
|
603
|
+
f"Connect Container symbol={self._name}:\n {sym.records}\n"
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
if self._trace > 0:
|
|
607
|
+
self._describe_container(self._cdb.container, "Connect Container (after):")
|
|
608
|
+
|
|
609
|
+
return
|
|
547
610
|
|
|
548
611
|
if self._trace > 2:
|
|
549
612
|
self._cdb.print_log(
|
|
@@ -569,11 +632,7 @@ class CSVReader(ConnectAgent):
|
|
|
569
632
|
if self._auto_col is not None and not df.columns.empty:
|
|
570
633
|
self._generate_column_labels(df)
|
|
571
634
|
|
|
572
|
-
|
|
573
|
-
dim += 1
|
|
574
|
-
domain.append("*")
|
|
575
|
-
|
|
576
|
-
elif self._stack:
|
|
635
|
+
if self._stack:
|
|
577
636
|
if self._multiheader:
|
|
578
637
|
dim += len(self._header)
|
|
579
638
|
domain.extend(
|
|
@@ -596,8 +655,12 @@ class CSVReader(ConnectAgent):
|
|
|
596
655
|
pd.__version__, "2.2"
|
|
597
656
|
): # pandas < 2.2.0
|
|
598
657
|
df = df.stack(dropna=False)
|
|
599
|
-
|
|
658
|
+
elif self._pandas_version_before(
|
|
659
|
+
pd.__version__, "3.0"
|
|
660
|
+
): # 2.2.0 <= pandas < 3.0.0
|
|
600
661
|
df = df.stack(future_stack=True)
|
|
662
|
+
else: # pandas >= 3.0.0
|
|
663
|
+
df = df.stack()
|
|
601
664
|
|
|
602
665
|
if dim == 1 or (self._multiheader and dim == columns.nlevels):
|
|
603
666
|
# drop pandas default index level
|
|
@@ -638,11 +701,6 @@ class CSVReader(ConnectAgent):
|
|
|
638
701
|
self._substitute_values(df)
|
|
639
702
|
df.dropna(inplace=True)
|
|
640
703
|
|
|
641
|
-
if self._sym_type == "par":
|
|
642
|
-
sym = gt.Parameter(self._cdb.container, self._name, domain=domain)
|
|
643
|
-
else:
|
|
644
|
-
sym = gt.Set(self._cdb.container, self._name, domain=domain)
|
|
645
|
-
|
|
646
704
|
# reset the index to the default integer index
|
|
647
705
|
df = df.reset_index(drop=True)
|
|
648
706
|
|
|
@@ -651,7 +709,7 @@ class CSVReader(ConnectAgent):
|
|
|
651
709
|
"Final DataFrame that will be processed by" f" GAMSTransfer:\n{df}"
|
|
652
710
|
)
|
|
653
711
|
|
|
654
|
-
sym.
|
|
712
|
+
sym = self._create_sym(df, domain)
|
|
655
713
|
|
|
656
714
|
if dim > 0 and self._stack:
|
|
657
715
|
if self._multiheader:
|
|
@@ -276,9 +276,11 @@ class ExcelReader(ExcelAgent):
|
|
|
276
276
|
# pandas-version-check
|
|
277
277
|
if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
|
|
278
278
|
df.replace(value_sub, inplace=True)
|
|
279
|
-
|
|
279
|
+
elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
|
|
280
280
|
with pd.option_context("future.no_silent_downcasting", True):
|
|
281
281
|
df = df.replace(value_sub).infer_objects()
|
|
282
|
+
else: # pandas >= 3.0.0
|
|
283
|
+
df = df.replace(value_sub).infer_objects()
|
|
282
284
|
return df
|
|
283
285
|
|
|
284
286
|
def _write(self, df, sym_name, sym_type, rdim, cdim):
|
|
@@ -654,9 +656,11 @@ class ExcelReader(ExcelAgent):
|
|
|
654
656
|
# pandas-version-check
|
|
655
657
|
if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
|
|
656
658
|
df.replace(regex=pattern, value=GMS_SV_UNDEF, inplace=True)
|
|
657
|
-
|
|
659
|
+
elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
|
|
658
660
|
with pd.option_context("future.no_silent_downcasting", True):
|
|
659
661
|
df = df.replace(regex=pattern, value=GMS_SV_UNDEF).infer_objects()
|
|
662
|
+
else: # pandas >= 3.0.0
|
|
663
|
+
df = df.replace(regex=pattern, value=GMS_SV_UNDEF).infer_objects()
|
|
660
664
|
self._write(df, sym_name, sym_type, rdim, cdim)
|
|
661
665
|
|
|
662
666
|
def _open(self):
|
|
@@ -10,8 +10,11 @@ columnDimension:
|
|
|
10
10
|
min: 0
|
|
11
11
|
max: 20
|
|
12
12
|
clearSheet:
|
|
13
|
-
type: boolean
|
|
14
13
|
default: false
|
|
14
|
+
oneof:
|
|
15
|
+
- type: string
|
|
16
|
+
allowed: [range]
|
|
17
|
+
- type: boolean
|
|
15
18
|
mergedCells:
|
|
16
19
|
type: boolean
|
|
17
20
|
default: false
|
|
@@ -65,9 +68,12 @@ symbols:
|
|
|
65
68
|
- type: string
|
|
66
69
|
allowed: [infer]
|
|
67
70
|
clearSheet:
|
|
68
|
-
type: boolean
|
|
69
71
|
default: null
|
|
70
72
|
nullable: true
|
|
73
|
+
oneof:
|
|
74
|
+
- type: string
|
|
75
|
+
allowed: [range]
|
|
76
|
+
- type: boolean
|
|
71
77
|
mergedCells:
|
|
72
78
|
type: boolean
|
|
73
79
|
default: null
|
|
@@ -216,8 +216,12 @@ class SQLReader(ConnectAgent):
|
|
|
216
216
|
pd.__version__, "2.2"
|
|
217
217
|
): # pandas < 2.2.0
|
|
218
218
|
df = df.stack(dropna=False)
|
|
219
|
-
|
|
219
|
+
elif self._pandas_version_before(
|
|
220
|
+
pd.__version__, "3.0"
|
|
221
|
+
): # 2.2.0 <= pandas < 3.0.0
|
|
220
222
|
df = df.stack(future_stack=True)
|
|
223
|
+
else: # pandas >= 3.0.0
|
|
224
|
+
df = df.stack()
|
|
221
225
|
if dim == 1:
|
|
222
226
|
df = df.droplevel(
|
|
223
227
|
level=0
|
|
@@ -117,6 +117,7 @@ class SQLWriter(ConnectAgent):
|
|
|
117
117
|
self._describe_container(self._cdb.container, "Connect Container:")
|
|
118
118
|
|
|
119
119
|
self._handler.validate_insert_method(method=self._insertMethod)
|
|
120
|
+
self._handler.is_schema_available(schema=self._schema_name)
|
|
120
121
|
self._open()
|
|
121
122
|
|
|
122
123
|
try:
|
|
@@ -170,6 +171,7 @@ class SQLWriter(ConnectAgent):
|
|
|
170
171
|
insertMethod = sym["insertMethod"]
|
|
171
172
|
skip_text = sym["skipText"]
|
|
172
173
|
self._handler.validate_insert_method(method=insertMethod)
|
|
174
|
+
self._handler.is_schema_available(schema=schema)
|
|
173
175
|
|
|
174
176
|
if self._small and table_name == "UEL$":
|
|
175
177
|
self._connect_error(
|