labfreed 1.0.0b26__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.0b26 → labfreed-1.0.0b28}/PKG-INFO +1 -1
  2. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/__init__.py +1 -1
  3. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/api_data_models/request.py +12 -4
  4. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/attribute_server_factory.py +5 -3
  5. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/py_attributes.py +7 -1
  6. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id/url_parser.py +1 -1
  7. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/tst_attr.py +15 -14
  8. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/.github/workflows/pypi-publish.yml +0 -0
  10. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/.github/workflows/run-tests.yml +0 -0
  11. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/CHANGELOG.md +0 -0
  12. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/LICENSE +0 -0
  13. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/README.md +0 -0
  14. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/app/app_infrastructure.py +0 -0
  15. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/app/formatted_print.py +0 -0
  16. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/app/pac_info/pac_info.py +0 -0
  17. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/app_factory.py +0 -0
  18. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/lib/attribute.py +0 -0
  19. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/lib/bp_landing_page.py +0 -0
  20. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/lib/utils.py +0 -0
  21. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cancel.svg +0 -0
  22. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DC.svg +0 -0
  23. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DM.svg +0 -0
  24. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DP.svg +0 -0
  25. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DR.svg +0 -0
  26. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-DS.svg +0 -0
  27. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MC.svg +0 -0
  28. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MD.svg +0 -0
  29. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MS.svg +0 -0
  30. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/cat-MX.svg +0 -0
  31. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/external-link.svg +0 -0
  32. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/logo.svg +0 -0
  33. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/menu.svg +0 -0
  34. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/search.svg +0 -0
  35. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/styles.css +0 -0
  36. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/styles_brand.css +0 -0
  37. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/static/styles_pac_info.css +0 -0
  38. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/flash_error_messages.jinja.html +0 -0
  39. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/footer.jinja.html +0 -0
  40. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/main.jinja.html +0 -0
  41. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/navbar.jinja.html +0 -0
  42. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/base-components.jinja.html +0 -0
  43. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/card-components.jinja.html +0 -0
  44. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/card.jinja.html +0 -0
  45. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_info/pac_info.jinja.html +0 -0
  46. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_issuer_error.jinja.html +0 -0
  47. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_extended/pac_issuer_lib/templates/pac_issuer_landing_page.jinja.html +0 -0
  48. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/labfreed_infrastructure.py +0 -0
  49. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/__init__.py +0 -0
  50. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/api_data_models/response.py +0 -0
  51. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/api_data_models/server_capabilities_response.py +0 -0
  52. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/client/client.py +0 -0
  53. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/client/client_attribute_group.py +0 -0
  54. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/excel_attribute_data_source.py +0 -0
  55. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/pythonic/py_dict_data_source.py +0 -0
  56. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/__init__.py +0 -0
  57. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/attribute_data_sources.py +0 -0
  58. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/server.py +0 -0
  59. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/server/translation_data_sources.py +0 -0
  60. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_attributes/well_knonw_attribute_keys.py +0 -0
  61. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_cat/__init__.py +0 -0
  62. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_cat/category_base.py +0 -0
  63. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_cat/pac_cat.py +0 -0
  64. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_cat/predefined_categories.py +0 -0
  65. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id/__init__.py +0 -0
  66. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id/extension.py +0 -0
  67. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id/id_segment.py +0 -0
  68. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id/pac_id.py +0 -0
  69. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id/url_serializer.py +0 -0
  70. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/__init__.py +0 -0
  71. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/cit_v1.py +0 -0
  72. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/resolver.py +0 -0
  73. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/resolver_config.py +0 -0
  74. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/resolver_config_common.py +0 -0
  75. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/pac_id_resolver/services.py +0 -0
  76. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/qr/__init__.py +0 -0
  77. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/qr/generate_qr.py +0 -0
  78. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/__init__.py +0 -0
  79. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/pythonic/__init__.py +0 -0
  80. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/pythonic/data_table.py +0 -0
  81. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/pythonic/pyTREX.py +0 -0
  82. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/pythonic/quantity.py +0 -0
  83. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/table_segment.py +0 -0
  84. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/trex.py +0 -0
  85. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/trex_base_models.py +0 -0
  86. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/trex/value_segments.py +0 -0
  87. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/utilities/base36.py +0 -0
  88. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/utilities/ensure_utc_time.py +0 -0
  89. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/utilities/translations.py +0 -0
  90. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_extensions/__init__.py +0 -0
  91. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_extensions/default_extension_interpreters.py +0 -0
  92. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_extensions/display_name_extension.py +0 -0
  93. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_extensions/text_base36_extension.py +0 -0
  94. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_extensions/trex_extension.py +0 -0
  95. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_keys/gs1/__init__.py +0 -0
  96. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_keys/gs1/gs1_ai_enum_sorted.py +0 -0
  97. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_keys/labfreed/well_known_keys.py +0 -0
  98. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_keys/unece/UneceUnits.json +0 -0
  99. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_keys/unece/__init__.py +0 -0
  100. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed/well_known_keys/unece/unece_units.py +0 -0
  101. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/ble_central.py +0 -0
  102. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/ble_peripheral.py +0 -0
  103. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/ble_uuid.py +0 -0
  104. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/labfreed_experimental/pac_disco/pac_disco_demo.py +0 -0
  105. {labfreed-1.0.0b26 → labfreed-1.0.0b28}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labfreed
