diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py new file mode 100644 index 0000000000000000000000000000000000000000..149fea52401e54ed6b3dd448c992c7bbc7a5fd91 --- /dev/null +++ b/src/caosadvancedtools/cfood.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""does something""" + +import argparse +from argparse import RawTextHelpFormatter +import re +import caosdb as db +from datetime import datetime +from caosdb.exceptions import TransactionError + + +class CFood(object): + def __init__(self, pattern): + self.pattern = re.compile(pattern) + + def treat_match(self, filename, match): + entities = self.create_identifiables(filename, match) + for key, ent in entities.items(): + existing = find_existing(ent) + if existing is None: + print(key, "does not exist") + ent.insert() + print(key, "inserted") + entities[key] = ent + else: + print(key, "exists") + entities[key] = existing + + self.update_identifiables(entities, filename, match) + + def create_identifiables(self, filename, match): + entities = {} + entities["exp"] = db.Record() + #import IPython + #IPython.embed() + entities["exp"].add_parent(name="Experiment") + entities["exp"].add_property(name="species", value=match.group) + + return entities + + def update_identifiables(self, entities, filename, match): + entities["exp"].add_property(name="date", + value=datetime.today().isoformat()) + db.Container().extend(entities.values).update() + + @staticmethod + def find_existing(entity): + query_string = "FIND Record "+ entity.get_parents()[0].name + query_string += " with " + "and".join(["'" + p.name + "'='" + p.value +"'" + for p in entity.get_properties()]) + print(query_string) + q = db.Query(query_string) + try: + r = q.execute(unique=True) + except TransactionError as er: + r = None + return r + +def get_parser(): + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=RawTextHelpFormatter) + + return parser + + +if __name__ == "__main__": + parser = get_parser() + args = parser.parse_args() + diff --git a/src/caosadvancedtools/crawler.py b/src/caosadvancedtools/crawler.py new file mode 100644 index 0000000000000000000000000000000000000000..12947ba5763a73e61fa315ea0d4075b43dba69ff --- /dev/null +++ b/src/caosadvancedtools/crawler.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""does something""" + +import argparse +from argparse import RawTextHelpFormatter +from cfood import CFood + + + +class Crawler(object): + def __init__(self, food): + self.food = food + + def crawl(self): + filename="path/to/file" + for cfood in self.food: + match = cfood.pattern.match(filename) + if match is not None: + print("match") + cfood.treat_match(filename, match) + + +def get_parser(): + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=RawTextHelpFormatter) + + return parser + + +if __name__ == "__main__": + parser = get_parser() + args = parser.parse_args() + + f = CFood(pattern="(.*)to(.*)") + c = Crawler(food=[f]) + c.crawl() diff --git a/unittests/test_cfood.py b/unittests/test_cfood.py new file mode 100644 index 0000000000000000000000000000000000000000..4a4aa51f14a2e470d26e92f1ec227c95250003af --- /dev/null +++ b/unittests/test_cfood.py @@ -0,0 +1,18 @@ +import unittest +from tempfile import NamedTemporaryFile + +import caosdb as db +from caosadvancedtools.cfood import CFood + + + +class CFoodTest(unittest.TestCase): + def setUp(self): + self.exp = db.Record() + self.exp.add_parent(name="Experiment") + self.exp.add_property(name="species", value="microunicorn") + pass + + def test_check_existence(self): + assert CFood.find_existing(self.exp) is None + pass