labfreed 1.0.0a22__tar.gz → 1.0.0a23__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 (110) hide show
  1. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/PKG-INFO +1 -1
  2. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/__init__.py +1 -1
  3. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/app_factory.py +3 -0
  4. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/pythonic/py_attributes.py +1 -1
  5. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/pythonic/quantity.py +10 -0
  6. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  7. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/.github/workflows/pypi-publish.yml +0 -0
  8. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/.github/workflows/run-tests.yml +0 -0
  9. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/CHANGELOG.md +0 -0
  10. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/LICENSE +0 -0
  11. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/README.md +0 -0
  12. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/app_infrastructure.py +0 -0
  13. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/formatted_print.py +0 -0
  14. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/pac_info/html_renderer/external-link.svg +0 -0
  15. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/pac_info/html_renderer/macros.jinja.html +0 -0
  16. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/pac_info/html_renderer/pac-info-style.css +0 -0
  17. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/pac_info/html_renderer/pac_info.jinja.html +0 -0
  18. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/pac_info/html_renderer/pac_info_card.jinja.html +0 -0
  19. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/app/pac_info/pac_info.py +0 -0
  20. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/lib/attribute.py +0 -0
  21. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/lib/bp_landing_page.py +0 -0
  22. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/lib/utils.py +0 -0
  23. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cancel.svg +0 -0
  24. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DC.svg +0 -0
  25. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DM.svg +0 -0
  26. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DP.svg +0 -0
  27. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DR.svg +0 -0
  28. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DS.svg +0 -0
  29. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MC.svg +0 -0
  30. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MD.svg +0 -0
  31. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MS.svg +0 -0
  32. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MX.svg +0 -0
  33. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/external-link.svg +0 -0
  34. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/logo.svg +0 -0
  35. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/menu.svg +0 -0
  36. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/search.svg +0 -0
  37. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/styles.css +0 -0
  38. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/styles_brand.css +0 -0
  39. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/static/styles_pac_info.css +0 -0
  40. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/flash_error_messages.jinja.html +0 -0
  41. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/footer.jinja.html +0 -0
  42. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/main.jinja.html +0 -0
  43. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/navbar.jinja.html +0 -0
  44. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/base-components.jinja.html +0 -0
  45. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/card-components.jinja.html +0 -0
  46. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/card.jinja.html +0 -0
  47. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/pac_info.jinja.html +0 -0
  48. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_issuer_error.jinja.html +0 -0
  49. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_issuer_landing_page.jinja.html +0 -0
  50. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/labfreed_infrastructure.py +0 -0
  51. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/__init__.py +0 -0
  52. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/api_data_models/request.py +0 -0
  53. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/api_data_models/response.py +0 -0
  54. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/api_data_models/server_capabilities_response.py +0 -0
  55. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/client/__init__.py +0 -0
  56. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/client/attribute_cache.py +0 -0
  57. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/client/client.py +0 -0
  58. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/pythonic/attribute_server_factory.py +0 -0
  59. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/pythonic/excel_attribute_data_source.py +0 -0
  60. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/pythonic/py_dict_data_source.py +0 -0
  61. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/server/__init__.py +0 -0
  62. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/server/attribute_data_sources.py +0 -0
  63. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/server/server.py +0 -0
  64. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/server/translation_data_sources.py +0 -0
  65. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_attributes/well_knonw_attribute_keys.py +0 -0
  66. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_cat/__init__.py +0 -0
  67. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_cat/category_base.py +0 -0
  68. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_cat/pac_cat.py +0 -0
  69. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_cat/predefined_categories.py +0 -0
  70. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id/__init__.py +0 -0
  71. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id/extension.py +0 -0
  72. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id/id_segment.py +0 -0
  73. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id/pac_id.py +0 -0
  74. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id/url_parser.py +0 -0
  75. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id/url_serializer.py +0 -0
  76. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id_resolver/__init__.py +0 -0
  77. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id_resolver/cit_v1.py +0 -0
  78. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id_resolver/resolver.py +0 -0
  79. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id_resolver/resolver_config.py +0 -0
  80. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id_resolver/resolver_config_common.py +0 -0
  81. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/pac_id_resolver/services.py +0 -0
  82. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/qr/__init__.py +0 -0
  83. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/qr/generate_qr.py +0 -0
  84. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/__init__.py +0 -0
  85. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/pythonic/__init__.py +0 -0
  86. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/pythonic/data_table.py +0 -0
  87. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/pythonic/pyTREX.py +0 -0
  88. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/table_segment.py +0 -0
  89. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/trex.py +0 -0
  90. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/trex_base_models.py +0 -0
  91. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/trex/value_segments.py +0 -0
  92. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/utilities/base36.py +0 -0
  93. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/utilities/ensure_utc_time.py +0 -0
  94. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/utilities/translations.py +0 -0
  95. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_extensions/__init__.py +0 -0
  96. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_extensions/default_extension_interpreters.py +0 -0
  97. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_extensions/display_name_extension.py +0 -0
  98. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_extensions/text_base36_extension.py +0 -0
  99. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_extensions/trex_extension.py +0 -0
  100. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_keys/gs1/__init__.py +0 -0
  101. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_keys/gs1/gs1_ai_enum_sorted.py +0 -0
  102. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_keys/labfreed/well_known_keys.py +0 -0
  103. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_keys/unece/UneceUnits.json +0 -0
  104. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_keys/unece/__init__.py +0 -0
  105. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed/well_known_keys/unece/unece_units.py +0 -0
  106. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed_experimental/pac_disco/ble_central.py +0 -0
  107. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed_experimental/pac_disco/ble_peripheral.py +0 -0
  108. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed_experimental/pac_disco/ble_uuid.py +0 -0
  109. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/labfreed_experimental/pac_disco/pac_disco_demo.py +0 -0
  110. {labfreed-1.0.0a22 → labfreed-1.0.0a23}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labfreed
