tina4-python 0.2.160__tar.gz → 0.2.162__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.160 → tina4_python-0.2.162}/PKG-INFO +1 -1
  2. {tina4_python-0.2.160 → tina4_python-0.2.162}/pyproject.toml +1 -1
  3. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Webserver.py +14 -4
  4. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Websocket.py +2 -2
  5. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/__init__.py +13 -2
  6. {tina4_python-0.2.160 → tina4_python-0.2.162}/.gitignore +0 -0
  7. {tina4_python-0.2.160 → tina4_python-0.2.162}/README.md +0 -0
  8. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Api.py +0 -0
  9. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Auth.py +0 -0
  10. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/CRUD.py +0 -0
  11. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Constant.py +0 -0
  12. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Database.py +0 -0
  13. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/DatabaseResult.py +0 -0
  14. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/DatabaseTypes.py +0 -0
  15. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Debug.py +0 -0
  16. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Env.py +0 -0
  17. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/FieldTypes.py +0 -0
  18. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/HtmlElement.py +0 -0
  19. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Localization.py +0 -0
  20. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Messages.py +0 -0
  21. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/MiddleWare.py +0 -0
  22. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Migration.py +0 -0
  23. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/ORM.py +0 -0
  24. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Queue.py +0 -0
  25. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Request.py +0 -0
  26. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Response.py +0 -0
  27. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Router.py +0 -0
  28. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Session.py +0 -0
  29. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/ShellColors.py +0 -0
  30. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Swagger.py +0 -0
  31. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Template.py +0 -0
  32. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/Testing.py +0 -0
  33. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/WSDL.py +0 -0
  34. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/cli.py +0 -0
  35. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/messages.pot +0 -0
  36. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/css/readme.md +0 -0
  37. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/favicon.ico +0 -0
  38. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/images/403.png +0 -0
  39. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/images/404.png +0 -0
  40. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/images/500.png +0 -0
  41. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/images/logo.png +0 -0
  42. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/images/readme.md +0 -0
  43. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/js/readme.md +0 -0
  44. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/js/reconnecting-websocket.js +0 -0
  45. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/js/tina4helper.js +0 -0
  46. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/swagger/index.html +0 -0
  47. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
  48. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/templates/components/crud.twig +0 -0
  49. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/templates/errors/403.twig +0 -0
  50. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/templates/errors/404.twig +0 -0
  51. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/templates/errors/500.twig +0 -0
  52. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/templates/readme.md +0 -0
  53. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
  54. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
  55. {tina4_python-0.2.160 → tina4_python-0.2.162}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
  56. {tina4_python-0.2.160 → tina4_python-0.2.162}/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.160
3
+ Version: 0.2.162
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.160"
3
+ version = "0.2.162"
4
4
  description = "Tina4Python - This is not another framework for Python"
5
5
  authors = [
6
6
  {name = "Andre van Zuydam",email = "andrevanzuydam@gmail.com"}
@@ -317,7 +317,17 @@ class Webserver:
317
317
  self.send_header("Access-Control-Allow-Credentials", "true", headers)
318
318
 
319
319
  headers_bytes = await self.get_headers(headers, self.response_protocol, HTTP_OK)
320
- return headers_bytes if not asgi_response else (None, headers)
320
+ class _Tina4Response:
321
+ def __init__(self, content: str = "", http_code: int = HTTP_OK, content_type: str = "text/plain", headers: dict | None = None):
322
+ self.content = content
323
+ self.http_code = http_code
324
+ self.content_type = content_type
325
+ self.headers = headers or {}
326
+
327
+ if not asgi_response:
328
+ return headers_bytes
329
+
330
+ return _Tina4Response(content="", http_code=HTTP_OK, content_type="text/plain", headers={}), headers
321
331
 
322
332
  # ------------------------------------------------------------------
323
333
  # Query string parsing with nested support
@@ -534,9 +544,9 @@ class Webserver:
534
544
  # Route or WebSocket
535
545
  # ------------------------------------------------------------------
536
546
  if "sec-websocket-key" in lowercase_headers:
537
- await self.get_response(self.method, reader, writer)
547
+ await self.get_response(self.method, scope={'type': 'websocket'}, reader=reader, writer=writer)
538
548
  else:
539
- response_bytes = await self.get_response(self.method, reader, writer)
549
+ response_bytes = await self.get_response(self.method, scope={'type': 'http'}, reader=reader, writer=writer)
540
550
  if response_bytes:
541
551
  writer.write(response_bytes)
542
552
  await writer.drain()
@@ -592,4 +602,4 @@ class Webserver:
592
602
  """
593
603
  if self.server:
594
604
  self.server.close()
595
- self.running = False
605
+ self.running = False
@@ -32,12 +32,12 @@ class Websocket:
32
32
  else:
33
33
  if os.name == "nt":
34
34
  connection = await self.server.AioServer.accept(
35
- sock=TransportSocket(self.request.transport.transport._sock), # not working properly
35
+ sock=TransportSocket(self.request.asgi_writer.transport._sock), # not working properly
36
36
  headers=self.request.headers
37
37
  )
38
38
  else:
39
39
  connection = await self.server.AioServer.accept(
40
- sock=self.request.transport.get_extra_info('socket').dup(),
40
+ sock=self.request.asgi_writer.get_extra_info('socket').dup(),
41
41
  headers=self.request.headers
42
42
  )
43
43
  return connection
@@ -413,8 +413,19 @@ async def app(scope, receive, send):
413
413
  if message["type"] != "websocket":
414
414
  response_headers = []
415
415
  for header in tina4_headers:
416
- header = header.split(":")
417
- response_headers.append([header[0].strip().encode(), header[1].strip().encode()])
416
+ # ensure header is a str
417
+ if isinstance(header, bytes):
418
+ header = header.decode()
419
+ else:
420
+ header = str(header)
421
+
422
+ # split only on the first ':' to preserve ':' in values (e.g. URLs with ports)
423
+ name, sep, value = header.partition(":")
424
+ if not sep:
425
+ # malformed header, skip it
426
+ continue
427
+
428
+ response_headers.append([name.strip().encode(), value.lstrip().encode()])
418
429
 
419
430
  await send({
420
431
  'type': 'http.response.start',
File without changes