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.
Files changed (56) hide show
  1. {tina4_python-0.2.169 → tina4_python-0.2.170}/PKG-INFO +1 -1
  2. {tina4_python-0.2.169 → tina4_python-0.2.170}/pyproject.toml +1 -1
  3. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/CRUD.py +18 -9
  4. {tina4_python-0.2.169 → tina4_python-0.2.170}/.gitignore +0 -0
  5. {tina4_python-0.2.169 → tina4_python-0.2.170}/README.md +0 -0
  6. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Api.py +0 -0
  7. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Auth.py +0 -0
  8. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Constant.py +0 -0
  9. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Database.py +0 -0
  10. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/DatabaseResult.py +0 -0
  11. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/DatabaseTypes.py +0 -0
  12. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Debug.py +0 -0
  13. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Env.py +0 -0
  14. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/FieldTypes.py +0 -0
  15. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/HtmlElement.py +0 -0
  16. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Localization.py +0 -0
  17. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Messages.py +0 -0
  18. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/MiddleWare.py +0 -0
  19. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Migration.py +0 -0
  20. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/ORM.py +0 -0
  21. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Queue.py +0 -0
  22. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Request.py +0 -0
  23. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Response.py +0 -0
  24. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Router.py +0 -0
  25. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Session.py +0 -0
  26. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/ShellColors.py +0 -0
  27. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Swagger.py +0 -0
  28. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Template.py +0 -0
  29. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Testing.py +0 -0
  30. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/WSDL.py +0 -0
  31. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Webserver.py +0 -0
  32. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/Websocket.py +0 -0
  33. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/__init__.py +0 -0
  34. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/cli.py +0 -0
  35. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/messages.pot +0 -0
  36. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/css/readme.md +0 -0
  37. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/favicon.ico +0 -0
  38. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/403.png +0 -0
  39. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/404.png +0 -0
  40. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/500.png +0 -0
  41. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/logo.png +0 -0
  42. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/images/readme.md +0 -0
  43. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/readme.md +0 -0
  44. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/reconnecting-websocket.js +0 -0
  45. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/js/tina4helper.js +0 -0
  46. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/swagger/index.html +0 -0
  47. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
  48. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/components/crud.twig +0 -0
  49. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/errors/403.twig +0 -0
  50. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/errors/404.twig +0 -0
  51. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/errors/500.twig +0 -0
  52. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/templates/readme.md +0 -0
  53. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
  54. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
  55. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
  56. {tina4_python-0.2.169 → tina4_python-0.2.170}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tina4-python
3
- Version: 0.2.169
3
+ Version: 0.2.170
4
4
  Summary: Tina4Python - This is not another framework for Python
5
5
  Author-email: Andre van Zuydam <andrevanzuydam@gmail.com>
6
6
  Requires-Python: <4.0,>=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tina4-python"
3
- version = "0.2.169"
3
+ version = "0.2.170"
4
4
  description = "Tina4Python - This is not another framework for Python"
5
5
  authors = [
6
6
  {name = "Andre van Zuydam",email = "andrevanzuydam@gmail.com"}
@@ -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
- json_record[key] = base64.b64encode(record[key].tobytes()).decode('utf-8')
376
- elif isinstance(record[key], bytes):
377
- json_record[key] = base64.b64encode(record[key]).decode('utf-8')
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