diff options
| author | J08nY | 2024-02-05 15:55:36 +0100 |
|---|---|---|
| committer | J08nY | 2024-02-05 15:55:36 +0100 |
| commit | b05b86c32eb6068be317af1ce15e032f88d48807 (patch) | |
| tree | ac2771a2a72421b2212ac8f37fe69d9d79c00a42 | |
| parent | d1b16b7086c63ee9b837f9a5b77971d9d7db9874 (diff) | |
| download | sec-certs-b05b86c32eb6068be317af1ce15e032f88d48807.tar.gz sec-certs-b05b86c32eb6068be317af1ce15e032f88d48807.tar.zst sec-certs-b05b86c32eb6068be317af1ce15e032f88d48807.zip | |
Add certificateId meta property.
| -rw-r--r-- | src/sec_certs/sample/cc_certificate_id.py | 18 | ||||
| -rw-r--r-- | tests/cc/test_cc_misc.py | 8 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/sec_certs/sample/cc_certificate_id.py b/src/sec_certs/sample/cc_certificate_id.py index e5f86bba..023e6e54 100644 --- a/src/sec_certs/sample/cc_certificate_id.py +++ b/src/sec_certs/sample/cc_certificate_id.py @@ -2,6 +2,7 @@ from __future__ import annotations import re from dataclasses import dataclass +from functools import cached_property from sec_certs.cert_rules import rules @@ -27,6 +28,13 @@ class CertificateId: scheme: str raw: str + @cached_property + def meta(self): + for rule in rules["cc_cert_id"][self.scheme]: + if match := re.match(rule, self.clean): + return match.groupdict() + return {} + def _canonical_fr(self) -> str: new_cert_id = self.clean for rule in rules["cc_cert_id"]["FR"]: @@ -274,6 +282,16 @@ class CertificateId: else: return self.clean + def __hash__(self): + return hash((self.scheme, self.raw)) + + def __eq__(self, other): + if isinstance(other, str): + return self.canonical == other + if not isinstance(other, CertificateId): + return False + return self.canonical == other.canonical and self.scheme == other.scheme + def canonicalize(cert_id_str: str, scheme: str) -> str: return CertificateId(scheme, cert_id_str).canonical diff --git a/tests/cc/test_cc_misc.py b/tests/cc/test_cc_misc.py index 5e67a58f..5de22216 100644 --- a/tests/cc/test_cc_misc.py +++ b/tests/cc/test_cc_misc.py @@ -1,4 +1,10 @@ -from sec_certs.sample.cc_certificate_id import canonicalize +from sec_certs.sample.cc_certificate_id import CertificateId, canonicalize + + +def test_meta_parse(): + i = CertificateId("FR", "Rapport de certification 2001/02v2") + assert "year" in i.meta + assert i.meta["year"] == "2001" def test_canonicalize_fr(): |
