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