aboutsummaryrefslogtreecommitdiffstats
path: root/tagit/apps
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-03-04 16:00:46 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-03-04 16:00:46 +0100
commit01a4c2fc4bcbcce26c29dc9771dedeef5256156b (patch)
treeaafea6125f413f6862bb79ad9c9ef5b35a6b7dd3 /tagit/apps
parent9bdf4d104a299577634061bcf698d1c9e5708cce (diff)
downloadtagit-01a4c2fc4bcbcce26c29dc9771dedeef5256156b.tar.gz
tagit-01a4c2fc4bcbcce26c29dc9771dedeef5256156b.tar.bz2
tagit-01a4c2fc4bcbcce26c29dc9771dedeef5256156b.zip
schema requirements checking
Diffstat (limited to 'tagit/apps')
-rw-r--r--tagit/apps/desktop.py17
-rw-r--r--tagit/apps/port-schema.nt115
2 files changed, 6 insertions, 126 deletions
diff --git a/tagit/apps/desktop.py b/tagit/apps/desktop.py
index b02c8f1..d934649 100644
--- a/tagit/apps/desktop.py
+++ b/tagit/apps/desktop.py
@@ -10,6 +10,7 @@ import typing
# kivy imports
from kivy.app import App
+from kivy.resources import resource_find
from kivy.uix.settings import SettingsWithSidebar
# tagit imports
@@ -41,21 +42,15 @@ class TagitApp(App):
cfg = load_settings(TAGITRC, 0)
- # FIXME: mb/port/bsfs
# open BSFS storage
store = bsfs.Open(cfg('session', 'bsfs'))
# check storage schema
- # FIXME: Move somewhere else?!
- with open(os.path.join(os.path.dirname(__file__), 'port-schema.nt'), 'rt') as ifile:
+ with open(resource_find('required_schema.nt'), 'rt') as ifile:
required_schema = bsfs.schema.from_string(ifile.read())
- # FIXME: Since the store isn't persistent, we migrate to the required one here.
- #if not required_schema <= store.schema:
- # raise Exception('')
- store.migrate(required_schema)
-
- # FIXME: debug: add some data to the storage
- from . import port_data
- port_data.add_port_data(store)
+ if not required_schema.consistent_with(store.schema):
+ raise Exception("The storage's schema is incompatible with tagit's requirements")
+ if not required_schema <= store.schema:
+ store.migrate(required_schema | store.schema)
# create widget
return desktop.MainWindow(cfg, store, None) # FIXME: expects cfg, stor, log arguments
diff --git a/tagit/apps/port-schema.nt b/tagit/apps/port-schema.nt
deleted file mode 100644
index 2e70cad..0000000
--- a/tagit/apps/port-schema.nt
+++ /dev/null
@@ -1,115 +0,0 @@
-# common external prefixes
-prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
-prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
-prefix xsd: <http://www.w3.org/2001/XMLSchema#>
-prefix schema: <http://schema.org/>
-
-# common bsfs prefixes
-prefix bsfs: <https://schema.bsfs.io/core/>
-prefix bsl: <https://schema.bsfs.io/core/Literal/>
-prefix bsn: <https://schema.bsfs.io/ie/Node/>
-prefix bse: <https://schema.bsfs.io/ie/Node/Entity#>
-prefix bst: <https://schema.bsfs.io/ie/Node/Tag#>
-prefix bsg: <https://schema.bsfs.io/ie/Node/Group#>
-prefix bsp: <https://schema.bsfs.io/ie/Node/Preview#>
-
-# essential nodes
-bsn:Entity rdfs:subClassOf bsfs:Node .
-bsn:Preview rdfs:subClassOf bsfs:Node .
-bsn:Tag rdfs:subClassOf bsfs:Node .
-bsn:Group rdfs:subClassOf bsfs:Node .
-
-# common definitions
-bsl:BinaryBlob rdfs:subClassOf bsfs:Literal .
-bsl:URI rdfs:subClassOf bsfs:Literal .
-bsl:Number rdfs:subClassOf bsfs:Literal .
-bsl:Time rdfs:subClassOf bsfs:Literal .
-<https://schema.bsfs.io/ie/Literal/BinaryBlob/JPEG> rdfs:subClassOf bsl:BinaryBlob .
-xsd:string rdfs:subClassOf bsfs:Literal .
-xsd:integer rdfs:subClassOf bsl:Number .
-xsd:float rdfs:subClassOf bsl:Number .
-
-bse:filename rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range xsd:string ;
- rdfs:label "File name"^^xsd:string ;
- schema:description "Filename of entity in some filesystem."^^xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
-
-bse:filesize rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range xsd:integer ;
- rdfs:label "File size"^^xsd:string ;
- schema:description "File size of entity in some filesystem."^^xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
-
-bse:mime rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
-
-bse:preview rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range bsn:Preview .
-
-bse:tag rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range bsn:Tag .
-
-bst:label rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Tag ;
- rdfs:range xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
-
-bse:comment rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:Node ;
- rdfs:range xsd:string .
-
-bse:group rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range bsn:Group .
-
-bsg:label rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Group ;
- rdfs:range xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
-
-bsg:represented_by rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Group ;
- rdfs:range bsn:Entity ;
- bsfs:unique "true"^^xsd:boolean .
-
-bse:longitude rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range xsd:float ;
- bsfs:unique "true"^^xsd:boolean .
-
-bse:latitude rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Entity ;
- rdfs:range xsd:float ;
- bsfs:unique "true"^^xsd:boolean .
-
-
-## preview nodes
-
-bsp:width rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Preview ;
- rdfs:range xsd:integer ;
- bsfs:unique "true"^^xsd:boolean .
-
-bsp:height rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Preview ;
- rdfs:range xsd:integer ;
- bsfs:unique "true"^^xsd:boolean .
-
-bsp:orientation rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Preview ;
- rdfs:range xsd:integer ;
- bsfs:unique "true"^^xsd:boolean .
-
-bsp:asset rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsn:Preview ;
- rdfs:range <https://schema.bsfs.io/ie/Literal/BinaryBlob/JPEG> ;
- bsfs:unique "true"^^xsd:boolean .
-
-