Skip to content

Commit 1b9713b

Browse files
committed
feat: add optional experimental semantic codes for text and image
1 parent 60f3ec8 commit 1b9713b

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

iscc_sdk/main.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def code_iscc(fp, **options):
5252
:key add_units: Include ISCC-UNITS in metadata. Default: False
5353
:key create_meta: Create Meta-Code unit from embedded metadata. Default: True
5454
:key wide: Enable wide mode for ISCC-SUM with Data & Instance codes only. Default: False
55+
:key experimental: Enable experimental semantic codes. Default: False
5556
:return: IsccMeta object with complete ISCC-CODE and merged metadata from all ISCC-UNITs.
5657
:raises idk.IsccUnsupportedMediatype:
5758
If the media type is not supported. By default, the function will raise this exception for
@@ -88,6 +89,19 @@ def code_iscc(fp, **options):
8889
meta = meta_future.result()
8990
iscc_units.append(meta.iscc)
9091

92+
# Optional semantic codes
93+
if mode == "image" and idk.is_installed("iscc_sci") and opts.experimental:
94+
content_semantic_future = executor.submit(code_image_semantic, fp)
95+
elif mode == "text" and idk.is_installed("iscc_sct") and opts.experimental:
96+
content_semantic_future = executor.submit(code_text_semantic, fp)
97+
else:
98+
content_semantic_future = None
99+
100+
if content_semantic_future:
101+
content_semantic = content_semantic_future.result()
102+
iscc_units.append(content_semantic.iscc)
103+
iscc_meta.update(content_semantic.dict())
104+
91105
content = content_future.result()
92106
iscc_units.append(content.iscc)
93107
iscc_meta.update(content.dict())