3
- Version: 1.0.0b26
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.0b26"
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,14 +28,21 @@ 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
33
37
  if restrict_to_attribute_groups:
34
38
  restrict_to_attribute_groups = restrict_to_attribute_groups.split(',')
35
39
 
36
- fwd_lkp = params.get(ATTR_GROUPS_FWD_LKP,'true')
37
- do_forward_lookup = fwd_lkp.lower() not in ['false', 'no', '0', 'n', 'off']
40
+ fwd_lkp = params.get(ATTR_GROUPS_FWD_LKP, True)
41
+ if fwd_lkp is True:
42
+ do_forward_lookup = True
43
+ else:
44
+ do_fwd_lookup = fwd_lkp.lower() not in ['false', 'no', '0', 'n', 'off']
45
+
38
46
  lang_hdr = headers.get('Accept-Language')
39
47
  language_preferences: LanguageAccept = parse_accept_header(lang_hdr, LanguageAccept)
40
48
  out = cls(pac_id=pac_id,
@@ -80,7 +88,7 @@ class AttributeRequestData(LabFREED_BaseModel):
80
88
  self._add_validation_message(
81
89
  source="pac_id",
82
90
  level = ValidationMsgLevel.ERROR,
83
- msg='{self.pac_id} is not a valid PAC-ID'
91
+ msg=f'{self.pac_id} is not a valid PAC-ID'
84
92
  )
85
93
 
86
94
  if not self.is_valid:
@@ -91,7 +99,7 @@ class AttributeRequestData(LabFREED_BaseModel):
91
99
  def language_preference_http_header(self) -> dict[str, str]:
92
100
  if not self.language_preferences:
93
101
  return {}
94
- headers={'Accept-Language': LanguageAccept(lq).to_header()}
102
+ headers={'Accept-Language': LanguageAccept(self.language_preferences).to_header()}
95
103
  return headers
96
104
 
97
105
  def request_params(self) -> dict[str, Any]:
@@ -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
 
@@ -5,6 +5,7 @@ import logging
5
5
  from typing import Literal
6
6
  from enum import Enum
7
7
  import warnings
8
+ from deprecated import deprecated
8
9
  from pydantic import RootModel, field_validator, model_validator
9
10
 
10
11
  from labfreed.labfreed_infrastructure import LabFREED_BaseModel
@@ -44,6 +45,11 @@ class pyAttribute(LabFREED_BaseModel):
44
45
  '''helper function to more conveniently iterate over value elements, even if it's scalar'''
45
46
  return self.values if isinstance(self.values, list) else [self.values]
46
47
 
48
+ @property
49
+ @deprecated
50
+ def value(self):
51
+ return self.values
52
+
47
53
  @model_validator(mode='before')
48
54
  def value_to_values(cls, d:dict):
49
55
  value =d.pop('value', None)
@@ -85,7 +91,7 @@ class pyAttributes(RootModel[list[pyAttribute]]):
85
91
  items.append(BoolAttributeItemsElement(value=value))
86
92
 
87
93
  elif isinstance(value, datetime | date | time):
88
- if not value.tzinfo:
94
+ if getattr(value, 'tzinfo', None) and not value.tzinfo:
89
95
  warnings.warn(f'No timezone given for {value}. Assuming it is in UTC.')
90
96
  value.replace(tzinfo=UTC)
91
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()
@@ -17,32 +17,33 @@ import threading
17
17
  from werkzeug.serving import make_server
18
18
 
19
19
 
20
-
21
-
20
+ MfgDate = "https://labfreed.org/terms/example/MfgDate"
21
+ MaxWeight = "https://labfreed.org/terms/example/MaxWeight"
22
+ CalWeight = "https://labfreed.org/terms/example/CalWeight"
23
+ NominalWeight = "https://labfreed.org/terms/example/NominalWeight"
22
24
 
23
25
  data_source = pyDict_DataSource(attribute_group_key='ProductionData',
24
26
  data = {
25
27
  "HTTPS://PAC.METTORIUS.COM/-MD/BAL500/12340": pyAttributes([
26
- pyAttribute(key="MfgDate", value=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
27
- pyAttribute(key="MaxWeight", values=Quantity(value=100.00, unit='g', log_least_significant_digit=-2)),
28
- pyAttribute(key="CalWeight", values=pyReference('HTTPS://PAC.METTORIUS.COM/-MD/CALWEIGH/A00002')),
29
- pyAttribute(key="multitext", values=["foo", "bar"])
28
+ pyAttribute(key=MfgDate, value=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
29
+ pyAttribute(key=MaxWeight, values=Quantity(value=100.00, unit='g', log_least_significant_digit=-2)),
30
+ pyAttribute(key=CalWeight, values=pyReference('HTTPS://PAC.METTORIUS.COM/-MD/CALWEIGH/A00002'))
30
31
  ]),
31
32
  "HTTPS://PAC.METTORIUS.COM/-MD/BAL500/000001": pyAttributes([
32
- pyAttribute(key="MfgDate", value=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
33
- pyAttribute(key="MaxWeight", values=Quantity(value=100.00, unit='g', log_least_significant_digit=-2)),
34
- pyAttribute(key="CalWeight", values=pyReference('HTTPS://PAC.METTORIUS.COM/-MD/CALWEIGH/A00002'))
33
+ pyAttribute(key=MfgDate, value=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
34
+ pyAttribute(key=MaxWeight, values=Quantity(value=100.00, unit='g', log_least_significant_digit=-2)),
35
+ pyAttribute(key=CalWeight, values=pyReference('HTTPS://PAC.METTORIUS.COM/-MD/CALWEIGH/A00002'))
35
36
  ]),
36
37
  "HTTPS://PAC.METTORIUS.COM/-MD/BAL500/12341": pyAttributes([
37
- pyAttribute(key="MfgDate", values=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
38
- pyAttribute(key="MaxWeight", values=Quantity(value=111.00, unit='g', log_least_significant_digit=2))
38
+ pyAttribute(key=MfgDate, values=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
39
+ pyAttribute(key=MaxWeight, values=Quantity(value=111.00, unit='g', log_least_significant_digit=2))
39
40
  ]),
40
41
  "HTTPS://PAC.METTORIUS.COM/-MD/BAL500/12342": pyAttributes([
41
- pyAttribute(key="MfgDate", values=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
42
- pyAttribute(key="MaxWeight", values=Quantity(value=100.00, unit='g'))
42
+ pyAttribute(key=MfgDate, values=datetime(year=2015, month=10, day=1, hour=10, minute=12)),
43
+ pyAttribute(key=MaxWeight, values=Quantity(value=100.00, unit='g'))
43
44
  ]),
44
45
  "HTTPS://PAC.METTORIUS.COM/-MD/CALWEIGH/A00002": pyAttributes([
45
- pyAttribute(key="NominalWeight", values=Quantity(value=50.00, unit='g'))
46
+ pyAttribute(key=NominalWeight, values=Quantity(value=50.00, unit='g'))
46
47
  ])
47
48
  }
48
49
  )
File without changes
File without changes
File without changes
File without changes