aboutsummaryrefslogtreecommitdiffstats
path: root/bsie/lib
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-04-17 18:47:58 +0200
committerMatthias Baumgartner <dev@igsor.net>2023-04-17 18:47:58 +0200
commitbe6027859c815e18b08a49ca1a45df3fc0aac301 (patch)
treee978249655fcab58f9ee1479c268ca8b06af7e8d /bsie/lib
parentaf81318ae9311fd0b0e16949cef3cfaf7996970b (diff)
parentaefd0cb4fa1a949beabc51e88a5c46843043a439 (diff)
downloadbsie-be6027859c815e18b08a49ca1a45df3fc0aac301.tar.gz
bsie-be6027859c815e18b08a49ca1a45df3fc0aac301.tar.bz2
bsie-be6027859c815e18b08a49ca1a45df3fc0aac301.zip
Merge branch 'mb/iptc' into develop
Diffstat (limited to 'bsie/lib')
-rw-r--r--bsie/lib/naming_policy.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/bsie/lib/naming_policy.py b/bsie/lib/naming_policy.py
index 9b9a45d..ffef7d9 100644
--- a/bsie/lib/naming_policy.py
+++ b/bsie/lib/naming_policy.py
@@ -4,6 +4,9 @@ import abc
import os
import typing
+# external imports
+import urllib.parse
+
# bsie imports
from bsie.utils import bsfs, errors, ns
from bsie.utils.node import Node
@@ -80,14 +83,16 @@ class DefaultNamingPolicy(NamingPolicy):
def handle_node(self, node: Node) -> Node:
if node.uri is not None:
return node
- if node.node_type == ns.bsn.Entity :
- return self.name_file(node)
+ if node.node_type == ns.bsn.Entity:
+ return self.name_entity(node)
if node.node_type == ns.bsn.Preview:
return self.name_preview(node)
- raise errors.ProgrammingError('no naming policy available for {node.node_type}')
+ if node.node_type == ns.bsn.Tag:
+ return self.name_tag(node)
+ raise errors.ProgrammingError(f'no naming policy available for {node.node_type}')
- def name_file(self, node: Node) -> Node:
- """Set a bsfs:File node's uri fragment to its ucid."""
+ def name_entity(self, node: Node) -> Node:
+ """Set a bsn:Entity node's uri fragment to its ucid."""
if 'ucid' in node.hints: # content id
fragment = node.hints['ucid']
else: # random name
@@ -96,7 +101,7 @@ class DefaultNamingPolicy(NamingPolicy):
return node
def name_preview(self, node: Node) -> Node:
- """Set a bsfs:Preview node's uri fragment to its ucid.
+ """Set a bsn:Preview node's uri fragment to its ucid.
Uses its source fragment as fallback. Appends the size if provided.
"""
fragment = None
@@ -112,4 +117,14 @@ class DefaultNamingPolicy(NamingPolicy):
node.uri = getattr(self._prefix.preview(), fragment)
return node
+ def name_tag(self, node: Node) -> Node:
+ # NOTE: Must ensure to produce the same name for that tags with the same label.
+ if 'label' in node.hints: # tag label
+ fragment = urllib.parse.quote(node.hints['label'])
+ else: # random name
+ fragment = self._uuid()
+ # FIXME: match to existing tags in bsfs storage!
+ node.uri = getattr(self._prefix.tag(), fragment)
+ return node
+
## EOF ##