tests/test_semantic.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,43 @@ def test_code_text_semantic(doc_file):
3030
"iscc": "ISCC:CAA7X3SMP7IQ4Z65",
3131
"characters": 6068,
3232
}
33+
34+
35+
@pytest.mark.skipif(not sct_installed, reason="iscc-sct not installed")
36+
def test_code_iscc_with_semantic_text(doc_file, monkeypatch):
37+
monkeypatch.setattr(idk.sdk_opts, "experimental", True)
38+
assert idk.code_iscc(doc_file).dict() == {
39+
"@type": "TextDigitalDocument",
40+
"characters": 4951,
41+
"creator": "titusz",
42+
"datahash": "1e2046d1ebd64f515371c88d1df5bc0d43893b1fa1e58654b2c4244e491d06007a61",
43+
"filename": "text.doc",
44+
"filesize": 40448,
45+
"generator": "iscc-sdk - v0.8.2",
46+
"iscc": "ISCC:KADV5NAQXBCHCWFW7PXEY76RBZT52BQETCAX3TX4N6BSAWE3WOCUAC2G2HV5MT2RKNYQ",
47+
"mediatype": "application/msword",
48+
"metahash": "1e201da548c5285ed35f293c3e22c2f050e037643aae8cf9244b532a162ff5031f52",
49+
"mode": "text",
50+
"name": "title from metadata",
51+
}
52+
53+
54+
@pytest.mark.skipif(not sci_installed, reason="iscc-sci not installed")
55+
def test_code_iscc_with_semantic_image(png_file, monkeypatch):
56+
monkeypatch.setattr(idk.sdk_opts, "experimental", True)
57+
assert idk.code_iscc(png_file).dict() == {
58+
"@type": "ImageObject",
59+
"creator": "Another Cat Lover",
60+
"datahash": "1e20feb85f1709f51ebf31c2feab2092a61826da36cc79eddc4cb04800b47db146a6",
61+
"filename": "img.png",
62+
"filesize": 54595,
63+
"generator": "iscc-sdk - v0.8.2",
64+
"height": 133,
65+
"iscc": "ISCC:KEDSR5352MR7TNV4BVNG6VVB7TGVZQ2DGCPDZHUOM55CG2YTPY75IZH6XBPROCPVD27Q",
66+
"mediatype": "image/png",
67+
"metahash": "1e2011dfae49dd718631175cbb05a9c459d19a25556ff3c03692bc3a5fc87c623740",
68+
"mode": "image",
69+
"name": "Concentrated Cat PNG",
70+
"thumbnail": "data:image/webp;base64,UklGRsYFAABXRUJQVlA4ILoFAABwIgCdASqAAFUAPxFyr1KsJiQnrhkqYYAiCWcA0NO4SzE4K729xs0KGE3TPf58LAwDWfcLC3d0xi8kjSpMSal8MME9Dkc7+SfOysASz0517nKQJQhJnjLjM10EuxQsO338neNVD0h5ihTyOGuaMBa/aF0wgoQq+uBaGlVXrTlFOF08iTVVbRj+9f60o2MbQWOKnWpQfydPftRmdXgnBdZu/z/lqnnGCHlDJNr1t80zujPSolLYAodnFkiUYGrQMuMGCtJz5/D4JUvMF7mZ2vowhrj3N6BwAuxgfcX97HkmQIeYl3C3eg7dOoufvW24Am/i/iMmS6XnCMW3gbiN9S/4dTYJ/ZPa/dXE2Gz9dIFkEa/tYyQ418LhlQwh3AD+9xtO0Qfk17nyoJMFdziQFPZz1KYYlpfULSDIgbTRRDlGGBMi6k6nsi7OsQ0j1rnQhfua79tMCfO3jFeMoB4REOpkALW6V2ZpUYblhFqY/ZzM5twYPP1hNi33QUFwQP+oAFPSyfU4lV2YFN0Be5mqSvPsDrUBhI7XWr6R0xU9GEVSGqhPBEs69ysg2BaigCpHFOcqw+VrLtsISCI39BX55LdkTGcjnf6/QTBxHXtJ2M6duEKYl3sRWiMh4w1ma2JPqowcUuttr6czP4xMR4C39UViot0K+L9Fqzm+P8u4ezUqjX0VyKiFb8WEHm7/m7vBz5bwjE/F3t7AWzozfC2BWpggw6eCNloMT3+Qkf1wPMTg3REesutDjJG9vOc8Eu0pJgmIr4GJJNeiDCkJzZ/MZKO1XW7smwZiCK9Rp11+Nm8og35M02IXMdR/baDex1KB1zDCFCAPnPWtkzhr0pEDZ8EOb47Bh6sk7IGVWxjHpgRhSyEp+WacIMw00FNVhp7xvKgTcvCSBX2rTxmQv5K8Uku2Jk+Jp4AiQ2+NVWb311HTfifFcxOtKluSEZ3n4/WCFe+fvtCVjTzfR6fUlrUmFXQrDWLWXTep+ohjKhFL7vZKiMezMygeqfn2uztDMaI0xTDM2UrOCBNLBso/tMxB63aa3QsM+sfAl7gJfT16L62WgxNHf3QyYBaA465pYSNx5p5K72bosKtt1DZMJlrHczWNbrt+5nerLrTxcWVvU4IZ4ioezwuOgiakg7JkPZ72OMcoomVYiy6WgLLlfx4Sd786L+ppyAkpXOw1EDi8CTPhNwLoDhKtcgAMsuxrFZ46kMoZ5G7Pd8axW+/RR0IGDbHPSj9bjAK3SCxKMG/NVcApdR2atgYR49K+D7mZtTriKTlLR258TynrkZlYtJgyKFCF9TofxOCMD9x74az6M2Ohof2aXwKYtSkoISostsbddNgDvbhl6LM9GNHUoF2yxjGBzzI0BppJ6ZINh+oYSPLhepzoTqK+3Dayyk6vCRv56twMXTkZ5MOk9NPTGrpbnLjR9MpbeEqQrYP9UL8qbyIU9oduNJfQjdT1gz9ciSKSqXErzVqxJNrKIZzSyhbgzjJ/tgUntGTpiXJE5+xAGiiDTG4jQiZ7aTYzYCoxuRTt8qB2X7ZjyJdnLjtD+1TckrSKmtkjdEjNIams8jZgxJq0u16TQHS3lbrOTfLkKYD8JApK/d6rrl4i99Nxg71s4LAmIlVA26V1lBcUADlZHalf8dMiu1AkBH0+vzweOGSuWDXyasCCA1Hb1iNadLefcG5dyuGlawoGIdlOWz1fgiAbuF0i15lv0TFMzvJo6eL8A1FgnGJS9F4F25aRZ32Q7ACUfDif7bN4aUdUlpRsUIom4LjAbGSDrhYfVCPE4C+f0aaXtvjyJwdQgPPyoXKrkApy5+rzsfW3iOR/A0tu4/dG9Sug5QHOgS8MccWkaxtAIGSDUWOhkTTPHMZn/zyJH8HkpMALTdSsEQJW5j8kfh7pAeHoQJOp4TrazFJ1aJo1iReTFUge0uNHQnuZmFPYF7rAdFUkF0FNogAAAA==",
71+
"width": 200,
72+
}

0 commit comments

Comments
 (0)