tina4-python 0.2.112__tar.gz → 0.2.114__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.112 → tina4_python-0.2.114}/PKG-INFO +1 -1
- {tina4_python-0.2.112 → tina4_python-0.2.114}/pyproject.toml +1 -1
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/MiddleWare.py +18 -3
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Template.py +7 -5
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Webserver.py +7 -4
- {tina4_python-0.2.112 → tina4_python-0.2.114}/.gitignore +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/README.md +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Auth.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Constant.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Database.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/DatabaseResult.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/DatabaseTypes.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Debug.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Env.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Localization.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Messages.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Migration.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/ORM.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Queue.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Request.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Response.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Router.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Session.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/ShellColors.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Swagger.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/Websocket.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/__init__.py +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/messages.pot +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/css/readme.md +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/favicon.ico +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/images/403.png +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/images/404.png +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/images/500.png +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/images/logo.png +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/images/readme.md +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/js/readme.md +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/js/reconnecting-websocket.js +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/js/tina4helper.js +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/swagger/index.html +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/templates/errors/403.twig +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/templates/errors/404.twig +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/templates/errors/500.twig +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/templates/readme.md +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
# License: MIT https://opensource.org/licenses/MIT
|
|
5
5
|
#
|
|
6
6
|
# flake8: noqa: E501
|
|
7
|
+
import asyncio
|
|
8
|
+
|
|
7
9
|
class MiddleWare:
|
|
8
10
|
def __init__(self, middleware_class):
|
|
9
11
|
"""
|
|
@@ -35,7 +37,12 @@ class MiddleWare:
|
|
|
35
37
|
"""
|
|
36
38
|
for method in self.before_methods:
|
|
37
39
|
method = getattr(self.middleware_class, method)
|
|
38
|
-
|
|
40
|
+
result = method(request, response)
|
|
41
|
+
if asyncio.iscoroutine(result):
|
|
42
|
+
request, response = await result
|
|
43
|
+
else:
|
|
44
|
+
request, response = result
|
|
45
|
+
|
|
39
46
|
return request, response
|
|
40
47
|
|
|
41
48
|
async def call_after_methods(self, request, response):
|
|
@@ -47,7 +54,11 @@ class MiddleWare:
|
|
|
47
54
|
"""
|
|
48
55
|
for method in self.after_methods:
|
|
49
56
|
method = getattr(self.middleware_class, method)
|
|
50
|
-
|
|
57
|
+
result = method(request, response)
|
|
58
|
+
if asyncio.iscoroutine(result):
|
|
59
|
+
request, response = await result
|
|
60
|
+
else:
|
|
61
|
+
request, response = result
|
|
51
62
|
return request, response
|
|
52
63
|
|
|
53
64
|
async def call_any_methods(self, request, response):
|
|
@@ -59,7 +70,11 @@ class MiddleWare:
|
|
|
59
70
|
"""
|
|
60
71
|
for method in self.any_methods:
|
|
61
72
|
method = getattr(self.middleware_class, method)
|
|
62
|
-
|
|
73
|
+
result = method(request, response)
|
|
74
|
+
if asyncio.iscoroutine(result):
|
|
75
|
+
request, response = await result
|
|
76
|
+
else:
|
|
77
|
+
request, response = result
|
|
63
78
|
return request, response
|
|
64
79
|
|
|
65
80
|
def call_direct_method(self, request, response, method_name):
|
|
@@ -15,6 +15,7 @@ from jinja2 import Environment, FileSystemLoader, Undefined
|
|
|
15
15
|
from tina4_python.Session import Session
|
|
16
16
|
from random import random as RANDOM
|
|
17
17
|
|
|
18
|
+
|
|
18
19
|
class Template:
|
|
19
20
|
# initializes the twig template engine
|
|
20
21
|
@staticmethod
|
|
@@ -30,11 +31,12 @@ class Template:
|
|
|
30
31
|
Template.twig.globals['RANDOM'] = RANDOM
|
|
31
32
|
Template.twig.globals['formToken'] = Template.get_form_token
|
|
32
33
|
Template.twig.filters['formToken'] = Template.get_form_token_input
|
|
33
|
-
if Constant.TINA4_LOG_DEBUG in os.getenv("TINA4_DEBUG_LEVEL") or Constant.TINA4_LOG_ALL in os.getenv(
|
|
34
|
+
if Constant.TINA4_LOG_DEBUG in os.getenv("TINA4_DEBUG_LEVEL") or Constant.TINA4_LOG_ALL in os.getenv(
|
|
35
|
+
"TINA4_DEBUG_LEVEL"):
|
|
34
36
|
Template.twig.globals['dump'] = Template.dump
|
|
35
37
|
else:
|
|
36
38
|
Template.twig.globals['dump'] = Template.production_dump
|
|
37
|
-
Debug("Twig Initialized on "+path, Constant.TINA4_LOG_INFO)
|
|
39
|
+
Debug("Twig Initialized on " + path, Constant.TINA4_LOG_INFO)
|
|
38
40
|
return Template.twig
|
|
39
41
|
|
|
40
42
|
@staticmethod
|
|
@@ -52,7 +54,7 @@ class Template:
|
|
|
52
54
|
return obj.session_values
|
|
53
55
|
raise TypeError("Type %s not serializable to Jinja2 template" % type(obj))
|
|
54
56
|
|
|
55
|
-
return "<pre>"+json.dumps(param, indent=True, default=json_serialize)+"</pre>"
|
|
57
|
+
return "<pre>" + json.dumps(param, indent=True, default=json_serialize) + "</pre>"
|
|
56
58
|
else:
|
|
57
59
|
return ""
|
|
58
60
|
|
|
@@ -62,7 +64,8 @@ class Template:
|
|
|
62
64
|
|
|
63
65
|
@staticmethod
|
|
64
66
|
def get_form_token_input(form_name):
|
|
65
|
-
return '<input type="hidden" name="formToken" value="'+Template.get_form_token(
|
|
67
|
+
return '<input type="hidden" name="formToken" value="' + Template.get_form_token(
|
|
68
|
+
{"formName": form_name}) + '"><!--"' + str(datetime.now().isoformat()) + '"-->'
|
|
66
69
|
|
|
67
70
|
@staticmethod
|
|
68
71
|
def convert_special_types(obj):
|
|
@@ -102,4 +105,3 @@ class Template:
|
|
|
102
105
|
@staticmethod
|
|
103
106
|
def render(template_or_file_name, data=None):
|
|
104
107
|
return Template.render_twig_template(template_or_file_name, data)
|
|
105
|
-
|
|
@@ -52,13 +52,15 @@ class Webserver:
|
|
|
52
52
|
elif self.lowercase_headers["content-type"] == "application/json":
|
|
53
53
|
# print("CONTENT", content, self.request)
|
|
54
54
|
try:
|
|
55
|
-
return json.loads(content)
|
|
55
|
+
return json.loads(content), {}
|
|
56
56
|
except Exception:
|
|
57
|
-
return content.decode("utf-8")
|
|
57
|
+
return content.decode("utf-8"), {}
|
|
58
|
+
|
|
58
59
|
elif self.lowercase_headers["content-type"] == "text/plain":
|
|
59
|
-
return content.decode("utf-8")
|
|
60
|
+
return content.decode("utf-8"), {}
|
|
60
61
|
else:
|
|
61
62
|
content_data = self.lowercase_headers["content-type"].split("; ")
|
|
63
|
+
|
|
62
64
|
if content_data[0] == "multipart/form-data":
|
|
63
65
|
boundary = content_data[1].split("=")[1] + "\r\n"
|
|
64
66
|
content = b"\r\n" + content
|
|
@@ -68,8 +70,10 @@ class Webserver:
|
|
|
68
70
|
for data in data_array:
|
|
69
71
|
data = data.split(b"\r\n\r\n")
|
|
70
72
|
data_names = data[0].decode("utf-8").split("; ")
|
|
73
|
+
|
|
71
74
|
if data_names[0] == "Content-Disposition: form-data":
|
|
72
75
|
key_name = data_names[1].split("=")[1][1:-1]
|
|
76
|
+
|
|
73
77
|
if len(data_names) == 2:
|
|
74
78
|
data_value = data[1].split(b"\r\n")[0]
|
|
75
79
|
body[key_name] = unquote_plus(data_value.decode("utf-8"))
|
|
@@ -92,7 +96,6 @@ class Webserver:
|
|
|
92
96
|
if "Content-Type" in meta_data:
|
|
93
97
|
content_type = meta_data["Content-Type"]
|
|
94
98
|
|
|
95
|
-
|
|
96
99
|
if key_name in body:
|
|
97
100
|
body[key_name] = [body[key_name]]
|
|
98
101
|
body[key_name].append({"file_name": file_name, "content_type": content_type,"content": base64.encodebytes(data_value).decode("utf-8").replace(
|
|
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.112 → tina4_python-0.2.114}/tina4_python/public/js/reconnecting-websocket.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/public/swagger/oauth2-redirect.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/en/LC_MESSAGES/messages.mo
RENAMED
|
File without changes
|
{tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/en/LC_MESSAGES/messages.po
RENAMED
|
File without changes
|
{tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/fr/LC_MESSAGES/messages.mo
RENAMED
|
File without changes
|
{tina4_python-0.2.112 → tina4_python-0.2.114}/tina4_python/translations/fr/LC_MESSAGES/messages.po
RENAMED
|
File without changes
|