From cc9b962445908af19045ecd26ec00b915430c3ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <henrik@trineo.org> Date: Thu, 17 Jan 2019 16:39:59 +0100 Subject: [PATCH] ENH: first test running --- src/caosadvancedtools/cfood.py | 70 ++++++++++++++++++++++++++++++++ src/caosadvancedtools/crawler.py | 37 +++++++++++++++++ unittests/test_cfood.py | 18 ++++++++ 3 files changed, 125 insertions(+) create mode 100644 src/caosadvancedtools/cfood.py create mode 100644 src/caosadvancedtools/crawler.py create mode 100644 unittests/test_cfood.py diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py new file mode 100644 index 00000000..149fea52 --- /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 00000000..12947ba5 --- /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 00000000..4a4aa51f --- /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 -- GitLab