3
- Version: 1.0.0a22
3
+ Version: 1.0.0a23
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.0a22"
5
+ __version__ = "1.0.0a23"
6
6
 
7
7
  from labfreed.pac_id import * # noqa: F403
8
8
  from labfreed.pac_cat import * # noqa: F403
@@ -86,6 +86,9 @@ class IssuerFlaskAppFactory():
86
86
  feature_flags:dict|None = None):
87
87
 
88
88
  app = Flask(__name__, static_folder=None, static_url_path='/static')
89
+
90
+ if not feature_flags:
91
+ feature_flags = dict()
89
92
  app.config['feature_flags'] = feature_flags
90
93
 
91
94
  app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)
@@ -112,7 +112,7 @@ class pyAttributes(RootModel[list[pyAttribute]]):
112
112
 
113
113
  elif isinstance(first_value, str):
114
114
  # capture quantities in the form of "100.0e5 g/L"
115
- if Quantity.from_str_with_unit(first_value):
115
+ if Quantity.can_convert_to_quantity(first_value):
116
116
  values = []
117
117
  for v in value_list:
118
118
  q = Quantity.from_str_with_unit(v)
@@ -65,9 +65,19 @@ class Quantity(BaseModel):
65
65
  q = Quantity(value = num_val, unit=unit, log_least_significant_digit=log_least_significant_digit)
66
66
  return q
67
67
 
68
+ @classmethod
69
+ def can_convert_to_quantity(cls, value:str):
70
+ ''' assumes value and unit are separated by " " '''
71
+ m = re.match(r'^\s*(?P<mantissa>-?\d+(\.\d+)?)([Ee]-?(?P<exponent>\d+))?\s+(?P<unit>\S+)\s*$', value)
72
+ return bool(m)
73
+
68
74
  @classmethod
69
75
  def from_str_with_unit(cls, value:str):
70
76
  ''' assumes value and unit are separated by " " '''
77
+ m = re.match(r'^\s*(?P<mantissa>-?\d+(\.\d+)?)([Ee]-?(?P<exponent>\d+))?\s+(?P<unit>\S+)\s*$', value)
78
+ if not m:
79
+ print(f'{value} cannot be converted to Quantity')
80
+ return None
71
81
  try:
72
82
  parts = value.strip().split(' ', 1)
73
83
  if len(parts) == 2:
File without changes
File without changes
File without changes
File without changes