labfreed 1.0.0a11__py3-none-any.whl → 1.0.0a13__py3-none-any.whl

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.
labfreed/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
  Python implementation of LabFREED building blocks
3
3
  '''
4
4
 
5
- __version__ = "1.0.0a11"
5
+ __version__ = "1.0.0a13"
6
6
 
7
7
  from labfreed.pac_id import * # noqa: F403
8
8
  from labfreed.pac_cat import * # noqa: F403
@@ -39,7 +39,7 @@ class Labfreed_App_Infrastructure():
39
39
  cit = cit_from_str(cit)
40
40
  if not cit:
41
41
  raise ValueError('the cit could not be parsed. Neither as v1 or v2')
42
- self._resolver._cits.append(cit)
42
+ self._resolver._cits.add(cit)
43
43
 
44
44
 
45
45
  def process_pac(self, pac_url, markup=None):
@@ -207,7 +207,7 @@ class Processor_Abstract(PredefinedCategory, ABC):
207
207
 
208
208
  @model_validator(mode='after')
209
209
  def _validate_mandatory_fields(self):
210
- if not self.id:
210
+ if not self.processor_instance:
211
211
  self._add_validation_message(
212
212
  source=f"Category {self.key}",
213
213
  level = ValidationMsgLevel.ERROR,
@@ -233,6 +233,26 @@ class Processor_Misc(Processor_Abstract):
233
233
  ''' Category segments, which are not defined in the specification'''
234
234
 
235
235
 
236
+
237
+ class Misc(Category, ABC):
238
+ '''@private'''
239
+ key: str = Field(default='-X', frozen=True)
240
+ id:str|None = Field( alias='21')
241
+ additional_segments: list[IDSegment] = Field(default_factory=list, exclude=True)
242
+ ''' Category segments, which are not defined in the specification'''
243
+
244
+ @model_validator(mode='after')
245
+ def _validate_mandatory_fields(self):
246
+ if not self.id:
247
+ self._add_validation_message(
248
+ source=f"Category {self.key}",
249
+ level = ValidationMsgLevel.ERROR,
250
+ msg=f"Category key {self.key} is missing mandatory field 'ID'",
251
+ highlight_pattern = f"{self.key}"
252
+ )
253
+ return self
254
+
255
+
236
256
  category_key_to_class_map = {
237
257
  '-MD': Material_Device,
238
258
  '-MS': Material_Substance,
@@ -245,5 +265,6 @@ category_key_to_class_map = {
245
265
  '-DS': Data_Static,
246
266
  '-DX': Data_Misc,
247
267
  '-PS': Processor_Software,
248
- '-PX': Processor_Misc
268
+ '-PX': Processor_Misc,
269
+ '-X':Misc
249
270
  }
@@ -187,6 +187,16 @@ class CIT_v1(LabFREED_BaseModel):
187
187
  for e in self.entries:
188
188
  s += '\t'.join([e.service_name, e.application_intent, e.service_type.value, e.applicable_if, e.template_url]) + '\n'
189
189
  return s
190
+
191
+ # hash and equal are only used to avoid adding the same cit multiple times.
192
+ # we can live with some instances, where it does not work
193
+ def __hash__(self):
194
+ return self.model_dump_json().__hash__()
195
+
196
+ def __eq__(self, other):
197
+ if not isinstance(other, CIT_v1):
198
+ return False
199
+ return self.model_dump() == other.model_dump()
190
200
 
191
201
 
192
202
 
@@ -136,6 +136,17 @@ class CIT_v2(LabFREED_BaseModel):
136
136
  def __str__(self):
137
137
  yml = yaml.dump(self.model_dump() )
138
138
  return yml
139
+
140
+ # hash and equal are only used to avoid adding the same cit multiple times.
141
+ # we can live with some instances, where it does not work
142
+ def __hash__(self):
143
+ return self.model_dump_json().__hash__()
144
+
145
+ def __eq__(self, other):
146
+ if not isinstance(other, CIT_v2):
147
+ return False
148
+ return self.model_dump() == other.model_dump()
149
+
139
150
 
140
151
  def evaluate_pac_id(self, pac):
141
152
  pac_id_json = pac.to_dict()
@@ -61,7 +61,7 @@ class PAC_ID_Resolver():
61
61
  '''Initialize the resolver with coupling information tables'''
62
62
  if not cits:
63
63
  cits = []
64
- self._cits = cits
64
+ self._cits = set(cits)
65
65
 
66
66
 
67
67
  def resolve(self, pac_id:PAC_ID|str, check_service_status=True, use_issuer_cit=True) -> list[ServiceGroup]:
@@ -80,7 +80,7 @@ class PAC_ID_Resolver():
80
80
  cits = self._cits.copy()
81
81
  if use_issuer_cit:
82
82
  if issuer_cit := _get_issuer_cit(pac_id.issuer):
83
- cits.append(issuer_cit)
83
+ cits.add(issuer_cit)
84
84
 
85
85
  matches = []
86
86
  for cit in cits:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labfreed
3
- Version: 1.0.0a11
3
+ Version: 1.0.0a13
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
@@ -1,6 +1,6 @@
1
- labfreed/__init__.py,sha256=Av3vixNTNkUV8H8oi-fZ3iwAwsFx6NvLgisFqsGX5NA,339
1
+ labfreed/__init__.py,sha256=ZD4Xdez3D9Q8vES6HwnhQRgC-TUUk7jZbB2-aTkwgiE,339
2
2
  labfreed/labfreed_infrastructure.py,sha256=YZmU-kgopyB1tvpTR_k_uIt1Q2ezexMrWvu-HaP65IE,10104
3
- labfreed/labfreed_extended/app/app_infrastructure.py,sha256=F5UHHt8-r7jigQudOsJ-yV4lWKHFsxNhI4uGP_h53lE,4035
3
+ labfreed/labfreed_extended/app/app_infrastructure.py,sha256=mb1d4QXpwoVRjpn-gZeOmbZ4Uyp17TZy-2dp-849Z7A,4032
4
4
  labfreed/labfreed_extended/app/formatted_print.py,sha256=DcwWP0ix1e_wYNIdceIp6cETkJdG2DqpU8Gs3aZAL40,1930
5
5
  labfreed/labfreed_extended/app/pac_info/pac_info.py,sha256=hsJunO4adKcLi7PBZNAJYeqzOH31_j95JzuvEV8lNVY,6427
6
6
  labfreed/labfreed_extended/app/pac_info/html_renderer/external-link.svg,sha256=H5z9s4VvHq09UnHdqfrYNsx-Whljc0gE4qKJ6-3kfgQ,1158
@@ -27,7 +27,7 @@ labfreed/pac_attributes/server/translation_data_sources.py,sha256=axALOqfP840sOS
27
27
  labfreed/pac_cat/__init__.py,sha256=KNPtQzBD1XVohvG_ucOs7RJj-oi6biUTGB1k-T2o6pk,568
28
28
  labfreed/pac_cat/category_base.py,sha256=D7BzsdF0-JIgag5L2XZJRF4T2LOH5RLh1MMszflkmV8,2526
29
29
  labfreed/pac_cat/pac_cat.py,sha256=wcb_fhvgjS2xmqTsxS8_Oibvr1nsQt5zr8aUajLfK1E,5578
30
- labfreed/pac_cat/predefined_categories.py,sha256=U1Phgy-q4VKbMv3ruoa8uKKTlxkpZOKnWPqtHLzYUqU,11105
30
+ labfreed/pac_cat/predefined_categories.py,sha256=r2i1lab0pN1A1NJmqyZ0zRfI9AXUW1FCpE71DOIoRhQ,11922
31
31
  labfreed/pac_id/__init__.py,sha256=NGMbzkwQ4txKeT5pxdIZordwHO8J3_q84jzPanjKoHg,675
32
32
  labfreed/pac_id/extension.py,sha256=NgLexs1LbRMMm4ETrn5m4EY2iWoMDgOTb0UV556jatQ,2227
33
33
  labfreed/pac_id/id_segment.py,sha256=r5JU1SJuRXhZJJxy5T3xjrb598wIDTLpivSJhIUAzjQ,4526
@@ -36,9 +36,9 @@ labfreed/pac_id/url_parser.py,sha256=F3SPiscfbPwZ0uMzgirJ1vwgaXclN546lBW46Ywo3nk
36
36
  labfreed/pac_id/url_serializer.py,sha256=01LB30pNMBtv2rYHsiE_4Ga2iVA515Boj4ikOIYhiBQ,3511
37
37
  labfreed/pac_id_resolver/__init__.py,sha256=RNBlrDOSR42gmSNH9wJVhK_xwEX45cvTKVgWW2bjh7Q,113
38
38
  labfreed/pac_id_resolver/cit_common.py,sha256=jzoDOxog8YW68q7vyvDGCZcVcgIzJHXlMt8KwgVnx6o,2885
39
- labfreed/pac_id_resolver/cit_v1.py,sha256=TVvOWJA6-wmBkwzoHBqNuwV-tndRTSKAK07k56eoJBU,9326
40
- labfreed/pac_id_resolver/cit_v2.py,sha256=iDEvUb9A3ocX_ijewTIK3p951CIESnKyI7upjrd3Vjw,11842
41
- labfreed/pac_id_resolver/resolver.py,sha256=IxI57XRZfGHZigym6_f5tnt3ycwU5LnfXs5n1D9pPDs,3077
39
+ labfreed/pac_id_resolver/cit_v1.py,sha256=ix4X36tI422p4lRdlyZxDVEWL_AAEcDwH_eGkSpiDSM,9714
40
+ labfreed/pac_id_resolver/cit_v2.py,sha256=4O3jEqOcUY547HjO2n_JTYu7Nv7QnWAdCQmc4HMWnPQ,12237
41
+ labfreed/pac_id_resolver/resolver.py,sha256=rIG6zM7K5nh6DdN1RuyuxsOOI9R-jhI9hDQgvOkcAy8,3079
42
42
  labfreed/pac_id_resolver/services.py,sha256=vtnxLm38t4PNOf73cXh6UZOtWZZOGxfBCfXUDRxGHog,2592
43
43
  labfreed/qr/__init__.py,sha256=fdKwP6W2Js--yMbBUdn-g_2uq2VqPpfQJeDLHsMDO-Y,61
44
44
  labfreed/qr/generate_qr.py,sha256=mSt-U872O3ReHB_UdS-MzYu0wRgdlKcAOEfTxg5CLRk,16616
@@ -64,7 +64,7 @@ labfreed/well_known_keys/labfreed/well_known_keys.py,sha256=p-hXwEEIs7p2SKn9DQeL
64
64
  labfreed/well_known_keys/unece/UneceUnits.json,sha256=kwfQSp_nTuWbADfBBgqTWrvPl6XtM5SedEVLbMJrM7M,898953
65
65
  labfreed/well_known_keys/unece/__init__.py,sha256=MSP9lmjg9_D9iqG9Yq2_ajYfQSNS9wIT7FXA1c--59M,122
66
66
  labfreed/well_known_keys/unece/unece_units.py,sha256=J20d64H69qKDE3XlGdJoXIIh0G-d0jKoiIDsg9an5pk,1655
67
- labfreed-1.0.0a11.dist-info/licenses/LICENSE,sha256=gHFOv9FRKHxO8cInP3YXyPoJnuNeqrvcHjaE_wPSsQ8,1100
68
- labfreed-1.0.0a11.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
69
- labfreed-1.0.0a11.dist-info/METADATA,sha256=TsJ8XB7L3jnqS6RmX9GCactdXC8K81axahxQns-bvqs,19741
70
- labfreed-1.0.0a11.dist-info/RECORD,,
67
+ labfreed-1.0.0a13.dist-info/licenses/LICENSE,sha256=gHFOv9FRKHxO8cInP3YXyPoJnuNeqrvcHjaE_wPSsQ8,1100
68
+ labfreed-1.0.0a13.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
69
+ labfreed-1.0.0a13.dist-info/METADATA,sha256=vN86heBPnVQPClE6BPBCPul-Kgo2no0M_OSLjk9mCqI,19741
70
+ labfreed-1.0.0a13.dist-info/RECORD,,