labfreed 1.0.0b27__tar.gz → 1.0.0b28__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.

Potentially problematic release.


This version of labfreed might be problematic. Click here for more details.

Files changed (105) hide show
  1. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/PKG-INFO +1 -1
  2. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/__init__.py +1 -1
  3. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/api_data_models/request.py +5 -1
  4. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/attribute_server_factory.py +5 -3
  5. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/py_attributes.py +1 -1
  6. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id/url_parser.py +1 -1
  7. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/.github/workflows/pypi-publish.yml +0 -0
  9. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/.github/workflows/run-tests.yml +0 -0
  10. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/CHANGELOG.md +0 -0
  11. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/LICENSE +0 -0
  12. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/README.md +0 -0
  13. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/app/app_infrastructure.py +0 -0
  14. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/app/formatted_print.py +0 -0
  15. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/app/pac_info/pac_info.py +0 -0
  16. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/app_factory.py +0 -0
  17. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/lib/attribute.py +0 -0
  18. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/lib/bp_landing_page.py +0 -0
  19. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/lib/utils.py +0 -0
  20. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cancel.svg +0 -0
  21. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DC.svg +0 -0
  22. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DM.svg +0 -0
  23. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DP.svg +0 -0
  24. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DR.svg +0 -0
  25. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DS.svg +0 -0
  26. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MC.svg +0 -0
  27. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MD.svg +0 -0
  28. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MS.svg +0 -0
  29. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MX.svg +0 -0
  30. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/external-link.svg +0 -0
  31. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/logo.svg +0 -0
  32. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/menu.svg +0 -0
  33. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/search.svg +0 -0
  34. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/styles.css +0 -0
  35. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/styles_brand.css +0 -0
  36. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/styles_pac_info.css +0 -0
  37. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/flash_error_messages.jinja.html +0 -0
  38. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/footer.jinja.html +0 -0
  39. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/main.jinja.html +0 -0
  40. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/navbar.jinja.html +0 -0
  41. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/base-components.jinja.html +0 -0
  42. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/card-components.jinja.html +0 -0
  43. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/card.jinja.html +0 -0
  44. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/pac_info.jinja.html +0 -0
  45. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_issuer_error.jinja.html +0 -0
  46. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_issuer_landing_page.jinja.html +0 -0
  47. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/labfreed_infrastructure.py +0 -0
  48. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/__init__.py +0 -0
  49. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/api_data_models/response.py +0 -0
  50. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/api_data_models/server_capabilities_response.py +0 -0
  51. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/client/client.py +0 -0
  52. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/client/client_attribute_group.py +0 -0
  53. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/excel_attribute_data_source.py +0 -0
  54. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/py_dict_data_source.py +0 -0
  55. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/__init__.py +0 -0
  56. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/attribute_data_sources.py +0 -0
  57. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/server.py +0 -0
  58. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/translation_data_sources.py +0 -0
  59. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_attributes/well_knonw_attribute_keys.py +0 -0
  60. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_cat/__init__.py +0 -0
  61. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_cat/category_base.py +0 -0
  62. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_cat/pac_cat.py +0 -0
  63. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_cat/predefined_categories.py +0 -0
  64. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id/__init__.py +0 -0
  65. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id/extension.py +0 -0
  66. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id/id_segment.py +0 -0
  67. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id/pac_id.py +0 -0
  68. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id/url_serializer.py +0 -0
  69. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/__init__.py +0 -0
  70. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/cit_v1.py +0 -0
  71. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/resolver.py +0 -0
  72. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/resolver_config.py +0 -0
  73. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/resolver_config_common.py +0 -0
  74. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/services.py +0 -0
  75. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/qr/__init__.py +0 -0
  76. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/qr/generate_qr.py +0 -0
  77. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/__init__.py +0 -0
  78. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/pythonic/__init__.py +0 -0
  79. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/pythonic/data_table.py +0 -0
  80. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/pythonic/pyTREX.py +0 -0
  81. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/pythonic/quantity.py +0 -0
  82. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/table_segment.py +0 -0
  83. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/trex.py +0 -0
  84. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/trex_base_models.py +0 -0
  85. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/trex/value_segments.py +0 -0
  86. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/utilities/base36.py +0 -0
  87. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/utilities/ensure_utc_time.py +0 -0
  88. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/utilities/translations.py +0 -0
  89. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_extensions/__init__.py +0 -0
  90. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_extensions/default_extension_interpreters.py +0 -0
  91. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_extensions/display_name_extension.py +0 -0
  92. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_extensions/text_base36_extension.py +0 -0
  93. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_extensions/trex_extension.py +0 -0
  94. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_keys/gs1/__init__.py +0 -0
  95. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_keys/gs1/gs1_ai_enum_sorted.py +0 -0
  96. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_keys/labfreed/well_known_keys.py +0 -0
  97. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_keys/unece/UneceUnits.json +0 -0
  98. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_keys/unece/__init__.py +0 -0
  99. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed/well_known_keys/unece/unece_units.py +0 -0
  100. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/ble_central.py +0 -0
  101. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/ble_peripheral.py +0 -0
  102. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/ble_uuid.py +0 -0
  103. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/pac_disco_demo.py +0 -0
  104. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/pyproject.toml +0 -0
  105. {labfreed-1.0.0b27 → labfreed-1.0.0b28}/tst_attr.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labfreed
