diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py index ec45dec070d1ea731648fe8d45e44ba89e393f76..5a2e9cd3b2506ac1c74d967f675d963e12e9b4e5 100644 --- a/src/caosdb/common/models.py +++ b/src/caosdb/common/models.py @@ -1684,6 +1684,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 file 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): # @ReservedAssignment + + 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. @@ -2931,6 +2962,11 @@ class Container(list): sync_remote_entities = [] for remote_entity in remote_container: + + # legacy API - remove new directories. + if unique and remote_entity.role is not None and remote_entity.role.lower() == "directory": + continue; + if not (remote_entity in used_remote_entities): sync_remote_entities.append(remote_entity) @@ -3367,10 +3403,10 @@ class Container(list): def insert(self, strict=False, raise_exception_on_error=True, unique=True, sync=True, flags=None): - """Insert this file entity into CaosDB. A successful insertion will - generate a new persistent ID for this entity. This entity can be - identified, retrieved, updated, and deleted via this ID until it has - been deleted. + """Insert these entities into CaosDB. A successful insertion will + generate a persistent ID for the new entities. These entities can be + identified, retrieved, updated, and deleted via their ID until they + have been deleted. If the insertion fails, a CaosDBException will be raised. The server will have returned at least one error-message describing the reason why it failed in that case (call @@ -4215,6 +4251,7 @@ def _parse_single_xml_element(elem): 'recordtype': RecordType, 'property': Property, 'file': File, + 'directory': Directory, 'parent': Parent, 'entity': Entity}