11import datetime
22import re
33import uuid as uuid_mod
4- from typing import List
4+ from typing import List , Optional
55
66ENERGYML_NAMESPACES = {
77 "eml" : "http://www.energistics.org/energyml/data/commonv2" ,
@@ -197,24 +197,59 @@ def flatten_concatenation(matrix) -> List:
197197 return flat_list
198198
199199
200- def parse_content_type (ct : str ):
200+ def parse_content_type (ct : str ) -> Optional [ re . Match [ str ]] :
201201 return re .search (RGX_CONTENT_TYPE , ct )
202202
203203
204- def parse_qualified_type (ct : str ):
204+ def parse_qualified_type (ct : str ) -> Optional [ re . Match [ str ]] :
205205 return re .search (RGX_QUALIFIED_TYPE , ct )
206206
207207
208- def now (
209- time_zone = datetime .timezone (datetime .timedelta (hours = 1 ), "UTC" )
210- ) -> float :
208+ def parse_content_or_qualified_type (cqt : str ) -> Optional [re .Match [str ]]:
209+ """
210+ Give a re.Match object (or None if failed).
211+ You can access to groups like : "domainVersion", "versionNum", "domain", "type"
212+
213+ :param cqt:
214+ :return:
215+ """
216+ parsed = None
217+ try :
218+ parsed = parse_content_type (cqt )
219+ except :
220+ try :
221+ parsed = parse_qualified_type (cqt )
222+ except :
223+ pass
224+
225+ return parsed
226+
227+
228+ def get_domain_version_from_content_or_qualified_type (cqt : str ) -> str :
229+ """
230+ return a version number like "2.2" or "2.0"
231+
232+ :param cqt:
233+ :return:
234+ """
235+ try :
236+ parsed = parse_content_type (cqt )
237+ return parsed .group ("domainVersion" )
238+ except :
239+ try :
240+ parsed = parse_qualified_type (cqt )
241+ return "." .join (parsed .group ("domainVersion" ))
242+ except :
243+ pass
244+ return None
245+
246+
247+ def now (time_zone = datetime .timezone .utc ) -> float :
211248 """Return an epoch value"""
212249 return datetime .datetime .timestamp (datetime .datetime .now (time_zone ))
213250
214251
215- def epoch (
216- time_zone = datetime .timezone (datetime .timedelta (hours = 1 ), "UTC" )
217- ) -> int :
252+ def epoch (time_zone = datetime .timezone .utc ) -> int :
218253 return int (now (time_zone ))
219254
220255
@@ -228,10 +263,14 @@ def date_to_epoch(date: str) -> int:
228263
229264def epoch_to_date (
230265 epoch_value : int ,
231- time_zone = datetime .timezone (datetime .timedelta (hours = 1 ), "UTC" ),
232266) -> str :
233- date = datetime .datetime .fromtimestamp (epoch_value , time_zone )
234- return date .strftime ("%Y-%m-%dT%H:%M:%S%z" )
267+ date = datetime .datetime .fromtimestamp (epoch_value , datetime .timezone .utc )
268+ return date .astimezone (datetime .timezone .utc ).strftime (
269+ "%Y-%m-%dT%H:%M:%SZ"
270+ )
271+ # date = datetime.datetime.fromtimestamp(epoch_value, datetime.timezone.utc)
272+ # return date.astimezone(datetime.timezone(datetime.timedelta(hours=0), "UTC")).strftime('%Y-%m-%dT%H:%M:%SZ')
273+ # return date.strftime("%Y-%m-%dT%H:%M:%SZ%z")
235274
236275
237276def gen_uuid () -> str :
0 commit comments