3
- Version: 1.0.0b27
3
+ Version: 1.0.0b28
4
4
  Summary: Python implementation of LabFREED building blocks
5
5
  Author-email: Reto Thürer <thuerer.r@buchi.com>
6
6
  Requires-Python: >=3.11
@@ -2,7 +2,7 @@
2
2
  Python implementation of LabFREED building blocks
3
3
  '''
4
4
 
5
- __version__ = "1.0.0b27"
5
+ __version__ = "1.0.0b28"
6
6
 
7
7
  from labfreed.pac_id import * # noqa: F403
8
8
  from labfreed.pac_cat import * # noqa: F403
@@ -1,3 +1,4 @@
1
+ import re
1
2
  from typing import Any, Self
2
3
  from urllib.parse import unquote
3
4
  from werkzeug.datastructures import LanguageAccept
@@ -27,6 +28,9 @@ class AttributeRequestData(LabFREED_BaseModel):
27
28
 
28
29
  @classmethod
29
30
  def from_http_request(cls, pac_id:str, params:dict, headers:dict):
31
+ # Azure seems to meddle with double slashes in a path, even if url encoded. This is to rectify this behaviour and add back a second slash if necessary
32
+ pac_id = re.sub('HTTPS:/{1,2}', 'HTTPS://', pac_id, re.IGNORECASE)
33
+
30
34
  restrict_to_attribute_groups = params.get(ATTR_GROUPS)
31
35
  if restrict_to_attribute_groups == '':
32
36
  restrict_to_attribute_groups = None
@@ -84,7 +88,7 @@ class AttributeRequestData(LabFREED_BaseModel):
84
88
  self._add_validation_message(
85
89
  source="pac_id",
86
90
  level = ValidationMsgLevel.ERROR,
87
- msg='{self.pac_id} is not a valid PAC-ID'
91
+ msg=f'{self.pac_id} is not a valid PAC-ID'
88
92
  )
89
93
 
90
94
  if not self.is_valid:
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import Any, Protocol
5
5
  from urllib.parse import unquote, unquote_plus
6
6
 
7
- from flask import Blueprint, current_app, redirect, url_for
7
+ from flask import Blueprint, current_app, redirect, url_for, send_from_directory
8
8
  from labfreed.pac_attributes.api_data_models.request import AttributeRequestData
9
9
  from labfreed.pac_attributes.server.server import AttributeGroupDataSource, AttributeServerRequestHandler, InvalidRequestError, TranslationDataSource
10
10
 
@@ -76,8 +76,6 @@ class AttributeFlaskApp(Flask):
76
76
 
77
77
  @bp.get("/<path:pac_id_url_encoded>", strict_slashes=False)
78
78
  def handle_attribute_request(pac_id_url_encoded):
79
- if pac_id_url_encoded in ['favicon.ico']:
80
- return ''
81
79
 
82
80
  if authenticator and not authenticator(request):
83
81
  return Response(
@@ -155,6 +153,10 @@ class AttributeFlaskApp(Flask):
155
153
  '''
156
154
 
157
155
  return response
156
+
157
+ @bp.get("/favicon.<ext>", strict_slashes=False)
158
+ def favicon(ext):
159
+ return send_from_directory("static", f"favicon.{ext}")
158
160
 
159
161
  return bp
160
162
 
@@ -91,7 +91,7 @@ class pyAttributes(RootModel[list[pyAttribute]]):
91
91
  items.append(BoolAttributeItemsElement(value=value))
92
92
 
93
93
  elif isinstance(value, datetime | date | time):
94
- if not value.tzinfo:
94
+ if getattr(value, 'tzinfo', None) and not value.tzinfo:
95
95
  warnings.warn(f'No timezone given for {value}. Assuming it is in UTC.')
96
96
  value.replace(tzinfo=UTC)
97
97
  items.append(DateTimeAttributeItemsElement(value=value))
@@ -82,7 +82,7 @@ class PAC_Parser():
82
82
  @classmethod
83
83
  def _parse_pac_id(cls,id_str:str) -> "PAC_ID":
84
84
  # m = re.match('(HTTPS://)?(PAC.)?(?P<issuer>.+?\..+?)/(?P<identifier>.*)', id_str)
85
- m = re.match('(HTTPS://)?(PAC.)?(?P<issuer>.+?)/(?P<identifier>.*)', id_str, re.IGNORECASE)
85
+ m = re.match('(HTTPS://)?(PAC\.)?(?P<issuer>.+?)/(?P<identifier>.*)', id_str, re.IGNORECASE)
86
86
  if not m:
87
87
  raise LabFREED_ValidationError(f'{id_str} does not match the pattern expected for PAC-ID')
88
88
  d = m.groupdict()
File without changes
File without changes
File without changes
File without changes
File without changes