jaaql-middleware-python 4.23.0__tar.gz → 4.23.2__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.
- {jaaql-middleware-python-4.23.0/jaaql_middleware_python.egg-info → jaaql-middleware-python-4.23.2}/PKG-INFO +1 -1
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/constants.py +1 -1
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/exceptions/jaaql_interpretable_handled_errors.py +1 -1
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/interpreter/interpret_jaaql.py +29 -10
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/exception_queries.py +1 -1
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/generated_queries.py +1 -1
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/01.install_domains.generated.sql +3 -3
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/04.install_jaaql_data_structures.generated.sql +9 -1179
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2/jaaql_middleware_python.egg-info}/PKG-INFO +1 -1
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/LICENSE.txt +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/README.md +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/config/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/config/config-docker.ini +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/config/config-test.ini +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/config/config.ini +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/config_constants.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/db/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/db/db_interface.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/db/db_pg_interface.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/db/db_utils.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/db/db_utils_no_circ.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/documentation/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/documentation/documentation_internal.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/documentation/documentation_public.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/documentation/documentation_shared.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/email/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/email/email_manager.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/email/email_manager_service.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/email/patch_ems.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/exceptions/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/exceptions/custom_http_status.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/exceptions/http_status_exception.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/exceptions/not_yet_implement_exception.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/generated_constants.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/interpreter/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/jaaql.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/migrations/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/migrations/migration_history.sql +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/migrations/migrations.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/base_controller.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/base_model.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/controller.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/controller_interface.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/handmade_queries.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/model.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/model_interface.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/mvc/response.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/openapi/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/openapi/swagger_documentation.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/patch.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/02.install_super_user.exceptions.sql +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/03.install_super_user.handwritten.sql +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/05.install_jaaql.exceptions.sql +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/06.install_jaaql.handwritten.sql +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/scripts/swagger_template.html +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/services/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/services/cached_canned_query_service.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/services/migrations_manager_service.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/services/patch_mms.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/services/patch_shared_var_service.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/services/shared_var_service.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/utilities/__init__.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/utilities/crypt_utils.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/utilities/options.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/utilities/utils.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/utilities/utils_no_project_imports.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql/utilities/vault.py +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql_middleware_python.egg-info/SOURCES.txt +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql_middleware_python.egg-info/dependency_links.txt +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql_middleware_python.egg-info/requires.txt +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/jaaql_middleware_python.egg-info/top_level.txt +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/setup.cfg +0 -0
- {jaaql-middleware-python-4.23.0 → jaaql-middleware-python-4.23.2}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: jaaql-middleware-python
|
|
3
|
-
Version: 4.23.
|
|
3
|
+
Version: 4.23.2
|
|
4
4
|
Summary: The jaaql package, allowing for rapid development and deployment of RESTful HTTP applications
|
|
5
5
|
Home-page: https://github.com/JAAQL/JAAQL-middleware-python
|
|
6
6
|
Author: Software Quality Measurement and Improvement bv
|
|
@@ -147,7 +147,7 @@ class SingletonRequested(JaaqlInterpretableHandledError):
|
|
|
147
147
|
error_code=1011,
|
|
148
148
|
http_response_code=422,
|
|
149
149
|
table_name=None,
|
|
150
|
-
message="A singleton was requested for this set but either 0 or
|
|
150
|
+
message="A singleton was requested for this set but either 0 or many rows were returned",
|
|
151
151
|
column_name=None,
|
|
152
152
|
_set=_set,
|
|
153
153
|
index=None,
|
|
@@ -11,7 +11,8 @@ from jaaql.db.db_interface import DBInterface, ECHO__none
|
|
|
11
11
|
from psycopg.errors import OperationalError, Error
|
|
12
12
|
from jaaql.constants import KEY__position, KEY__file, KEY__application, KEY__error, KEY__error_row_number, KEY__error_query, \
|
|
13
13
|
KEY__error_set, KEY__error_index, SQLStateJaaql, KEY__restrictions, REGEX__dmbs_object_name
|
|
14
|
-
from jaaql.exceptions.jaaql_interpretable_handled_errors import DatabaseOperationalError, HandledProcedureError, UnhandledQueryError, UnhandledProcedureError
|
|
14
|
+
from jaaql.exceptions.jaaql_interpretable_handled_errors import DatabaseOperationalError, HandledProcedureError, UnhandledQueryError, UnhandledProcedureError, \
|
|
15
|
+
SingletonRequested
|
|
15
16
|
from typing import Union
|
|
16
17
|
|
|
17
18
|
|
|
@@ -295,23 +296,27 @@ class InterpretJAAQL:
|
|
|
295
296
|
pass
|
|
296
297
|
raise ex
|
|
297
298
|
|
|
299
|
+
skipped_singletons = []
|
|
300
|
+
|
|
298
301
|
for cur_query, cur_parameters, cur_row_idx, cur_state in zip(to_exec, replacement_parameters, range(len(to_exec)), states):
|
|
299
302
|
exc_query = cur_query
|
|
300
303
|
exc_state = cur_state
|
|
301
304
|
exc_row_idx = cur_row_idx
|
|
302
305
|
exc_parameters = cur_parameters
|
|
303
306
|
exc_row_number = cur_parameters.get(KEY__row_number)
|
|
304
|
-
last_query, found_parameter_dictionary = self.pre_prepare_statement(
|
|
307
|
+
last_query, found_parameter_dictionary = self.pre_prepare_statement(
|
|
308
|
+
cur_query, cur_parameters, for_prepare=do_prepare_only is not False and do_prepare_only is not None,
|
|
309
|
+
skipped_singletons=skipped_singletons)
|
|
305
310
|
|
|
306
311
|
enc_parameter_dictionary = {}
|
|
307
312
|
|
|
308
313
|
encrypt_parameters = {key: val for key, val in cur_parameters.items() if key not in found_parameter_dictionary}
|
|
309
314
|
|
|
310
315
|
if len(encrypt_parameters) != 0:
|
|
311
|
-
last_query, enc_parameter_dictionary = self.pre_prepare_statement(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
316
|
+
last_query, enc_parameter_dictionary = self.pre_prepare_statement(
|
|
317
|
+
last_query, encrypt_parameters, match_regex=REGEX_enc_query_argument,
|
|
318
|
+
encryption_key=encryption_key, for_prepare=do_prepare_only is not False and do_prepare_only is not None,
|
|
319
|
+
skipped_singletons=skipped_singletons)
|
|
315
320
|
|
|
316
321
|
last_query = self.encrypt_literals(last_query, encryption_key)
|
|
317
322
|
found_params = {**found_parameter_dictionary, **enc_parameter_dictionary}
|
|
@@ -328,12 +333,17 @@ class InterpretJAAQL:
|
|
|
328
333
|
["NULL" for _ in found_params.keys()]) + arg_close
|
|
329
334
|
found_params = {}
|
|
330
335
|
|
|
336
|
+
cur_assert = query_obj.get(KEY_assert)
|
|
337
|
+
|
|
331
338
|
if query_key in skip_as_restricted:
|
|
332
339
|
res = {
|
|
333
340
|
"columns": [],
|
|
334
341
|
"rows": [],
|
|
335
342
|
"type_codes": []
|
|
336
343
|
}
|
|
344
|
+
if cur_assert == ASSERT_one:
|
|
345
|
+
skipped_singletons.append(query_key)
|
|
346
|
+
|
|
337
347
|
else:
|
|
338
348
|
res = self.db_interface.execute_query_fetching_results(conn, last_query, found_params, wait_hook=wait_hook,
|
|
339
349
|
requires_dba_check=check_required and canned_query_service is not None)
|
|
@@ -358,12 +368,16 @@ class InterpretJAAQL:
|
|
|
358
368
|
else:
|
|
359
369
|
ret = res
|
|
360
370
|
|
|
361
|
-
cur_assert = query_obj.get(KEY_assert)
|
|
362
371
|
if cur_assert != ASSERT_none and query_key not in skip_as_restricted:
|
|
363
372
|
if cur_assert == ASSERT_zero and len(res["rows"]) != ASSERT_zero:
|
|
364
373
|
raise HttpStatusException(ERR_assert_expecting % (str(ASSERT_zero), len(res["rows"])), HTTPStatus.BAD_REQUEST)
|
|
365
374
|
elif cur_assert == ASSERT_one and len(res["rows"]) != ASSERT_one:
|
|
366
|
-
raise
|
|
375
|
+
raise SingletonRequested(exc_query_key, descriptor={
|
|
376
|
+
"row_count": len(res["rows"]),
|
|
377
|
+
"columns": res["rows"],
|
|
378
|
+
"rows": res["columns"],
|
|
379
|
+
"type_codes": res["type_codes"]
|
|
380
|
+
})
|
|
367
381
|
elif cur_assert == ASSERT_one_plus and len(res["rows"]) < ASSERT_one_plus_minimum_allowed:
|
|
368
382
|
raise HttpStatusException(ERR_assert_expecting % (str(ASSERT_one_plus_message), len(res["rows"])), HTTPStatus.BAD_REQUEST)
|
|
369
383
|
|
|
@@ -437,6 +451,7 @@ class InterpretJAAQL:
|
|
|
437
451
|
elif is_dict_query:
|
|
438
452
|
if isinstance(ex, JaaqlInterpretableHandledError):
|
|
439
453
|
err = ex
|
|
454
|
+
err.set = exc_query_key
|
|
440
455
|
else:
|
|
441
456
|
new_ex = HttpStatusException(str(ex))
|
|
442
457
|
if isinstance(ex, HttpStatusException):
|
|
@@ -646,7 +661,7 @@ class InterpretJAAQL:
|
|
|
646
661
|
return new_query + query[last_end_match:]
|
|
647
662
|
|
|
648
663
|
def pre_prepare_statement(self, query, parameters, match_regex: str = REGEX_query_argument, encryption_key: bytes = None,
|
|
649
|
-
require_presence: bool = True, for_prepare: bool = False):
|
|
664
|
+
require_presence: bool = True, for_prepare: bool = False, skipped_singletons: list[str] = None):
|
|
650
665
|
prepared = ""
|
|
651
666
|
last_index = 0
|
|
652
667
|
found_parameters = []
|
|
@@ -670,7 +685,11 @@ class InterpretJAAQL:
|
|
|
670
685
|
if match_str not in found_parameters:
|
|
671
686
|
if match_str not in parameters and match_str not in MARKERS:
|
|
672
687
|
if require_presence:
|
|
673
|
-
|
|
688
|
+
missing_str = ERR_missing_parameter % match_str
|
|
689
|
+
if skipped_singletons is not None and len(skipped_singletons) != 0:
|
|
690
|
+
missing_str += ". Is it possible the parameter exists in one of the following restricted singletons: " + ", ".join(
|
|
691
|
+
missing_str) + "?"
|
|
692
|
+
raise HttpStatusException(missing_str, HTTPStatus.BAD_REQUEST)
|
|
674
693
|
else:
|
|
675
694
|
continue
|
|
676
695
|
elif match_str not in parameters and match_str in MARKERS:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
** This installation module was generated from
|
|
2
|
+
** This installation module was generated from ..\..\Packages/DBMS/Postgres/15/domains.install for Postgres/15
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
CREATE DOMAIN encrypted__email_server_password AS character varying(256);
|
|
@@ -7,10 +7,10 @@ CREATE DOMAIN encrypted__access_token AS character varying(64);
|
|
|
7
7
|
CREATE DOMAIN encrypted__jaaql_username AS character varying(255);
|
|
8
8
|
CREATE DOMAIN encrypted__hash AS character varying(512);
|
|
9
9
|
CREATE DOMAIN encrypted__salted_ip AS character varying(256);
|
|
10
|
-
CREATE DOMAIN internet_name AS character varying(63) CHECK (VALUE ~* '^[a-z0-9
|
|
10
|
+
CREATE DOMAIN internet_name AS character varying(63) CHECK (VALUE ~* '^[a-z0-9\-]*$');
|
|
11
11
|
CREATE DOMAIN url AS character varying(256);
|
|
12
12
|
CREATE DOMAIN location AS character varying(256);
|
|
13
|
-
CREATE DOMAIN object_name AS character varying(63) CHECK (VALUE ~* '^[a-
|
|
13
|
+
CREATE DOMAIN object_name AS character varying(63) CHECK (VALUE ~* '^[a-zA-Z_][a-zA-Z_0-9\$]*$');
|
|
14
14
|
CREATE DOMAIN validity_period AS integer CHECK (VALUE between 15 and 9999999);
|
|
15
15
|
CREATE DOMAIN short_validity_period AS integer CHECK (VALUE between 15 and 86400);
|
|
16
16
|
CREATE DOMAIN person_name AS character varying(64);
|