Skip to content
Snippets Groups Projects
Commit 92588f0d authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

API: assure_object_is_in_list allows list of values

parent a6392966
No related branches found
No related tags found
No related merge requests found
......@@ -78,6 +78,7 @@ class AbstractCFood(object):
self.to_be_updated = db.Container()
self.identifiables = db.Container()
self.verbose = verbose
self.attached_ones = []
@staticmethod
def get_re():
......@@ -129,6 +130,16 @@ class AbstractCFood(object):
get_ids_for_entities_with_names(self.to_be_updated)
self.to_be_updated.update()
def attach(self, crawled_file):
self.attached_ones.append(crawled_file)
def looking_for(self, crawled_file):
"""
should set the instance variable Container with the identifiables
"""
return False
@staticmethod
# move to api?
def set_parents(entity, names):
......@@ -173,32 +184,48 @@ def assure_object_is_in_list(obj, containing_object, property_name,
`containing_object` should be updated.
If the property is missing, it is added first and then the entity is added.
If obj is a list, every element is added
"""
if containing_object.get_property(property_name) is None:
containing_object.add_property(property_name, value=[],
datatype=db.LIST(property_name))
current_list = containing_object.get_property(property_name).value
contained = False
for el in current_list:
if el == obj:
contained = True
if not isinstance(current_list, list):
current_list = [current_list]
break
if not isinstance(obj, list):
objects = [obj]
else:
objects = obj
if contained:
if verbose:
print("{} is in {} of entity {}".format(obj, property_name,
containing_object.id))
update = False
return
for o in objects:
contained = False
if verbose:
print("Appending {} to {} of entity {}".format(obj, property_name,
containing_object.id))
current_list.append(obj)
to_be_updated.append(containing_object)
for el in current_list:
if el == o:
contained = True
break
if verbose:
if contained:
print("{} is in {} of entity {}".format(
o, property_name, containing_object.id))
else:
print("Appending {} to {} of entity {}".format(
o, property_name, containing_object.id))
if not contained:
current_list.append(o)
update = True
if update:
to_be_updated.append(containing_object)
def assure_has_parent(entity, parent, to_be_updated=None, verbose=True):
......
......@@ -106,6 +106,11 @@ class Crawler(object):
if self.verbose and matches > 1:
print("Attention: More than one matching cfood!")
for crawled_file in sorted(files, key=lambda x: x.path):
for cfood in cfoods:
if cfood.looking_for(crawled_file):
cfood.attach(crawled_file)
for cfood in cfoods:
try:
cfood.create_identifiables()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment