tina4-python 0.2.169__tar.gz → 0.2.170__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.
- {tina4_python-0.2.169 → tina4_python-0.2.170}/PKG-INFO +1 -1
- {tina4_python-0.2.169 → tina4_python-0.2.170}/pyproject.toml +1 -1
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/CRUD.py +18 -9
- {tina4_python-0.2.169 → tina4_python-0.2.170}/.gitignore +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/README.md +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Api.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Auth.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Constant.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Database.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/DatabaseResult.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/DatabaseTypes.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Debug.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Env.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/FieldTypes.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/HtmlElement.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Localization.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Messages.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/MiddleWare.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Migration.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/ORM.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Queue.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Request.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Response.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Router.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Session.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/ShellColors.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Swagger.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Template.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Testing.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/WSDL.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Webserver.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Websocket.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/__init__.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/cli.py +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/messages.pot +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/css/readme.md +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/favicon.ico +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/403.png +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/404.png +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/500.png +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/logo.png +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/readme.md +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/readme.md +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/reconnecting-websocket.js +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/tina4helper.js +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/swagger/index.html +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/components/crud.twig +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/errors/403.twig +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/errors/404.twig +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/errors/500.twig +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/readme.md +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import base64
|
|
9
9
|
import datetime
|
|
10
10
|
from decimal import Decimal
|
|
11
|
+
from shlex import join
|
|
11
12
|
|
|
12
13
|
from tina4_python.Debug import Debug
|
|
13
14
|
import re
|
|
@@ -335,7 +336,7 @@ class CRUD:
|
|
|
335
336
|
fields.append({"name": column, "label": Template.get_nice_label(column)})
|
|
336
337
|
|
|
337
338
|
html = Template.render(twig_file.replace(os.path.join(tina4_python.root_path, "src", "templates"), "").replace("\\", "/"),
|
|
338
|
-
{"columns": fields, "records": self.to_array(),
|
|
339
|
+
{"columns": fields, "records": self.to_array(base64_encode=False),
|
|
339
340
|
"table_name": crud_name,
|
|
340
341
|
"total_records": self.total_count,
|
|
341
342
|
"options": options})
|
|
@@ -344,7 +345,7 @@ class CRUD:
|
|
|
344
345
|
except Exception as e:
|
|
345
346
|
return "Error rendering CRUD: "+str(e)
|
|
346
347
|
|
|
347
|
-
def to_array(self, _filter=None):
|
|
348
|
+
def to_array(self, _filter=None, base64_encode = True):
|
|
348
349
|
"""
|
|
349
350
|
Convert the internal records to a JSON-serializable list of dictionaries.
|
|
350
351
|
|
|
@@ -358,6 +359,8 @@ class CRUD:
|
|
|
358
359
|
|
|
359
360
|
Returns:
|
|
360
361
|
list[dict]: Serializable records.
|
|
362
|
+
:param _filter:
|
|
363
|
+
:param base64_encode: Override default base64 encoding
|
|
361
364
|
"""
|
|
362
365
|
if self.error is not None:
|
|
363
366
|
return {"error": self.error}
|
|
@@ -372,9 +375,15 @@ class CRUD:
|
|
|
372
375
|
elif isinstance(record[key], (datetime.date, datetime.datetime)):
|
|
373
376
|
json_record[key] = record[key].isoformat()
|
|
374
377
|
elif isinstance(record[key], memoryview):
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
+
if base64_encode:
|
|
379
|
+
json_record[key] = base64.b64encode(record[key].tobytes()).decode('utf-8')
|
|
380
|
+
else:
|
|
381
|
+
json_record[key] = record[key].tobytes().decode("utf-8")
|
|
382
|
+
elif isinstance(record[key], bytes) and base64_encode:
|
|
383
|
+
if base64_encode:
|
|
384
|
+
json_record[key] = base64.b64encode(record[key]).decode('utf-8')
|
|
385
|
+
else:
|
|
386
|
+
json_record[key] = record[key].decode("utf-8")
|
|
378
387
|
else:
|
|
379
388
|
json_record[key] = record[key]
|
|
380
389
|
|
|
@@ -387,13 +396,13 @@ class CRUD:
|
|
|
387
396
|
else:
|
|
388
397
|
return []
|
|
389
398
|
|
|
390
|
-
def to_list(self, _filter=None):
|
|
399
|
+
def to_list(self, _filter=None, base64_encode = True):
|
|
391
400
|
"""Alias of to_array() for readability."""
|
|
392
|
-
return self.to_array(_filter)
|
|
401
|
+
return self.to_array(_filter, base64_encode=base64_encode)
|
|
393
402
|
|
|
394
|
-
def to_json(self, _filter=None):
|
|
403
|
+
def to_json(self, _filter=None, base64_encode = True):
|
|
395
404
|
"""Return records as a JSON encoded string."""
|
|
396
|
-
return json.dumps(self.to_array(_filter))
|
|
405
|
+
return json.dumps(self.to_array(_filter, base64_encode=base64_encode))
|
|
397
406
|
|
|
398
407
|
def __iter__(self):
|
|
399
408
|
"""Allow iteration over records (yields results from to_array())."""
|
|
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
|
{tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/reconnecting-websocket.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/swagger/oauth2-redirect.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/en/LC_MESSAGES/messages.mo
RENAMED
|
File without changes
|
{tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/en/LC_MESSAGES/messages.po
RENAMED
|
File without changes
|
{tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/fr/LC_MESSAGES/messages.mo
RENAMED
|
File without changes
|
{tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/fr/LC_MESSAGES/messages.po
RENAMED
|
File without changes
|