From 02cd75f31120a766a35fc0ae00f8d0711c1c0ae9 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 17:04:57 +0100 Subject: schema fixes --- test/extractor/generic/test_path.py | 2 +- test/extractor/generic/test_stat.py | 2 +- test/lib/test_bsie.py | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'test') diff --git a/test/extractor/generic/test_path.py b/test/extractor/generic/test_path.py index ae68686..5568de7 100644 --- a/test/extractor/generic/test_path.py +++ b/test/extractor/generic/test_path.py @@ -33,7 +33,7 @@ class TestPath(unittest.TestCase): bse:filename rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:string ; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . ''')) def test_extract(self): diff --git a/test/extractor/generic/test_stat.py b/test/extractor/generic/test_stat.py index e5562d1..f543386 100644 --- a/test/extractor/generic/test_stat.py +++ b/test/extractor/generic/test_stat.py @@ -34,7 +34,7 @@ class TestStat(unittest.TestCase): bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:integer ; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . ''')) def test_extract(self): diff --git a/test/lib/test_bsie.py b/test/lib/test_bsie.py index ae23c4b..2ed9e10 100644 --- a/test/lib/test_bsie.py +++ b/test/lib/test_bsie.py @@ -56,12 +56,12 @@ class TestBSIE(unittest.TestCase): bse:filename rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:string ; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:integer; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; @@ -83,7 +83,7 @@ class TestBSIE(unittest.TestCase): bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:integer; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; @@ -101,12 +101,12 @@ class TestBSIE(unittest.TestCase): bse:filename rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:string ; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:integer; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; @@ -143,7 +143,7 @@ class TestBSIE(unittest.TestCase): bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:integer; - bsfs:unique "false"^^xsd:boolean . + bsfs:unique "true"^^xsd:boolean . ''')) -- cgit v1.2.3 From 464cc6cb54f55f6255bf0a485533c181d6018303 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 17:07:06 +0100 Subject: load config from file --- test/apps/test_index.py | 64 +++++++++++++++++++++-------------- test/apps/test_info.py | 44 +++++++++++++++++++++--- test/apps/test_loader.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 166 insertions(+), 30 deletions(-) create mode 100644 test/apps/test_loader.py (limited to 'test') diff --git a/test/apps/test_index.py b/test/apps/test_index.py index d1e7140..a877684 100644 --- a/test/apps/test_index.py +++ b/test/apps/test_index.py @@ -8,10 +8,12 @@ Author: Matthias Baumgartner, 2022 import contextlib import io import os +import tempfile import unittest # external imports import rdflib +import yaml # bsie imports from bsie.utils import ns @@ -23,17 +25,52 @@ from bsie.apps.index import main ## code ## class TestIndex(unittest.TestCase): + def setUp(self): + config = { + 'ReaderBuilder': {}, + 'ExtractorBuilder': [ + {'bsie.extractor.preview.Preview': { + 'max_sides': [50], + }}, + {'bsie.extractor.generic.path.Path': {}}, + {'bsie.extractor.generic.constant.Constant': { + 'schema': ''' + bse:author rdfs:subClassOf bsfs:Predicate ; + rdfs:domain bsfs:Entity ; + rdfs:range xsd:string ; + bsfs:unique "true"^^xsd:boolean . + ''', + 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], + }}, + {'bsie.extractor.image.colors_spatial.ColorsSpatial': { + 'width': 2, + 'height': 2, + 'exp': 2, + }}, + ] + } + # create config file + _, self.config_path = tempfile.mkstemp(prefix='bsie-test-', suffix='.yaml') + with open(self.config_path, 'wt') as cfile: + yaml.dump(config, cfile) + + def tearDown(self): + if os.path.exists(self.config_path): + os.unlink(self.config_path) + def test_disclaimer(self): print('Please wait, this test will take about 25 seconds') def test_main_invalid(self): outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): - bsfs = main([os.path.join(os.path.dirname(__file__), 'inexistent-file.t')]) + bsfs = main(['--config', self.config_path, os.path.join(os.path.dirname(__file__), 'inexistent-file.t')]) self.assertEqual(outbuf.getvalue().strip(), '') def test_main(self): bsfs = main([ + '--config', + self.config_path, '-r', '--host', 'http://example.com', '--user', 'me', @@ -48,57 +85,44 @@ class TestIndex(unittest.TestCase): (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('alpha_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('696', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('omega_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('503', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('td_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('911', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('testfile', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('885', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('bar_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('956', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('omega_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('648', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('alpha_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('754', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('foo_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('585', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('bar_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('636', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('foo_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('546', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('td_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('703', datatype=rdflib.XSD.integer)), (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('testimage.jpg', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('349264', datatype=rdflib.XSD.integer)), # features (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef('http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04'), rdflib.Literal( '(91, 127, 121, 94, 138, 167, 163, 134, 190, 138, 170, 156, 121, 142, 159)', datatype=rdflib.URIRef('http://ie.bsfs.ai/schema/Feature/ColorsSpatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04'))), - (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef(ns.bse.filesize), rdflib.Literal('349264', datatype=rdflib.XSD.integer)), # links to previews (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.preview), rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50')), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.preview), rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50')), @@ -211,38 +235,26 @@ class TestIndex(unittest.TestCase): self.assertTrue((set(outbuf.getvalue().split('\n')) - {''}).issuperset({ f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.filename}) alpha_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.filesize}) 696', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.filename}) omega_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.filesize}) 503', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.filename}) td_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.filesize}) 911', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.filename}) testfile', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.filesize}) 885', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.filename}) bar_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.filesize}) 956', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.filename}) omega_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.filesize}) 648', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.filename}) alpha_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.filesize}) 754', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.filename}) foo_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.filesize}) 585', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.filename}) bar_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.filesize}) 636', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.filename}) foo_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.filesize}) 546', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.filename}) td_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.filesize}) 703', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.filesize}) 349264', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.author}) Me, myself, and I', f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.filename}) testimage.jpg', # features diff --git a/test/apps/test_info.py b/test/apps/test_info.py index 725fb65..cf8d52f 100644 --- a/test/apps/test_info.py +++ b/test/apps/test_info.py @@ -8,8 +8,13 @@ Author: Matthias Baumgartner, 2022 import argparse import contextlib import io +import os +import tempfile import unittest +# external imports +import yaml + # bsie imports from bsie.utils import bsfs @@ -20,17 +25,49 @@ from bsie.apps.info import main ## code ## class TestIndex(unittest.TestCase): + def setUp(self): + config = { + 'ReaderBuilder': {}, + 'ExtractorBuilder': [ + {'bsie.extractor.preview.Preview': { + 'max_sides': [50], + }}, + {'bsie.extractor.generic.path.Path': {}}, + {'bsie.extractor.generic.constant.Constant': { + 'schema': ''' + bse:author rdfs:subClassOf bsfs:Predicate ; + rdfs:domain bsfs:Entity ; + rdfs:range xsd:string ; + bsfs:unique "true"^^xsd:boolean . + ''', + 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], + }}, + {'bsie.extractor.image.colors_spatial.ColorsSpatial': { + 'width': 2, + 'height': 2, + 'exp': 2, + }}, + ] + } + # create config file + _, self.config_path = tempfile.mkstemp(prefix='bsie-test-', suffix='.yaml') + with open(self.config_path, 'wt') as cfile: + yaml.dump(config, cfile) + + def tearDown(self): + if os.path.exists(self.config_path): + os.unlink(self.config_path) + def test_predicates(self): outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): # show predicates infos - main(['predicates']) + main(['--config', self.config_path, 'predicates']) # verify output self.assertSetEqual({pred for pred in outbuf.getvalue().split('\n') if pred != ''}, { 'http://bsfs.ai/schema/Entity#author', 'http://bsfs.ai/schema/Predicate', 'http://bsfs.ai/schema/Entity#filename', - 'http://bsfs.ai/schema/Entity#filesize', 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', 'http://bsfs.ai/schema/Entity#preview', 'http://bsfs.ai/schema/Preview#width', @@ -42,14 +79,13 @@ class TestIndex(unittest.TestCase): outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): # show schema infos - main(['schema']) + main(['--config', self.config_path, 'schema']) # verify output schema = bsfs.schema.from_string(outbuf.getvalue()) self.assertSetEqual({pred.uri for pred in schema.predicates()}, { 'http://bsfs.ai/schema/Entity#author', 'http://bsfs.ai/schema/Predicate', 'http://bsfs.ai/schema/Entity#filename', - 'http://bsfs.ai/schema/Entity#filesize', 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', 'http://bsfs.ai/schema/Entity#preview', 'http://bsfs.ai/schema/Preview#width', diff --git a/test/apps/test_loader.py b/test/apps/test_loader.py new file mode 100644 index 0000000..09a9162 --- /dev/null +++ b/test/apps/test_loader.py @@ -0,0 +1,88 @@ +""" + +Part of the bsie test suite. +A copy of the license is provided with the project. +Author: Matthias Baumgartner, 2022 +""" +# standard imports +import os +import tempfile +import unittest + +# external imports +import yaml + +# objects to test +from bsie.apps._loader import load_pipeline + + +## code ## + +class TestLoader(unittest.TestCase): + def test_load_pipeline(self): + # config file can be empty + config = { + 'ReaderBuilder': {}, + 'ExtractorBuilder': [] + } + # create config file + _, path = tempfile.mkstemp(prefix='bsie-test-', suffix='.yaml') + with open(path, 'wt') as cfile: + yaml.dump(config, cfile) + # pipeline contains only default predicates + pipeline = load_pipeline(path) + self.assertSetEqual({pred.uri for pred in pipeline.schema.predicates()}, { + 'http://bsfs.ai/schema/Predicate', + }) + + # pipeline is built according to configured extractors + config = { + 'ReaderBuilder': {}, + 'ExtractorBuilder': [ + {'bsie.extractor.preview.Preview': { + 'max_sides': [50], + }}, + {'bsie.extractor.generic.path.Path': {}}, + {'bsie.extractor.generic.constant.Constant': { + 'schema': ''' + bse:author rdfs:subClassOf bsfs:Predicate ; + rdfs:domain bsfs:Entity ; + rdfs:range xsd:string ; + bsfs:unique "true"^^xsd:boolean . + ''', + 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], + }}, + {'bsie.extractor.image.colors_spatial.ColorsSpatial': { + 'width': 2, + 'height': 2, + 'exp': 2, + }}, + ] + } + # create config file + _, path = tempfile.mkstemp(prefix='bsie-test-', suffix='.yaml') + with open(path, 'wt') as cfile: + yaml.dump(config, cfile) + # pipeline contains all defined predicates + pipeline = load_pipeline(path) + self.assertSetEqual({pred.uri for pred in pipeline.schema.predicates()}, { + 'http://bsfs.ai/schema/Entity#author', + 'http://bsfs.ai/schema/Predicate', + 'http://bsfs.ai/schema/Entity#filename', + 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', + 'http://bsfs.ai/schema/Entity#preview', + 'http://bsfs.ai/schema/Preview#width', + 'http://bsfs.ai/schema/Preview#height', + 'http://bsfs.ai/schema/Preview#asset', + }) + + # config file must exist + self.assertRaises(OSError, load_pipeline, 'invalid.yaml') + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## -- cgit v1.2.3 From ec9105b690974b0246e36769506e735c4edf069a Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 21:38:09 +0100 Subject: Exif data reader and extractor --- test/extractor/image/test_photometrics.py | 138 ++++++++++++++++++++++++++++++ test/reader/test_exif.py | 48 +++++++++++ test/reader/testimage_exif.jpg | Bin 0 -> 719 bytes 3 files changed, 186 insertions(+) create mode 100644 test/extractor/image/test_photometrics.py create mode 100644 test/reader/test_exif.py create mode 100644 test/reader/testimage_exif.jpg (limited to 'test') diff --git a/test/extractor/image/test_photometrics.py b/test/extractor/image/test_photometrics.py new file mode 100644 index 0000000..6e3b661 --- /dev/null +++ b/test/extractor/image/test_photometrics.py @@ -0,0 +1,138 @@ +""" + +Part of the bsie test suite. +A copy of the license is provided with the project. +Author: Matthias Baumgartner, 2022 +""" +# standard imports +import unittest + +# bsie imports +from bsie.extractor import base +from bsie.utils import bsfs, node as _node, ns + +# objects to test +from bsie.extractor.image.photometrics import Exif, _gps_to_dec + + +## code ## + +class TestExif(unittest.TestCase): + + def test_gps_to_dec(self): + # deg+min+sec format + self.assertAlmostEqual(_gps_to_dec('29/1 58/1 45/1'.split()), 29.979167, 6) + self.assertAlmostEqual(_gps_to_dec('31 08 03'.split()), 31.134167, 6) + self.assertAlmostEqual(_gps_to_dec('20 40 586/10'.split()), 20.682944, 6) + self.assertAlmostEqual(_gps_to_dec('88/1 34 68/10'.split()), 88.568556, 6) + # deg+min format + self.assertAlmostEqual(_gps_to_dec('13 472167/10000 0/1 '.split()), 13.786945, 6) + self.assertAlmostEqual(_gps_to_dec('104/1 3215/100 0/1'.split()), 104.535833, 6) + + def test_eq(self): + # identical instances are equal + self.assertEqual(Exif(), Exif()) + self.assertEqual(hash(Exif()), hash(Exif())) + # comparison respects type + class Foo(): pass + self.assertNotEqual(Exif(), Foo()) + self.assertNotEqual(hash(Exif()), hash(Foo())) + self.assertNotEqual(Exif(), 1234) + self.assertNotEqual(hash(Exif()), hash(1234)) + self.assertNotEqual(Exif(), None) + self.assertNotEqual(hash(Exif()), hash(None)) + + def test_schema(self): + self.assertSetEqual({pred.uri for pred in Exif().schema.predicates()}, { + ns.bsfs.Predicate, + ns.bse.exposure, + ns.bse.aperture, + ns.bse.iso, + ns.bse.focal_length, + ns.bse.width, + ns.bse.height, + ns.bse.orientation, + ns.bse.orientation_label, + ns.bse.altitude, + ns.bse.latitude, + ns.bse.longitude, + }) + + def test_extract(self): + ext = Exif() + node = _node.Node(ns.bsfs.File, '') # Blank node + content = { + 'Exif.Photo.ExposureTime': '10/600', + 'Exif.Photo.FNumber': '48/10', + 'Exif.Photo.ISOSpeedRatings': '400', + 'Exif.Photo.FocalLength': '460/10', + 'Exif.Photo.PixelXDimension': '4288', + 'Exif.Photo.PixelYDimension': '2848', + 'Exif.Image.Orientation': '1', + 'Exif.GPSInfo.GPSAltitude': '431/1', + 'Exif.GPSInfo.GPSLatitude': '46/1 11397/625 0/1', + 'Exif.GPSInfo.GPSLongitude': '7/1 131250/2500 0/1', + } + + # invalid principals are ignored + self.assertSetEqual(set(ext.extract(node, content, {ns.bse.filename})), set()) + # extract finds all relevant information + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.exposure)})), + {(node, ext.schema.predicate(ns.bse.exposure), 60.0)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.aperture)})), + {(node, ext.schema.predicate(ns.bse.aperture), 4.8)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.iso)})), + {(node, ext.schema.predicate(ns.bse.iso), 400)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.focal_length)})), + {(node, ext.schema.predicate(ns.bse.focal_length), 46.0)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.width)})), + {(node, ext.schema.predicate(ns.bse.width), 4288)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.height)})), + {(node, ext.schema.predicate(ns.bse.height), 2848)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.orientation)})), + {(node, ext.schema.predicate(ns.bse.orientation), 1)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.orientation_label)})), + {(node, ext.schema.predicate(ns.bse.orientation_label), 'landscape')}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.altitude)})), + {(node, ext.schema.predicate(ns.bse.altitude), 431.0)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.latitude)})), + {(node, ext.schema.predicate(ns.bse.latitude), 46.30392)}) + self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.longitude)})), + {(node, ext.schema.predicate(ns.bse.longitude), 7.875)}) + + # can pass multiple principals + self.assertSetEqual(set(ext.extract(node, content, { + ext.schema.predicate(ns.bse.exposure), + ext.schema.predicate(ns.bse.iso), + ext.schema.predicate(ns.bse.focal_length), + })), { + (node, ext.schema.predicate(ns.bse.exposure), 60.0), + (node, ext.schema.predicate(ns.bse.iso), 400), + (node, ext.schema.predicate(ns.bse.focal_length), 46.0), + }) + + # principals w/o content are ignored + self.assertSetEqual(set(ext.extract( + node, + content={'Exif.Photo.ExposureTime': '10/600'}, + principals={ + ext.schema.predicate(ns.bse.exposure), + ext.schema.predicate(ns.bse.iso), + ext.schema.predicate(ns.bse.focal_length), + }) + ), { + (node, ext.schema.predicate(ns.bse.exposure), 60.0), + }) + + # empty content is acceptable + self.assertSetEqual(set(ext.extract(node, {}, set(ext.principals))), set()) + # no principals is acceptable + self.assertSetEqual(set(ext.extract(node, content, set())), set()) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/test_exif.py b/test/reader/test_exif.py new file mode 100644 index 0000000..f1330da --- /dev/null +++ b/test/reader/test_exif.py @@ -0,0 +1,48 @@ +""" + +Part of the bsie test suite. +A copy of the license is provided with the project. +Author: Matthias Baumgartner, 2022 +""" +# standard imports +import os +import unittest + +# bsie imports +from bsie.utils import errors + +# objects to test +from bsie.reader.exif import Exif + + +## code ## + +class TestExif(unittest.TestCase): + def test_call(self): + rdr = Exif() + # discards non-image files + self.assertRaises(errors.UnsupportedFileFormatError, rdr, 'invalid.doc') + # raises on invalid image files + self.assertRaises(errors.ReaderError, rdr, 'invalid.jpg') + # returns dict with exif info + self.assertDictEqual(rdr(os.path.join(os.path.dirname(__file__), 'testimage_exif.jpg')), { + 'Exif.Image.Artist': 'nobody', + 'Exif.Image.ExifTag': '110', + 'Exif.Image.ResolutionUnit': '2', + 'Exif.Image.XResolution': '300/1', + 'Exif.Image.YCbCrPositioning': '1', + 'Exif.Image.YResolution': '300/1', + 'Exif.Photo.ColorSpace': '65535', + 'Exif.Photo.ComponentsConfiguration': '1 2 3 0', + 'Exif.Photo.ExifVersion': '48 50 51 50', + 'Exif.Photo.FlashpixVersion': '48 49 48 48', + 'Exif.Photo.ISOSpeedRatings': '200', + }) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/reader/testimage_exif.jpg b/test/reader/testimage_exif.jpg new file mode 100644 index 0000000..a774bc2 Binary files /dev/null and b/test/reader/testimage_exif.jpg differ -- cgit v1.2.3 From 6eca3af569997f28eee9d169a68cef4bbd6fd789 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 21:50:04 +0100 Subject: Integrate main app into package --- test/apps/test_index.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test') diff --git a/test/apps/test_index.py b/test/apps/test_index.py index a877684..f632599 100644 --- a/test/apps/test_index.py +++ b/test/apps/test_index.py @@ -225,6 +225,8 @@ class TestIndex(unittest.TestCase): outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): bsfs = main([ + '--config', + self.config_path, '--print', '-r', '--host', 'http://example.com', -- cgit v1.2.3 From 4b5c4d486bb4f0f4da2e25ad464e8336a781cdcb Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 22:31:03 +0100 Subject: removed module header stubs --- test/apps/test_index.py | 5 ----- test/apps/test_info.py | 5 ----- test/apps/test_loader.py | 5 ----- test/extractor/generic/test_constant.py | 5 ----- test/extractor/generic/test_path.py | 5 ----- test/extractor/generic/test_stat.py | 5 ----- test/extractor/image/test_colors_spatial.py | 5 ----- test/extractor/image/test_photometrics.py | 5 ----- test/extractor/test_base.py | 5 ----- test/extractor/test_builder.py | 5 ----- test/extractor/test_preview.py | 5 ----- test/lib/test_bsie.py | 5 ----- test/lib/test_builder.py | 5 ----- test/lib/test_naming_policy.py | 5 ----- test/lib/test_pipeline.py | 5 ----- test/reader/image/load_nef.py | 5 ----- test/reader/image/test_image.py | 5 ----- test/reader/image/test_pillow.py | 5 ----- test/reader/image/test_raw_image.py | 5 ----- test/reader/preview/load_nef.py | 5 ----- test/reader/preview/test_pg.py | 5 ----- test/reader/preview/test_pillow.py | 5 ----- test/reader/preview/test_preview.py | 5 ----- test/reader/preview/test_rawpy.py | 5 ----- test/reader/preview/test_utils.py | 5 ----- test/reader/test_base.py | 5 ----- test/reader/test_builder.py | 5 ----- test/reader/test_chain.py | 5 ----- test/reader/test_exif.py | 5 ----- test/reader/test_path.py | 5 ----- test/reader/test_stat.py | 5 ----- test/utils/filematcher/test_matcher.py | 5 ----- test/utils/filematcher/test_parser.py | 5 ----- test/utils/test_loading.py | 5 ----- test/utils/test_node.py | 5 ----- 35 files changed, 175 deletions(-) (limited to 'test') diff --git a/test/apps/test_index.py b/test/apps/test_index.py index f632599..03209fe 100644 --- a/test/apps/test_index.py +++ b/test/apps/test_index.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import contextlib import io diff --git a/test/apps/test_info.py b/test/apps/test_info.py index cf8d52f..d705629 100644 --- a/test/apps/test_info.py +++ b/test/apps/test_info.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import argparse import contextlib diff --git a/test/apps/test_loader.py b/test/apps/test_loader.py index 09a9162..20254ec 100644 --- a/test/apps/test_loader.py +++ b/test/apps/test_loader.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import tempfile diff --git a/test/extractor/generic/test_constant.py b/test/extractor/generic/test_constant.py index bde3805..db55852 100644 --- a/test/extractor/generic/test_constant.py +++ b/test/extractor/generic/test_constant.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/extractor/generic/test_path.py b/test/extractor/generic/test_path.py index 5568de7..d40a28c 100644 --- a/test/extractor/generic/test_path.py +++ b/test/extractor/generic/test_path.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/extractor/generic/test_stat.py b/test/extractor/generic/test_stat.py index f543386..8868546 100644 --- a/test/extractor/generic/test_stat.py +++ b/test/extractor/generic/test_stat.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/extractor/image/test_colors_spatial.py b/test/extractor/image/test_colors_spatial.py index ba551f3..967aaf2 100644 --- a/test/extractor/image/test_colors_spatial.py +++ b/test/extractor/image/test_colors_spatial.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/extractor/image/test_photometrics.py b/test/extractor/image/test_photometrics.py index 6e3b661..0e0261b 100644 --- a/test/extractor/image/test_photometrics.py +++ b/test/extractor/image/test_photometrics.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/extractor/test_base.py b/test/extractor/test_base.py index acfaf58..bb1f73b 100644 --- a/test/extractor/test_base.py +++ b/test/extractor/test_base.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/extractor/test_builder.py b/test/extractor/test_builder.py index 039ea53..1b8951a 100644 --- a/test/extractor/test_builder.py +++ b/test/extractor/test_builder.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/extractor/test_preview.py b/test/extractor/test_preview.py index 10d2a7f..0e0068d 100644 --- a/test/extractor/test_preview.py +++ b/test/extractor/test_preview.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import io import os diff --git a/test/lib/test_bsie.py b/test/lib/test_bsie.py index 2ed9e10..52da8b8 100644 --- a/test/lib/test_bsie.py +++ b/test/lib/test_bsie.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/lib/test_builder.py b/test/lib/test_builder.py index 48e932b..2bd1994 100644 --- a/test/lib/test_builder.py +++ b/test/lib/test_builder.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import logging import unittest diff --git a/test/lib/test_naming_policy.py b/test/lib/test_naming_policy.py index 4861c84..b2a3649 100644 --- a/test/lib/test_naming_policy.py +++ b/test/lib/test_naming_policy.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/lib/test_pipeline.py b/test/lib/test_pipeline.py index 61fddd7..5125a5c 100644 --- a/test/lib/test_pipeline.py +++ b/test/lib/test_pipeline.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import logging import os diff --git a/test/reader/image/load_nef.py b/test/reader/image/load_nef.py index 5ba0adc..02be470 100644 --- a/test/reader/image/load_nef.py +++ b/test/reader/image/load_nef.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os diff --git a/test/reader/image/test_image.py b/test/reader/image/test_image.py index 26f6a93..ee9b8f9 100644 --- a/test/reader/image/test_image.py +++ b/test/reader/image/test_image.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import importlib import os diff --git a/test/reader/image/test_pillow.py b/test/reader/image/test_pillow.py index 8abf5c1..2cff768 100644 --- a/test/reader/image/test_pillow.py +++ b/test/reader/image/test_pillow.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/reader/image/test_raw_image.py b/test/reader/image/test_raw_image.py index ba21b5a..0a5ed63 100644 --- a/test/reader/image/test_raw_image.py +++ b/test/reader/image/test_raw_image.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import importlib import os diff --git a/test/reader/preview/load_nef.py b/test/reader/preview/load_nef.py index 5ba0adc..02be470 100644 --- a/test/reader/preview/load_nef.py +++ b/test/reader/preview/load_nef.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os diff --git a/test/reader/preview/test_pg.py b/test/reader/preview/test_pg.py index e492cfa..381344f 100644 --- a/test/reader/preview/test_pg.py +++ b/test/reader/preview/test_pg.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports from functools import partial import os diff --git a/test/reader/preview/test_pillow.py b/test/reader/preview/test_pillow.py index ca38d89..d213bbb 100644 --- a/test/reader/preview/test_pillow.py +++ b/test/reader/preview/test_pillow.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports from functools import partial import os diff --git a/test/reader/preview/test_preview.py b/test/reader/preview/test_preview.py index fde610f..e144877 100644 --- a/test/reader/preview/test_preview.py +++ b/test/reader/preview/test_preview.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports from functools import partial import importlib diff --git a/test/reader/preview/test_rawpy.py b/test/reader/preview/test_rawpy.py index ed35f53..11a6f9b 100644 --- a/test/reader/preview/test_rawpy.py +++ b/test/reader/preview/test_rawpy.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports from functools import partial import importlib diff --git a/test/reader/preview/test_utils.py b/test/reader/preview/test_utils.py index c10c38c..2b15bc6 100644 --- a/test/reader/preview/test_utils.py +++ b/test/reader/preview/test_utils.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/reader/test_base.py b/test/reader/test_base.py index 41f4c29..5dd2855 100644 --- a/test/reader/test_base.py +++ b/test/reader/test_base.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/reader/test_builder.py b/test/reader/test_builder.py index 92e9edc..84e8e7a 100644 --- a/test/reader/test_builder.py +++ b/test/reader/test_builder.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/reader/test_chain.py b/test/reader/test_chain.py index 901faa1..665aabc 100644 --- a/test/reader/test_chain.py +++ b/test/reader/test_chain.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import logging import os diff --git a/test/reader/test_exif.py b/test/reader/test_exif.py index f1330da..b2bf843 100644 --- a/test/reader/test_exif.py +++ b/test/reader/test_exif.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/reader/test_path.py b/test/reader/test_path.py index 95e447f..f2eee06 100644 --- a/test/reader/test_path.py +++ b/test/reader/test_path.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/reader/test_stat.py b/test/reader/test_stat.py index fd9fdcd..f36b8b3 100644 --- a/test/reader/test_stat.py +++ b/test/reader/test_stat.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import unittest diff --git a/test/utils/filematcher/test_matcher.py b/test/utils/filematcher/test_matcher.py index c3cccee..88e96c2 100644 --- a/test/utils/filematcher/test_matcher.py +++ b/test/utils/filematcher/test_matcher.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import os import stat diff --git a/test/utils/filematcher/test_parser.py b/test/utils/filematcher/test_parser.py index c594747..536db00 100644 --- a/test/utils/filematcher/test_parser.py +++ b/test/utils/filematcher/test_parser.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/utils/test_loading.py b/test/utils/test_loading.py index 58ff166..b8773ab 100644 --- a/test/utils/test_loading.py +++ b/test/utils/test_loading.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest diff --git a/test/utils/test_node.py b/test/utils/test_node.py index 1dcd0ed..918ce42 100644 --- a/test/utils/test_node.py +++ b/test/utils/test_node.py @@ -1,9 +1,4 @@ -""" -Part of the bsie test suite. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import unittest -- cgit v1.2.3 From 70d77819a84c73292825b81f952e162bb30753d7 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Thu, 2 Mar 2023 08:56:57 +0100 Subject: reader error: untangle generic from unsupported format errors --- test/reader/image/test_raw_image.py | 4 ++-- test/reader/preview/test_pillow.py | 6 +++++- test/reader/test_exif.py | 13 +++++++++++-- test/reader/testimage_exif_corrupted.jpg | Bin 0 -> 551 bytes 4 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 test/reader/testimage_exif_corrupted.jpg (limited to 'test') diff --git a/test/reader/image/test_raw_image.py b/test/reader/image/test_raw_image.py index 0a5ed63..3b240d0 100644 --- a/test/reader/image/test_raw_image.py +++ b/test/reader/image/test_raw_image.py @@ -32,10 +32,10 @@ class TestRawImage(unittest.TestCase): #self.assertEqual(img.getdata().getpixel((0, 0)), (0, 0, 0)) img.close() # raises exception when image cannot be read + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'testimage.jpg')) self.assertRaises(errors.ReaderError, rdr, os.path.join(os.path.dirname(__file__), 'invalid.nef')) - self.assertRaises(errors.ReaderError, rdr, - os.path.join(os.path.dirname(__file__), 'testimage.jpg')) diff --git a/test/reader/preview/test_pillow.py b/test/reader/preview/test_pillow.py index d213bbb..20f08ec 100644 --- a/test/reader/preview/test_pillow.py +++ b/test/reader/preview/test_pillow.py @@ -20,11 +20,15 @@ class TestPillowPreviewReader(unittest.TestCase): def test_call(self): rdr = PillowPreviewReader() # raises exception when image cannot be read - self.assertRaises(errors.ReaderError, rdr, + self.assertRaises(errors.UnsupportedFileFormatError, rdr, os.path.join(os.path.dirname(__file__), 'invalid.jpg')) + # raises exception when image cannot be read + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'inexistent.jpg')) # raises exception when image has invalid type self.assertRaises(errors.UnsupportedFileFormatError, rdr, os.path.join(os.path.dirname(__file__), 'invalid.foo')) + # proper file produces a generator gen = rdr(os.path.join(os.path.dirname(__file__), 'testimage.jpg')) self.assertIsInstance(gen, partial) diff --git a/test/reader/test_exif.py b/test/reader/test_exif.py index b2bf843..de6e801 100644 --- a/test/reader/test_exif.py +++ b/test/reader/test_exif.py @@ -3,6 +3,9 @@ import os import unittest +# external imports +import pyexiv2 + # bsie imports from bsie.utils import errors @@ -16,9 +19,15 @@ class TestExif(unittest.TestCase): def test_call(self): rdr = Exif() # discards non-image files - self.assertRaises(errors.UnsupportedFileFormatError, rdr, 'invalid.doc') + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.doc')) + # raises on invalid image files + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.jpg')) # raises on invalid image files - self.assertRaises(errors.ReaderError, rdr, 'invalid.jpg') + pyexiv2.set_log_level(3) # suppress log message + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'testimage_exif_corrupted.jpg')) # returns dict with exif info self.assertDictEqual(rdr(os.path.join(os.path.dirname(__file__), 'testimage_exif.jpg')), { 'Exif.Image.Artist': 'nobody', diff --git a/test/reader/testimage_exif_corrupted.jpg b/test/reader/testimage_exif_corrupted.jpg new file mode 100644 index 0000000..e51a9dc Binary files /dev/null and b/test/reader/testimage_exif_corrupted.jpg differ -- cgit v1.2.3 From ba6329bbe14c832d42773dee2fe30bd7669ca255 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Thu, 2 Mar 2023 08:58:29 +0100 Subject: various minor fixes --- test/apps/test_main.py | 57 +++++++++++++++++++++++++++++++ test/extractor/image/test_photometrics.py | 10 ++++++ test/reader/preview/test_pg.py | 1 + 3 files changed, 68 insertions(+) create mode 100644 test/apps/test_main.py (limited to 'test') diff --git a/test/apps/test_main.py b/test/apps/test_main.py new file mode 100644 index 0000000..a1d8a49 --- /dev/null +++ b/test/apps/test_main.py @@ -0,0 +1,57 @@ + +# standard imports +import contextlib +import io +import json +import os +import tempfile +import unittest +import yaml + +# objects to test +from bsie.apps import main + + +## code ## + +class TestMain(unittest.TestCase): + def setUp(self): + config = { + 'ReaderBuilder': {}, + 'ExtractorBuilder': [ + {'bsie.extractor.generic.stat.Stat': {}}, + {'bsie.extractor.generic.path.Path': {}}, + ] + } + # create config file + _, self.config_path = tempfile.mkstemp(prefix='bsie-test-', suffix='.yaml') + with open(self.config_path, 'wt') as cfile: + yaml.dump(config, cfile) + + def tearDown(self): + if os.path.exists(self.config_path): + os.unlink(self.config_path) + + def test_main(self): + # must at least pass an app + with contextlib.redirect_stderr(io.StringIO()): + self.assertRaises(SystemExit, main, []) + # app takes over + with contextlib.redirect_stderr(io.StringIO()): + self.assertRaises(SystemExit, main, ['info']) + outbuf = io.StringIO() + with contextlib.redirect_stdout(outbuf): + main(['info', '--config', self.config_path, 'predicates']) + self.assertEqual(set(outbuf.getvalue().strip().split('\n')), { + 'http://bsfs.ai/schema/Entity#filename', + 'http://bsfs.ai/schema/Entity#filesize', + 'http://bsfs.ai/schema/Predicate', + }) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## diff --git a/test/extractor/image/test_photometrics.py b/test/extractor/image/test_photometrics.py index 0e0261b..fb219e2 100644 --- a/test/extractor/image/test_photometrics.py +++ b/test/extractor/image/test_photometrics.py @@ -95,6 +95,16 @@ class TestExif(unittest.TestCase): self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.longitude)})), {(node, ext.schema.predicate(ns.bse.longitude), 7.875)}) + # check orientation label + self.assertSetEqual(set(ext.extract( + node, { + 'Exif.Photo.PixelXDimension': '4288', + 'Exif.Photo.PixelYDimension': '2848', + 'Exif.Image.Orientation': '5', + }, + {ext.schema.predicate(ns.bse.orientation_label)})), + {(node, ext.schema.predicate(ns.bse.orientation_label), 'portrait')}) + # can pass multiple principals self.assertSetEqual(set(ext.extract(node, content, { ext.schema.predicate(ns.bse.exposure), diff --git a/test/reader/preview/test_pg.py b/test/reader/preview/test_pg.py index 381344f..30095c5 100644 --- a/test/reader/preview/test_pg.py +++ b/test/reader/preview/test_pg.py @@ -52,6 +52,7 @@ class TestPreviewGeneratorReader(unittest.TestCase): self.assertEqual(sum(img.getdata()), 20258) # cleanup img.close() + del rdr # can define a cache dir pg_dir = tempfile.mkdtemp(prefix='bsie-test') -- cgit v1.2.3 From d2052e77210e0ace2c5f06e48afe2a8acb412965 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Sat, 4 Mar 2023 13:41:13 +0100 Subject: namespace refactoring and cleanup --- test/apps/test_index.py | 204 ++++++++++++++-------------- test/apps/test_info.py | 36 ++--- test/apps/test_loader.py | 22 +-- test/apps/test_main.py | 6 +- test/extractor/generic/test_constant.py | 16 +-- test/extractor/generic/test_path.py | 6 +- test/extractor/generic/test_stat.py | 6 +- test/extractor/image/test_colors_spatial.py | 12 +- test/extractor/test_base.py | 8 +- test/extractor/test_builder.py | 16 +-- test/extractor/test_preview.py | 24 ++-- test/lib/test_bsie.py | 28 ++-- test/lib/test_builder.py | 4 +- test/lib/test_naming_policy.py | 40 +++--- test/lib/test_pipeline.py | 12 +- test/utils/test_node.py | 18 +-- 16 files changed, 229 insertions(+), 229 deletions(-) (limited to 'test') diff --git a/test/apps/test_index.py b/test/apps/test_index.py index 03209fe..6927044 100644 --- a/test/apps/test_index.py +++ b/test/apps/test_index.py @@ -31,11 +31,11 @@ class TestIndex(unittest.TestCase): {'bsie.extractor.generic.constant.Constant': { 'schema': ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''', - 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], + 'tuples': [['https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I']], }}, {'bsie.extractor.image.colors_spatial.ColorsSpatial': { 'width': 2, @@ -77,47 +77,47 @@ class TestIndex(unittest.TestCase): pre_preview = 'http://example.com/me/preview#' self.assertTrue(set(bsfs._backend._graph).issuperset({ # files and properties - (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('alpha_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('omega_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('td_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('testfile', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('bar_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('omega_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + '997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('alpha_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('foo_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('bar_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'd43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('foo_first', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'd803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('td_second', datatype=rdflib.XSD.string)), - (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.File)), + (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Entity)), (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef(ns.bse.author), rdflib.Literal('Me, myself, and I', datatype=rdflib.XSD.string)), (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef(ns.bse.filename), rdflib.Literal('testimage.jpg', datatype=rdflib.XSD.string)), # features - (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef('http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04'), + (rdflib.URIRef(pre_file + 'accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089'), rdflib.URIRef('https://schema.bsfs.io/ie/Node/Entity#colors_spatial_0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04'), rdflib.Literal( '(91, 127, 121, 94, 138, 167, 163, 134, 190, 138, 170, 156, 121, 142, 159)', - datatype=rdflib.URIRef('http://ie.bsfs.ai/schema/Feature/ColorsSpatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04'))), + datatype=rdflib.URIRef('https://schema.bsfs.io/ie/Literal/Array/Feature/ColorsSpatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04'))), # links to previews (rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(ns.bse.preview), rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50')), (rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(ns.bse.preview), rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50')), @@ -134,53 +134,53 @@ class TestIndex(unittest.TestCase): # preview dimensions (rdflib.URIRef(pre_preview + '2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('33', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + '9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + '9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + '9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + '9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + 'a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + 'a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + 'a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + 'a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + 'dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + 'dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + 'dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + 'dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), (rdflib.URIRef(pre_preview + 'df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50'), rdflib.URIRef(ns.bsp.height), rdflib.Literal('50', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), (rdflib.URIRef(pre_preview + 'df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50'), rdflib.URIRef(ns.bsp.width), rdflib.Literal('36', datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#integer'))), - (rdflib.URIRef(pre_preview + 'df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsfs.Preview)), + (rdflib.URIRef(pre_preview + 'df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50'), rdflib.RDF.type, rdflib.URIRef(ns.bsn.Preview)), # assets - (rdflib.URIRef(pre_preview + '2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDi9Ktb+O3khZTg/wAB7VSGnKkkhkAR85weteo3Vl9mvLtWjVWEJaN/9rsD7HkVwNza3kmsn7RYsDuzsdSVb/GvLo15W9rKNkVDmvzKN0dx4L1Sb+x2S7jZ7aM7BKF+XPoffkVdOpWDSSI9sGizk5HWuE8S69q0NnHptnB9ms7Nh8lr+6SSXALhsHJUcY7kitPTLi51nR0nMKpO6ZkCHABxngdq1xGKnSs1Kyvrc7qEMW2/Zrz/AKudnbXXhuaEiO3jjY9TtxVG8ht3mQwgOnaubuVmtbFV2gSjjn1q1prajJF+9dEQdMVjPHKtFxaXqc9fE1JXpzjr+J0Is7fA+VaKwmludx/0xevrRXLaH8xyfVZdjpNFsgsUlpryPkjyVuVJ6AnH8z/I1flS30m2ezvdt3bbd1teRL8yntu/xGfeua1zXtbs7dh5I8mRdhkD7mYEY5GOf51Jp+vW8Vnu1KT7FJKMmO5b5JcdwDxn1HFfR1KUZRd1v93zPoaFfD1J+5Kz+79DjfEV9Dc3E0hk5Zi5ZR1btx+NYNlrn9nllhkKgnPpnjr9Of1H0rrdc0bQtTvgsWbSRiwJjk2K+ADwrZ9RyOOa4/U/AWs21y0mmhL60dyI5IpVLduGGeCM/jXmPL201N3NK9SpfngrryOr0y+i1fT4lvZ9gR9pYfM5I9v8/wBK2/7FneFmCXEMLcIbhwpb3A6gVwGiaR4o03UYhbaZOZ88RqA27HXoeB9K9PgiYRRyal4Y1KKVhlyHbr3966MPgIRpuMtNROjTr+/JWn+P4mB/wix/5/o/+/lFdoLXT8DPhfUfx8yiuj6lT7v8P8hex85ffEZef8gu0+oriPiZ/rNI+j/zFFFbYn+Ez5uh8ZP4l/5Cq/8AYN/9nFU/CH/Hvd/9dv8A2Wiih/Ee7k/wv1/Q63Qv9fb/APXT+ldFrP8Ax/xfRP8A0IUUVX2T0K38RD5v9dJ/vH+dFFFUC2P/2Q==', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq6eAgKoI25Oc+oHYe9Qfb5sr+6UZHUhuv5VYjnZyQSo9gpNTgP3YH6Lj+tPqCa2jmILrkgEVH/Z8HHy8DjGB/hUq26IMAkj0IH+FTUUUUUUUUUUUUUUUUUUUUUUUUUUV/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eBwFVTkd89c+1Qf2hMSAI15/3v8KtR3DSFgIiceh7/AMv1qcHIzjFLVO7tnncFduAMc+v5GoDZXJAw65A/vdT/AN81PDasjMXPBGAMgj8toqxHGIxgfyA/lUlFFFFFFFFFFFFFFFFFFFFFFFFFf//Z', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq5eFgEQEYySQf6CoDqEo2/u1yevDf4VJHfZ3eZhNvojHvj0q4h3IDnOR1AxmnVXntEuDlyR8u3gA8fiDUR02I4G9uOei9eeenvTvsS5J82Tn6cfpUsMPkrgSOw9Gxx+lTUUUUUUUUUUUUUUUUUUUUUUUUUV//9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq6eBgFUHjPIJ7+wqudQmGMxpyMk4bA6+30/OrSyzFvm8kDrjecgflVhSGGVIIPcUtV57RLjBZmBAxwB/UGov7NiGMMw25wQF45z6VKtrGuc7mz6n3zVjpRRRRRRRRRRRRRRRRRRRRRRRRRRX/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eFsIgPy55zyc47CoRfTkf6uPOOckjnn29qmS5dmbK52noq5OPzqwj7/wCFl/3hin1n36MzgqhbCkcKTz+ANUzA5Cjynx7IRjn/AHfT271d8gAEFGxzwCfX2WrMR2gIQfbg/wCAqaiiiiiiiiiiiiiiiiiiiiiiiiiv/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq5eAgKoPyknIPb6ColvZywHlp79R+WRU3nT7iojHXqQR6VYUk9QR9adVK8t3mdSqggLjJxkHPuD/AJFVlsZ/l+RFIXGTtI6k9Npq3FbFdwYKAemAp/8AZR/WrKLtGMn9KdRRRRRRRRRRRRRRRRRRRRRRRRRX/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + '567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eFwFVSCpPIPYj0HvVf+0ZiFxGnIychhj9KtQyTSNkiLZ7E5B/EVZorN1EZkXAJIQ4wM9x7GqYAAXCAgDHKnGMn0X/Oa0LeMJudcKx64iJz+OATVoOOh3E+oUipKayK33lB+opPKj/55r+VHlR8/Iv5U+iiiiiiiiiiiiiiiiiiiiiv/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + 'df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eGQBVU5XPIJ7j0FQfb5sgiNcH2b39vapkvGPDIucjoTjBOPSrKuHHGencEU+ql1am4IIYA7cDIB757g1CunFWByAAOCMAg5yD07VcCEN0P/fZNS0UUUUUUUUUUUUUUUUUUUUUUUUUV/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + 'a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq6eBgFUH5c5IPqPQVANQmJUeWvPXhvUj09qspcM2cAnHHCE/rmpUl3nGx1+oxUlVLq1M7KQQPlI5APXHqDUKacyMDvHTsBk9fb3q4kXl5IYkk5OQB/ICpaKKKKKKKKKKKKKKKKKKKKKKKKKK/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdbm4eF1CqDkZOQT3HoKr/b5vl/dpkj/awDnHp06fzqZLiRmIPk47fMQf1FXKKikgilOZEDHGOaZ9itsg+SuQMA08QoowNwHoGP+NO8serf99Gn0UUUUUUUUUUUUUUUUUUUUUUUUV//2Q==', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), - (rdflib.URIRef(pre_preview + 'dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdbm5eFwqqDkZ5B9QOw96rHUZgoPlLkgno3b8Kel7IzspVePYgdcck1YilaTA3JnqQFPT86sVQvoXkYFUDEKRz7np0NVWtZcAiLkd8Dg/8AfPqO3rWhEk6thsbc9mz+mP61Zoooooooooooooooooooooooooor/9k=', datatype=rdflib.URIRef(ns.bsfs.BinaryBlob))), + (rdflib.URIRef(pre_preview + '2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDi9Ktb+O3khZTg/wAB7VSGnKkkhkAR85weteo3Vl9mvLtWjVWEJaN/9rsD7HkVwNza3kmsn7RYsDuzsdSVb/GvLo15W9rKNkVDmvzKN0dx4L1Sb+x2S7jZ7aM7BKF+XPoffkVdOpWDSSI9sGizk5HWuE8S69q0NnHptnB9ms7Nh8lr+6SSXALhsHJUcY7kitPTLi51nR0nMKpO6ZkCHABxngdq1xGKnSs1Kyvrc7qEMW2/Zrz/AKudnbXXhuaEiO3jjY9TtxVG8ht3mQwgOnaubuVmtbFV2gSjjn1q1prajJF+9dEQdMVjPHKtFxaXqc9fE1JXpzjr+J0Is7fA+VaKwmludx/0xevrRXLaH8xyfVZdjpNFsgsUlpryPkjyVuVJ6AnH8z/I1flS30m2ezvdt3bbd1teRL8yntu/xGfeua1zXtbs7dh5I8mRdhkD7mYEY5GOf51Jp+vW8Vnu1KT7FJKMmO5b5JcdwDxn1HFfR1KUZRd1v93zPoaFfD1J+5Kz+79DjfEV9Dc3E0hk5Zi5ZR1btx+NYNlrn9nllhkKgnPpnjr9Of1H0rrdc0bQtTvgsWbSRiwJjk2K+ADwrZ9RyOOa4/U/AWs21y0mmhL60dyI5IpVLduGGeCM/jXmPL201N3NK9SpfngrryOr0y+i1fT4lvZ9gR9pYfM5I9v8/wBK2/7FneFmCXEMLcIbhwpb3A6gVwGiaR4o03UYhbaZOZ88RqA27HXoeB9K9PgiYRRyal4Y1KKVhlyHbr3966MPgIRpuMtNROjTr+/JWn+P4mB/wix/5/o/+/lFdoLXT8DPhfUfx8yiuj6lT7v8P8hex85ffEZef8gu0+oriPiZ/rNI+j/zFFFbYn+Ez5uh8ZP4l/5Cq/8AYN/9nFU/CH/Hvd/9dv8A2Wiih/Ee7k/wv1/Q63Qv9fb/APXT+ldFrP8Ax/xfRP8A0IUUVX2T0K38RD5v9dJ/vH+dFFFUC2P/2Q==', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq6eAgKoI25Oc+oHYe9Qfb5sr+6UZHUhuv5VYjnZyQSo9gpNTgP3YH6Lj+tPqCa2jmILrkgEVH/Z8HHy8DjGB/hUq26IMAkj0IH+FTUUUUUUUUUUUUUUUUUUUUUUUUUUV/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eBwFVTkd89c+1Qf2hMSAI15/3v8KtR3DSFgIiceh7/AMv1qcHIzjFLVO7tnncFduAMc+v5GoDZXJAw65A/vdT/AN81PDasjMXPBGAMgj8toqxHGIxgfyA/lUlFFFFFFFFFFFFFFFFFFFFFFFFFf//Z', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq5eFgEQEYySQf6CoDqEo2/u1yevDf4VJHfZ3eZhNvojHvj0q4h3IDnOR1AxmnVXntEuDlyR8u3gA8fiDUR02I4G9uOei9eeenvTvsS5J82Tn6cfpUsMPkrgSOw9Gxx+lTUUUUUUUUUUUUUUUUUUUUUUUUUV//9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq6eBgFUHjPIJ7+wqudQmGMxpyMk4bA6+30/OrSyzFvm8kDrjecgflVhSGGVIIPcUtV57RLjBZmBAxwB/UGov7NiGMMw25wQF45z6VKtrGuc7mz6n3zVjpRRRRRRRRRRRRRRRRRRRRRRRRRRX/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eFsIgPy55zyc47CoRfTkf6uPOOckjnn29qmS5dmbK52noq5OPzqwj7/wCFl/3hin1n36MzgqhbCkcKTz+ANUzA5Cjynx7IRjn/AHfT271d8gAEFGxzwCfX2WrMR2gIQfbg/wCAqaiiiiiiiiiiiiiiiiiiiiiiiiiv/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq5eAgKoPyknIPb6ColvZywHlp79R+WRU3nT7iojHXqQR6VYUk9QR9adVK8t3mdSqggLjJxkHPuD/AJFVlsZ/l+RFIXGTtI6k9Npq3FbFdwYKAemAp/8AZR/WrKLtGMn9KdRRRRRRRRRRRRRRRRRRRRRRRRRX/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + '567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eFwFVSCpPIPYj0HvVf+0ZiFxGnIychhj9KtQyTSNkiLZ7E5B/EVZorN1EZkXAJIQ4wM9x7GqYAAXCAgDHKnGMn0X/Oa0LeMJudcKx64iJz+OATVoOOh3E+oUipKayK33lB+opPKj/55r+VHlR8/Iv5U+iiiiiiiiiiiiiiiiiiiiiv/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + 'df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLm5eGQBVU5XPIJ7j0FQfb5sgiNcH2b39vapkvGPDIucjoTjBOPSrKuHHGencEU+ql1am4IIYA7cDIB757g1CunFWByAAOCMAg5yD07VcCEN0P/fZNS0UUUUUUUUUUUUUUUUUUUUUUUUUV/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + 'a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdLq6eBgFUH5c5IPqPQVANQmJUeWvPXhvUj09qspcM2cAnHHCE/rmpUl3nGx1+oxUlVLq1M7KQQPlI5APXHqDUKacyMDvHTsBk9fb3q4kXl5IYkk5OQB/ICpaKKKKKKKKKKKKKKKKKKKKKKKKKK/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + 'a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdbm4eF1CqDkZOQT3HoKr/b5vl/dpkj/awDnHp06fzqZLiRmIPk47fMQf1FXKKikgilOZEDHGOaZ9itsg+SuQMA08QoowNwHoGP+NO8serf99Gn0UUUUUUUUUUUUUUUUUUUUUUUUV//2Q==', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), + (rdflib.URIRef(pre_preview + 'dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50'), rdflib.URIRef(ns.bsp.asset), rdflib.Literal('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAyACQBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APdbm5eFwqqDkZ5B9QOw96rHUZgoPlLkgno3b8Kel7IzspVePYgdcck1YilaTA3JnqQFPT86sVQvoXkYFUDEKRz7np0NVWtZcAiLkd8Dg/8AfPqO3rWhEk6thsbc9mz+mP61Zoooooooooooooooooooooooooor/9k=', datatype=rdflib.URIRef(ns.bsl.BinaryBlob))), })) # NOTE: we don't check ns.bsm.t_created since it depends on the execution time. Triples would look like this: @@ -189,7 +189,7 @@ class TestIndex(unittest.TestCase): # (rdflib.URIRef(pre_file + '80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3'), rdflib.URIRef(ns.bsm.t_created), rdflib.Literal('1670..........', datatype=rdflib.XSD.integer)), # ... # instead, we simply check if there's such a predicate for each file - self.assertSetEqual({sub for sub, _ in bsfs._backend._graph.subject_objects(rdflib.URIRef(ns.bsm.t_created))}, { + self.assertSetEqual({sub for sub, _ in bsfs._backend._graph.subject_objects(rdflib.URIRef(ns.bsfs.Node().t_created))}, { rdflib.URIRef(pre_file + '2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647'), rdflib.URIRef(pre_file + '441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece'), rdflib.URIRef(pre_file + '69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871'), @@ -230,70 +230,70 @@ class TestIndex(unittest.TestCase): os.path.join(os.path.dirname(__file__), 'testfile'), ]) self.assertTrue((set(outbuf.getvalue().split('\n')) - {''}).issuperset({ - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.filename}) alpha_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.filename}) omega_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.filename}) td_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.filename}) testfile', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.filename}) bar_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.filename}) omega_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.filename}) alpha_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.filename}) foo_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.filename}) bar_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.filename}) foo_first', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.filename}) td_second', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.author}) Me, myself, and I', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.filename}) testimage.jpg', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.filename}) alpha_second', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.filename}) omega_second', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.filename}) td_first', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.filename}) testfile', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.filename}) bar_first', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.filename}) omega_first', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.filename}) alpha_first', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.filename}) foo_second', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.filename}) bar_second', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.filename}) foo_first', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.filename}) td_second', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.author}) Me, myself, and I', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.filename}) testimage.jpg', # features - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate(http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04) (91, 127, 121, 94, 138, 167, 163, 134, 190, 138, 170, 156, 121, 142, 159)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate(https://schema.bsfs.io/ie/Node/Entity#colors_spatial_0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04) (91, 127, 121, 94, 138, 167, 163, 134, 190, 138, 170, 156, 121, 142, 159)', # links to previews - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50)', - f'Node(http://bsfs.ai/schema/File, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.preview}) Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#2f4109b40107cc50e0884755a1a961ed126887e49b8dbaf0e146b2e226aa6647) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#441f3d10c8ff489fe8e33e639606512f6c463151cc429de7e554b9af670c2ece) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#69b98ecf7aff3e95b09688ba93331678eb8397817111f674c9558e6dd8f5e871) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#78f7eb7f0d8221cdb2cb26c978fa42a11f75eb87becc768f4474134cb1e06926) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#80818b8ec2ee1919116dba9c8a7e0a4608313cf3b463cd88e9ed77a700dd92d3) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#976d2ea0e58488678cc7e435fbfadabfb6eb6cf50ad51862f38f73729ed11795) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#997e2fbb7494a3818ec782d2bc87bf1cffafba6b9c0f658e4a6c18a723e944d3) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#a8af899ecdab60dfaea8ec7f934053624c80a1054539e163f2c7eaa986c2777d) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#accb115d266ad60c53cd01a7f7130f245886ce8eaf69bc85319febc11d9fe089) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#b8fd7fba818254166a6043195004138ebda6923e012442f819a2c49671136c70) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#d43758ace82154a1cc10ca0dfef63cb20dd831f9c87edd6dc06539eefe67371d) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50)', + f'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/file#d803187cbf3676ae9d38126270a6152c60431589aa3bb3824baf8954e9c097f1) Predicate({ns.bse.preview}) Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50)', # preview dimensions - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50) Predicate({ns.bsp.height}) 33', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50) Predicate({ns.bsp.width}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50) Predicate({ns.bsp.width}) 36', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50) Predicate({ns.bsp.height}) 50', - f'Node(http://bsfs.ai/schema/Preview, http://example.com/me/preview#df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50) Predicate({ns.bsp.height}) 33', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#2656e303d7218300326df73b64f312d8b37eb980358be27a38b5f63dae259be3_s50) Predicate({ns.bsp.width}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#26f16643b2570ac5b2d1f8c373d492cb724aae2dd8d71a0b63647838ed651254_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#567049149769e1d02e6af6cfee3991f7cf0cbc935cbf6a566047f40155fb13a8_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#5d1235838c3d501204bb09c2de563d7e4a7fd17b7ec4ff302221c0e88c4741aa_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#79cb8a7e6369361a4f4cb7ff729c1ed3fcf87204769623d6fbd6ebfae601e5c7_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#7a975385a110c21fcd12e238fab9501550fa02f6328749068a3bffd65e291027_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#968b9aa178585bc8d1fca0e4e32b8cf30b3941eff72f34e320584aaae8fd23ac_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#9827509a74a60dfceed11936f7f624e9c932f66c8c0d20d355d56f8c3c9b56b1_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#a63c84e647138a2b68113474212f6aee542b3707171ff178551db3c296e59817_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#a8b3245636074d5370283b690281abda8ffdff12ce8b1af77c8bc0a4c85be860_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#dbfd8ebc0557c4925e9ff8411629a74a15eca934a4c2a6bd3134dd81d2f95a36_s50) Predicate({ns.bsp.width}) 36', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50) Predicate({ns.bsp.height}) 50', + f'Node(https://schema.bsfs.io/ie/Node/Preview, http://example.com/me/preview#df2185d8927ccef65c92fc90b94e800b02791354d8dede9dd9aa0e2c2cb1e91e_s50) Predicate({ns.bsp.width}) 36', # assets # ... (not checked) })) diff --git a/test/apps/test_info.py b/test/apps/test_info.py index d705629..ffcaecf 100644 --- a/test/apps/test_info.py +++ b/test/apps/test_info.py @@ -31,11 +31,11 @@ class TestIndex(unittest.TestCase): {'bsie.extractor.generic.constant.Constant': { 'schema': ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''', - 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], + 'tuples': [['https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I']], }}, {'bsie.extractor.image.colors_spatial.ColorsSpatial': { 'width': 2, @@ -60,14 +60,14 @@ class TestIndex(unittest.TestCase): main(['--config', self.config_path, 'predicates']) # verify output self.assertSetEqual({pred for pred in outbuf.getvalue().split('\n') if pred != ''}, { - 'http://bsfs.ai/schema/Entity#author', - 'http://bsfs.ai/schema/Predicate', - 'http://bsfs.ai/schema/Entity#filename', - 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', - 'http://bsfs.ai/schema/Entity#preview', - 'http://bsfs.ai/schema/Preview#width', - 'http://bsfs.ai/schema/Preview#height', - 'http://bsfs.ai/schema/Preview#asset', + 'https://schema.bsfs.io/ie/Node/Entity#author', + 'https://schema.bsfs.io/core/Predicate', + 'https://schema.bsfs.io/ie/Node/Entity#filename', + 'https://schema.bsfs.io/ie/Node/Entity#colors_spatial_0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', + 'https://schema.bsfs.io/ie/Node/Entity#preview', + 'https://schema.bsfs.io/ie/Node/Preview#width', + 'https://schema.bsfs.io/ie/Node/Preview#height', + 'https://schema.bsfs.io/ie/Node/Preview#asset', }) def test_schema(self): @@ -78,14 +78,14 @@ class TestIndex(unittest.TestCase): # verify output schema = bsfs.schema.from_string(outbuf.getvalue()) self.assertSetEqual({pred.uri for pred in schema.predicates()}, { - 'http://bsfs.ai/schema/Entity#author', - 'http://bsfs.ai/schema/Predicate', - 'http://bsfs.ai/schema/Entity#filename', - 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', - 'http://bsfs.ai/schema/Entity#preview', - 'http://bsfs.ai/schema/Preview#width', - 'http://bsfs.ai/schema/Preview#height', - 'http://bsfs.ai/schema/Preview#asset', + 'https://schema.bsfs.io/ie/Node/Entity#author', + 'https://schema.bsfs.io/core/Predicate', + 'https://schema.bsfs.io/ie/Node/Entity#filename', + 'https://schema.bsfs.io/ie/Node/Entity#colors_spatial_0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', + 'https://schema.bsfs.io/ie/Node/Entity#preview', + 'https://schema.bsfs.io/ie/Node/Preview#width', + 'https://schema.bsfs.io/ie/Node/Preview#height', + 'https://schema.bsfs.io/ie/Node/Preview#asset', }) def test_invalid(self): diff --git a/test/apps/test_loader.py b/test/apps/test_loader.py index 20254ec..4670266 100644 --- a/test/apps/test_loader.py +++ b/test/apps/test_loader.py @@ -27,7 +27,7 @@ class TestLoader(unittest.TestCase): # pipeline contains only default predicates pipeline = load_pipeline(path) self.assertSetEqual({pred.uri for pred in pipeline.schema.predicates()}, { - 'http://bsfs.ai/schema/Predicate', + 'https://schema.bsfs.io/core/Predicate', }) # pipeline is built according to configured extractors @@ -41,11 +41,11 @@ class TestLoader(unittest.TestCase): {'bsie.extractor.generic.constant.Constant': { 'schema': ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''', - 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], + 'tuples': [['https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I']], }}, {'bsie.extractor.image.colors_spatial.ColorsSpatial': { 'width': 2, @@ -61,14 +61,14 @@ class TestLoader(unittest.TestCase): # pipeline contains all defined predicates pipeline = load_pipeline(path) self.assertSetEqual({pred.uri for pred in pipeline.schema.predicates()}, { - 'http://bsfs.ai/schema/Entity#author', - 'http://bsfs.ai/schema/Predicate', - 'http://bsfs.ai/schema/Entity#filename', - 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', - 'http://bsfs.ai/schema/Entity#preview', - 'http://bsfs.ai/schema/Preview#width', - 'http://bsfs.ai/schema/Preview#height', - 'http://bsfs.ai/schema/Preview#asset', + 'https://schema.bsfs.io/ie/Node/Entity#author', + 'https://schema.bsfs.io/core/Predicate', + 'https://schema.bsfs.io/ie/Node/Entity#filename', + 'https://schema.bsfs.io/ie/Node/Entity#colors_spatial_0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', + 'https://schema.bsfs.io/ie/Node/Entity#preview', + 'https://schema.bsfs.io/ie/Node/Preview#width', + 'https://schema.bsfs.io/ie/Node/Preview#height', + 'https://schema.bsfs.io/ie/Node/Preview#asset', }) # config file must exist diff --git a/test/apps/test_main.py b/test/apps/test_main.py index a1d8a49..4fa094b 100644 --- a/test/apps/test_main.py +++ b/test/apps/test_main.py @@ -43,9 +43,9 @@ class TestMain(unittest.TestCase): with contextlib.redirect_stdout(outbuf): main(['info', '--config', self.config_path, 'predicates']) self.assertEqual(set(outbuf.getvalue().strip().split('\n')), { - 'http://bsfs.ai/schema/Entity#filename', - 'http://bsfs.ai/schema/Entity#filesize', - 'http://bsfs.ai/schema/Predicate', + 'https://schema.bsfs.io/ie/Node/Entity#filename', + 'https://schema.bsfs.io/ie/Node/Entity#filesize', + 'https://schema.bsfs.io/core/Predicate', }) diff --git a/test/extractor/generic/test_constant.py b/test/extractor/generic/test_constant.py index db55852..77ee02b 100644 --- a/test/extractor/generic/test_constant.py +++ b/test/extractor/generic/test_constant.py @@ -15,11 +15,11 @@ class TestConstant(unittest.TestCase): def test_extract(self): schema = ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:comment rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "false"^^xsd:boolean . ''' @@ -28,10 +28,10 @@ class TestConstant(unittest.TestCase): (ns.bse.comment, 'the quick brown fox jumps over the lazy dog.'), ] ext = Constant(schema, tuples) - node = _node.Node(ns.bsfs.Entity, '') # Blank node + node = _node.Node(ns.bsn.Entity, '') # Blank node p_author = ext.schema.predicate(ns.bse.author) p_comment = ext.schema.predicate(ns.bse.comment) - entity = ext.schema.node(ns.bsfs.Node).child(ns.bsfs.Entity) + entity = ext.schema.node(ns.bsfs.Node).child(ns.bsn.Entity) string = ext.schema.literal(ns.bsfs.Literal).child(ns.xsd.string) # baseline self.assertSetEqual(set(ext.extract(node, None, (p_author, p_comment))), @@ -50,11 +50,11 @@ class TestConstant(unittest.TestCase): # schema compliance schema = ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:comment rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "false"^^xsd:boolean . ''' @@ -75,13 +75,13 @@ class TestConstant(unittest.TestCase): def test_eq(self): schema_a = ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''' schema_b = ''' bse:comment rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "false"^^xsd:boolean . ''' diff --git a/test/extractor/generic/test_path.py b/test/extractor/generic/test_path.py index d40a28c..0beb37e 100644 --- a/test/extractor/generic/test_path.py +++ b/test/extractor/generic/test_path.py @@ -26,17 +26,17 @@ class TestPath(unittest.TestCase): self.assertEqual(Path().schema, bsfs.schema.from_string(base.SCHEMA_PREAMBLE + ''' bse:filename rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''')) def test_extract(self): ext = Path() - node = _node.Node(ns.bsfs.File, '') # Blank node + node = _node.Node(ns.bsn.Entity, '') # Blank node content = '/tmp/foo/bar' p_filename = ext.schema.predicate(ns.bse.filename) - entity = ext.schema.node(ns.bsfs.Node).child(ns.bsfs.Entity) + entity = ext.schema.node(ns.bsfs.Node).child(ns.bsn.Entity) string = ext.schema.literal(ns.bsfs.Literal).child(ns.xsd.string) # baseline diff --git a/test/extractor/generic/test_stat.py b/test/extractor/generic/test_stat.py index 8868546..0e83e24 100644 --- a/test/extractor/generic/test_stat.py +++ b/test/extractor/generic/test_stat.py @@ -27,17 +27,17 @@ class TestStat(unittest.TestCase): self.assertEqual(Stat().schema, bsfs.schema.from_string(base.SCHEMA_PREAMBLE + ''' bse:filesize rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . ''')) def test_extract(self): ext = Stat() - node = _node.Node(ns.bsfs.File, '') # Blank node + node = _node.Node(ns.bsn.Entity, '') # Blank node content = os.stat(__file__) p_filesize = ext.schema.predicate(ns.bse.filesize) - entity = ext.schema.node(ns.bsfs.Node).child(ns.bsfs.Entity) + entity = ext.schema.node(ns.bsfs.Node).child(ns.bsn.Entity) string = ext.schema.literal(ns.bsfs.Literal).child(ns.xsd.string) # baseline diff --git a/test/extractor/image/test_colors_spatial.py b/test/extractor/image/test_colors_spatial.py index 967aaf2..902ab6d 100644 --- a/test/extractor/image/test_colors_spatial.py +++ b/test/extractor/image/test_colors_spatial.py @@ -19,8 +19,8 @@ from bsie.extractor.image.colors_spatial import ColorsSpatial class TestColorsSpatial(unittest.TestCase): def setUp(self): # content id with default constructors (width=32, height=32, exp=4) - self.instance_prefix = 'http://ie.bsfs.ai/schema/Feature/ColorsSpatial' - self.predicate_prefix = 'http://bsfs.ai/schema/Entity/colors_spatial' + self.instance_prefix = 'https://schema.bsfs.io/ie/Literal/Array/Feature/ColorsSpatial' + self.predicate_prefix = 'https://schema.bsfs.io/ie/Node/Entity#colors_spatial_' self.uuid = 'adee8d6c43687021e1c5bffe56bcfe727f1638d792744137181304ef889dac2a' def test_essentials(self): @@ -50,7 +50,7 @@ class TestColorsSpatial(unittest.TestCase): def test_schema(self): schema = bsfs.schema.from_string(base.SCHEMA_PREAMBLE + f''' - <{self.instance_prefix}> rdfs:subClassOf bsfs:Feature ; + <{self.instance_prefix}> rdfs:subClassOf bsa:Feature ; # annotations rdfs:label "Spatially dominant colors"^^xsd:string ; schema:description "Domiant colors of subregions in an image."^^xsd:string ; @@ -63,8 +63,8 @@ class TestColorsSpatial(unittest.TestCase): <{self.instance_prefix}/args#height> "32"^^xsd:integer ; <{self.instance_prefix}/args#exp> "4"^^xsd:float . - <{self.predicate_prefix}#{self.uuid}> rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + <{self.predicate_prefix}{self.uuid}> rdfs:subClassOf bsfs:Predicate ; + rdfs:domain bsn:Entity ; rdfs:range <{self.instance_prefix}#{self.uuid}> ; bsfs:unique "true"^^xsd:boolean . ''') @@ -73,7 +73,7 @@ class TestColorsSpatial(unittest.TestCase): def test_extract(self): ext = ColorsSpatial(2,2,2) img = PIL.Image.open(os.path.join(os.path.dirname(__file__), 'testimage.jpg')) - node = _node.Node(ns.bsfs.Entity, bsfs.URI('http://example.com/entity#1234')) + node = _node.Node(ns.bsn.Entity, bsfs.URI('http://example.com/entity#1234')) principals = set(ext.principals) self.assertEqual(len(principals), 1) # valid invocation yields feature diff --git a/test/extractor/test_base.py b/test/extractor/test_base.py index bb1f73b..81865e1 100644 --- a/test/extractor/test_base.py +++ b/test/extractor/test_base.py @@ -15,11 +15,11 @@ class StubExtractor(base.Extractor): def __init__(self): super().__init__(bsfs.schema.from_string(base.SCHEMA_PREAMBLE + ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "false"^^xsd:boolean . bse:comment rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "false"^^xsd:boolean . ''')) @@ -48,8 +48,8 @@ class TestExtractor(unittest.TestCase): def test_principals(self): schema = bsfs.schema.Schema() - entity = schema.node(ns.bsfs.Node).child(ns.bsfs.Entity) - string = schema.literal(ns.bsfs.Literal).child(bsfs.URI('http://www.w3.org/2001/XMLSchema#string')) + entity = schema.node(ns.bsfs.Node).child(ns.bsn.Entity) + string = schema.literal(ns.bsfs.Literal).child(ns.xsd.string) p_author = schema.predicate(ns.bsfs.Predicate).child(ns.bse.author, domain=entity, range=string) p_comment = schema.predicate(ns.bsfs.Predicate).child(ns.bse.comment, domain=entity, range=string) ext = StubExtractor() diff --git a/test/extractor/test_builder.py b/test/extractor/test_builder.py index 1b8951a..fbb0895 100644 --- a/test/extractor/test_builder.py +++ b/test/extractor/test_builder.py @@ -46,33 +46,33 @@ class TestExtractorBuilder(unittest.TestCase): {'bsie.extractor.generic.constant.Constant': { 'schema': ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:rating rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . ''', 'tuples': [ - ('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I'), - ('http://bsfs.ai/schema/Entity#rating', 123), + ('https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I'), + ('https://schema.bsfs.io/ie/Node/Entity#rating', 123), ], }}]) obj = builder.build(0) import bsie.extractor.generic.constant self.assertEqual(obj, bsie.extractor.generic.constant.Constant(''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:rating rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . ''', [ - ('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I'), - ('http://bsfs.ai/schema/Entity#rating', 123), + ('https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I'), + ('https://schema.bsfs.io/ie/Node/Entity#rating', 123), ])) # building with invalid args diff --git a/test/extractor/test_preview.py b/test/extractor/test_preview.py index 0e0068d..6526783 100644 --- a/test/extractor/test_preview.py +++ b/test/extractor/test_preview.py @@ -40,28 +40,28 @@ class TestPreview(unittest.TestCase): def test_schema(self): self.assertEqual(Preview([1,2,3]).schema, bsfs.schema.from_string(base.SCHEMA_PREAMBLE + ''' - bsfs:Preview rdfs:subClassOf bsfs:Node . - bsfs:BinaryBlob rdfs:subClassOf bsfs:Literal . - bsfs:JPEG rdfs:subClassOf bsfs:BinaryBlob . + bsn:Preview rdfs:subClassOf bsfs:Node . + bsl:BinaryBlob rdfs:subClassOf bsfs:Literal . + rdfs:subClassOf bsl:BinaryBlob . bse:preview rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; - rdfs:range bsfs:Preview ; + rdfs:domain bsn:Entity ; + rdfs:range bsn:Preview ; bsfs:unique "false"^^xsd:boolean . bsp:width rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Preview ; + rdfs:domain bsn:Preview ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . bsp:height rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Preview ; + rdfs:domain bsn:Preview ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . bsp:asset rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Preview ; - rdfs:range bsfs:JPEG ; + rdfs:domain bsn:Preview ; + rdfs:range ; bsfs:unique "true"^^xsd:boolean . ''')) @@ -69,7 +69,7 @@ class TestPreview(unittest.TestCase): def test_extract(self): # setup dependents rdr = Reader() - subject = _node.Node(ns.bsfs.File) + subject = _node.Node(ns.bsn.Entity) path = os.path.join(os.path.dirname(__file__), 'testimage.jpg') # setup extractor @@ -83,7 +83,7 @@ class TestPreview(unittest.TestCase): gen(10) # NOTE: consume some image to avoid resource error warning # extract a preview triples = set(ext.extract(subject, rdr(path), principals)) - thumbs = {node for node, _, _ in triples if node.node_type == ns.bsfs.Preview} + thumbs = {node for node, _, _ in triples if node.node_type == ns.bsn.Preview} self.assertEqual(len(thumbs), 1) thumb = list(thumbs)[0] # test properties @@ -107,7 +107,7 @@ class TestPreview(unittest.TestCase): self.assertEqual(principals, {ext.schema.predicate(ns.bse.preview)}) # extract a preview triples = set(ext.extract(subject, rdr(path), principals)) - thumbs = {node for node, _, _ in triples if node.node_type == ns.bsfs.Preview} + thumbs = {node for node, _, _ in triples if node.node_type == ns.bsn.Preview} self.assertEqual(len(thumbs), 2) self.assertSetEqual({10, 20}, { value for _, pred, value in triples if pred == ext.schema.predicate(ns.bsp.width)}) diff --git a/test/lib/test_bsie.py b/test/lib/test_bsie.py index 52da8b8..0c393cc 100644 --- a/test/lib/test_bsie.py +++ b/test/lib/test_bsie.py @@ -25,17 +25,17 @@ class TestBSIE(unittest.TestCase): {'bsie.extractor.generic.path.Path': {}}, {'bsie.extractor.generic.stat.Stat': {}}, {'bsie.extractor.generic.constant.Constant': dict( - tuples=[('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I')], + tuples=[('https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I')], schema=''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''', )}, ]) # build pipeline - self.naming_policy = DefaultNamingPolicy(host='http://example.com/local', user='') + self.naming_policy = DefaultNamingPolicy(host='http://example.com/local', user='me') pbuild = PipelineBuilder(rbuild, ebuild) self.pipeline = pbuild.build() @@ -49,17 +49,17 @@ class TestBSIE(unittest.TestCase): }) self.assertEqual(lib.schema, bsfs.schema.from_string(SCHEMA_PREAMBLE + ''' bse:filename rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:filesize rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer; bsfs:unique "true"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''')) @@ -76,12 +76,12 @@ class TestBSIE(unittest.TestCase): }) self.assertEqual(lib.schema, bsfs.schema.from_string(SCHEMA_PREAMBLE + ''' bse:filesize rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer; bsfs:unique "true"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''')) @@ -94,17 +94,17 @@ class TestBSIE(unittest.TestCase): }) self.assertEqual(lib.schema, bsfs.schema.from_string(SCHEMA_PREAMBLE + ''' bse:filename rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:filesize rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer; bsfs:unique "true"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . @@ -121,7 +121,7 @@ class TestBSIE(unittest.TestCase): }) self.assertEqual(lib.schema, bsfs.schema.from_string(SCHEMA_PREAMBLE + ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''')) @@ -136,7 +136,7 @@ class TestBSIE(unittest.TestCase): }) self.assertEqual(lib.schema, bsfs.schema.from_string(SCHEMA_PREAMBLE + ''' bse:filesize rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer; bsfs:unique "true"^^xsd:boolean . @@ -152,7 +152,7 @@ class TestBSIE(unittest.TestCase): ns.bse.author, }) content_hash = 'a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447' - subject = node.Node(ns.bsfs.File, uri=f'http://example.com/local/file#{content_hash}') + subject = node.Node(ns.bsn.Entity, uri=f'http://example.com/local/me/file#{content_hash}') testfile = os.path.join(os.path.dirname(__file__), 'testfile.t') # from_file extracts all available triples diff --git a/test/lib/test_builder.py b/test/lib/test_builder.py index 2bd1994..3ecb3d3 100644 --- a/test/lib/test_builder.py +++ b/test/lib/test_builder.py @@ -18,11 +18,11 @@ class TestPipelineBuilder(unittest.TestCase): def test_build(self): c_schema = ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:Entity ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''' - c_tuples = [('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I')] + c_tuples = [('https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I')] # prepare builders rbuild = ReaderBuilder({}) ebuild = ExtractorBuilder([ diff --git a/test/lib/test_naming_policy.py b/test/lib/test_naming_policy.py index b2a3649..c9b0cd2 100644 --- a/test/lib/test_naming_policy.py +++ b/test/lib/test_naming_policy.py @@ -21,55 +21,55 @@ class TestDefaultNamingPolicy(unittest.TestCase): policy = DefaultNamingPolicy('http://example.com', 'me') # handle_node doesn't modify existing uris self.assertEqual(policy.handle_node( - Node(ns.bsfs.Entity, uri='http://example.com/you/foo#bar')).uri, + Node(ns.bsn.Invalid, uri='http://example.com/you/foo#bar')).uri, URI('http://example.com/you/foo#bar')) # processes bsfs:File self.assertEqual(policy.handle_node( - Node(ns.bsfs.File, ucid='abc123cba')).uri, + Node(ns.bsn.Entity, ucid='abc123cba')).uri, URI('http://example.com/me/file#abc123cba')) # processes bsfs:Preview self.assertEqual(policy.handle_node( - Node(ns.bsfs.Preview, ucid='abc123cba', size=123)).uri, + Node(ns.bsn.Preview, ucid='abc123cba', size=123)).uri, URI('http://example.com/me/preview#abc123cba_s123')) # raises an exception on unknown types self.assertRaises(errors.ProgrammingError, policy.handle_node, - Node(ns.bsfs.Entity, ucid='abc123cba', size=123)) + Node(ns.bsn.Invalid, ucid='abc123cba', size=123)) def test_name_file(self): # setup policy = DefaultNamingPolicy('http://example.com', 'me') # name_file uses ucid self.assertEqual(policy.name_file( - Node(ns.bsfs.File, ucid='123abc321')).uri, + Node(ns.bsn.Entity, ucid='123abc321')).uri, URI('http://example.com/me/file#123abc321')) # name_file falls back to a random guid self.assertTrue(policy.name_file( - Node(ns.bsfs.File)).uri.startswith('http://example.com/me/file#')) + Node(ns.bsn.Entity)).uri.startswith('http://example.com/me/file#')) def test_name_preview(self): # setup policy = DefaultNamingPolicy('http://example.com', 'me') # name_preview uses ucid self.assertEqual(policy.name_preview( - Node(ns.bsfs.Preview, ucid='123abc321')).uri, + Node(ns.bsn.Preview, ucid='123abc321')).uri, URI('http://example.com/me/preview#123abc321')) self.assertEqual(policy.name_preview( - Node(ns.bsfs.Preview, ucid='123abc321', size=400)).uri, + Node(ns.bsn.Preview, ucid='123abc321', size=400)).uri, URI('http://example.com/me/preview#123abc321_s400')) # name_preview uses source self.assertEqual(policy.name_preview( - Node(ns.bsfs.Preview, source=Node(ns.bsfs.File, ucid='123file321'))).uri, + Node(ns.bsn.Preview, source=Node(ns.bsn.Entity, ucid='123file321'))).uri, URI('http://example.com/me/preview#123file321')) self.assertEqual(policy.name_preview( - Node(ns.bsfs.Preview, source=Node(ns.bsfs.File, ucid='123file321'), size=300)).uri, + Node(ns.bsn.Preview, source=Node(ns.bsn.Entity, ucid='123file321'), size=300)).uri, URI('http://example.com/me/preview#123file321_s300')) # name_preview falls back to a random guid self.assertTrue(policy.name_preview( - Node(ns.bsfs.Preview)).uri.startswith('http://example.com/me/preview#')) + Node(ns.bsn.Preview)).uri.startswith('http://example.com/me/preview#')) self.assertTrue(policy.name_preview( - Node(ns.bsfs.Preview, size=200)).uri.startswith('http://example.com/me/preview#')) + Node(ns.bsn.Preview, size=200)).uri.startswith('http://example.com/me/preview#')) self.assertTrue(policy.name_preview( - Node(ns.bsfs.Preview, size=200)).uri.endswith('_s200')) + Node(ns.bsn.Preview, size=200)).uri.endswith('_s200')) class TestNamingPolicyIterator(unittest.TestCase): @@ -94,16 +94,16 @@ class TestNamingPolicyIterator(unittest.TestCase): # setup policy = DefaultNamingPolicy('http://example.com', 'me') triples = [ - (Node(ns.bsfs.File, ucid='foo'), 'predA', 'hello'), - (Node(ns.bsfs.Preview, ucid='bar'), 'predB', 1234), - (Node(ns.bsfs.Preview, ucid='hello'), 'predC', Node(ns.bsfs.File, ucid='world')) + (Node(ns.bsn.Entity, ucid='foo'), 'predA', 'hello'), + (Node(ns.bsn.Preview, ucid='bar'), 'predB', 1234), + (Node(ns.bsn.Preview, ucid='hello'), 'predC', Node(ns.bsn.Entity, ucid='world')) ] # handles nodes, handles values, ignores predicate self.assertListEqual(list(policy(triples)), [ - (Node(ns.bsfs.File, uri='http://example.com/me/file#foo'), 'predA', 'hello'), - (Node(ns.bsfs.Preview, uri='http://example.com/me/preview#bar'), 'predB', 1234), - (Node(ns.bsfs.Preview, uri='http://example.com/me/preview#hello'), 'predC', - Node(ns.bsfs.File, uri='http://example.com/me/file#world')), + (Node(ns.bsn.Entity, uri='http://example.com/me/file#foo'), 'predA', 'hello'), + (Node(ns.bsn.Preview, uri='http://example.com/me/preview#bar'), 'predB', 1234), + (Node(ns.bsn.Preview, uri='http://example.com/me/preview#hello'), 'predC', + Node(ns.bsn.Entity, uri='http://example.com/me/file#world')), ]) diff --git a/test/lib/test_pipeline.py b/test/lib/test_pipeline.py index 5125a5c..eb088a9 100644 --- a/test/lib/test_pipeline.py +++ b/test/lib/test_pipeline.py @@ -23,19 +23,19 @@ class TestPipeline(unittest.TestCase): # constant A csA = ''' bse:author rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''' - tupA = [('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I')] + tupA = [('https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I')] # constant B csB = ''' bse:rating rdfs:subClassOf bsfs:Predicate ; - rdfs:domain bsfs:File ; + rdfs:domain bsn:Entity ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . ''' - tupB = [('http://bsfs.ai/schema/Entity#rating', 123)] + tupB = [('https://schema.bsfs.io/ie/Node/Entity#rating', 123)] # extractors/readers self.ext2rdr = { bsie.extractor.generic.path.Path(): bsie.reader.path.Path(), @@ -84,13 +84,13 @@ class TestPipeline(unittest.TestCase): pipeline = Pipeline(self.ext2rdr) # build objects for tests content_hash = 'a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447' - subject = node.Node(ns.bsfs.File, ucid=content_hash) + subject = node.Node(ns.bsn.Entity, ucid=content_hash) testfile = os.path.join(os.path.dirname(__file__), 'testfile.t') p_filename = pipeline.schema.predicate(ns.bse.filename) p_filesize = pipeline.schema.predicate(ns.bse.filesize) p_author = pipeline.schema.predicate(ns.bse.author) p_rating = pipeline.schema.predicate(ns.bse.rating) - entity = pipeline.schema.node(ns.bsfs.File) + entity = pipeline.schema.node(ns.bsn.Entity) p_invalid = pipeline.schema.predicate(ns.bsfs.Predicate).child(ns.bse.foo, range=entity) # extract given predicates diff --git a/test/utils/test_node.py b/test/utils/test_node.py index 918ce42..c0662a1 100644 --- a/test/utils/test_node.py +++ b/test/utils/test_node.py @@ -70,17 +70,17 @@ class TestNode(unittest.TestCase): def test_str(self): uri = bsfs.URI('http://example.com/me/entity#1234') # basic string conversion - node = Node(ns.bsfs.Entity, uri) - self.assertEqual(str(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#1234)') - self.assertEqual(repr(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#1234)') + node = Node(ns.bsn.Entity, uri) + self.assertEqual(str(node), 'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/entity#1234)') + self.assertEqual(repr(node), 'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/entity#1234)') # string conversion respects node_type - node = Node(ns.bsfs.Foo, uri) - self.assertEqual(str(node), 'Node(http://bsfs.ai/schema/Foo, http://example.com/me/entity#1234)') - self.assertEqual(repr(node), 'Node(http://bsfs.ai/schema/Foo, http://example.com/me/entity#1234)') + node = Node(ns.bsn.Foo, uri) + self.assertEqual(str(node), 'Node(https://schema.bsfs.io/ie/Node/Foo, http://example.com/me/entity#1234)') + self.assertEqual(repr(node), 'Node(https://schema.bsfs.io/ie/Node/Foo, http://example.com/me/entity#1234)') # string conversion respects uri - node = Node(ns.bsfs.Entity, bsfs.URI('http://example.com/me/entity#4321')) - self.assertEqual(str(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#4321)') - self.assertEqual(repr(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#4321)') + node = Node(ns.bsn.Entity, bsfs.URI('http://example.com/me/entity#4321')) + self.assertEqual(str(node), 'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/entity#4321)') + self.assertEqual(repr(node), 'Node(https://schema.bsfs.io/ie/Node/Entity, http://example.com/me/entity#4321)') -- cgit v1.2.3