From 4b894c4fb146a01abb841c2ab90af6969061b398 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Tue, 13 Dec 2022 17:09:35 +0100
Subject: [PATCH] WIP: file storage refactoring: directory

---
 src/caosdb/__init__.py      |  3 ++-
 src/caosdb/common/models.py | 36 +++++++++++++++++++++++++++++++++---
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/caosdb/__init__.py b/src/caosdb/__init__.py
index 58c4aebb..78a17aef 100644
--- a/src/caosdb/__init__.py
+++ b/src/caosdb/__init__.py
@@ -45,7 +45,8 @@ from caosdb.common.models import (ACL, ALL, FIX, NONE, OBLIGATORY, RECOMMENDED,
                                   File, Info, Message, Permissions, Property,
                                   Query, QueryTemplate, Record, RecordType,
                                   delete, execute_query, get_global_acl,
-                                  get_known_permissions, raise_errors)
+                                  get_known_permissions, raise_errors,
+                                  Directory)
 from caosdb.configuration import _read_config_files, configure, get_config
 from caosdb.connection.connection import configure_connection, get_connection
 from caosdb.exceptions import *
diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py
index 7809b43d..4bd5e5a5 100644
--- a/src/caosdb/common/models.py
+++ b/src/caosdb/common/models.py
@@ -1706,9 +1706,7 @@ class Property(Entity):
 
 class Message(object):
 
-    # @ReservedAssignment
-
-    def __init__(self, type, code=None, description=None, body=None):  # @ReservedAssignment
+    def __init__(self, type, code=None, description=None, body=None):
         self.type = type
         self.code = code
         self.description = description
@@ -1819,6 +1817,37 @@ class Record(Entity):
         return Entity.to_xml(self, xml, add_properties=ALL)
 
 
+class Directory(Record):
+    """This class represents CaosDB's directory entities."""
+
+    def __init__(self, name=None, id=None, description=None, path=None):
+        Record.__init__(self, id=id, name=name, description=description)
+        self.role = "Directory"
+        self.datatype = None
+
+        # location in the fileserver
+        self.path = path
+
+    def to_xml(self, xml=None, add_properties=ALL, local_serialization=False):
+        """Convert this Directory to an xml element.
+
+        @return: xml element
+        """
+
+        if xml is None:
+            xml = etree.Element("Directory")
+
+        return Entity.to_xml(self, xml=xml, add_properties=add_properties,
+                             local_serialization=local_serialization)
+
+    def add_property(self, property=None, id=None, name=None, description=None, datatype=None,
+                     value=None, unit=None, importance=FIX, inheritance=FIX):
+
+        return super().add_property(
+            property=property, id=id, name=name, description=description, datatype=datatype,
+            value=value, unit=unit, importance=importance, inheritance=inheritance)
+
+
 class File(Record):
 
     """This class represents CaosDB's file entities.
@@ -4385,6 +4414,7 @@ def _parse_single_xml_element(elem):
         'recordtype': RecordType,
         'property': Property,
         'file': File,
+        'directory': Directory,
         'parent': Parent,
         'entity': Entity}
 
-- 
GitLab