Skip to content
Snippets Groups Projects
Commit db249589 authored by Florian Spreckelsen's avatar Florian Spreckelsen Committed by Henrik tom Wörden
Browse files

assure_has_property with datetime objects

parent 2c63eb59
No related branches found
No related tags found
1 merge request!22Release 0.3
...@@ -124,7 +124,7 @@ def test_find_functions(): ...@@ -124,7 +124,7 @@ def test_find_functions():
def test_queries(): def test_queries():
rec1, rec2, _, _ = insert_entities() rec1, rec2, _, _ = insert_entities()
# no explicit functions since only `query` key is used, # no explicit functions since only `query` key is used,
# so works with BaseTableExporter # so works with BaseTableExporter
export_dict = { export_dict = {
"Test_Property_1": {}, "Test_Property_1": {},
......
...@@ -45,6 +45,7 @@ from abc import ABCMeta, abstractmethod ...@@ -45,6 +45,7 @@ from abc import ABCMeta, abstractmethod
import caosdb as db import caosdb as db
from caosdb.exceptions import AmbiguityException, EntityDoesNotExistError from caosdb.exceptions import AmbiguityException, EntityDoesNotExistError
from datetime import datetime
from .datamodel_problems import DataModelProblems from .datamodel_problems import DataModelProblems
from .guard import global_guard as guard from .guard import global_guard as guard
...@@ -85,7 +86,7 @@ def get_property(name): ...@@ -85,7 +86,7 @@ def get_property(name):
try: try:
prop = db.execute_query("FIND Property with name='{}'".format( prop = db.execute_query("FIND Property with name='{}'".format(
name), name),
unique=True) unique=True)
except (EntityDoesNotExistError, AmbiguityException): except (EntityDoesNotExistError, AmbiguityException):
# Property might actually be a RecordTypes # Property might actually be a RecordTypes
prop = get_recordtype(name) prop = get_recordtype(name)
...@@ -586,6 +587,15 @@ def assure_has_property(entity, name, value, to_be_updated=None, ...@@ -586,6 +587,15 @@ def assure_has_property(entity, name, value, to_be_updated=None,
break break
# cover special case of datetimes that are returned as strings
# by pylib.
if isinstance(value, datetime):
if datetime.fromisoformat(el.value) == value:
contained = True
break
if contained: if contained:
logger.debug("entity {} has property {} with value {}".format( logger.debug("entity {} has property {} with value {}".format(
entity.id, name, value)) entity.id, name, value))
......
...@@ -154,7 +154,8 @@ class BaseTableExporter(object): ...@@ -154,7 +154,8 @@ class BaseTableExporter(object):
except Exception as exc: except Exception as exc:
# invalid query # invalid query
logger.debug(exc) logger.debug(exc)
errmssg = "Empty or invalid query '{}' for entry {}".format(q, e) errmssg = "Empty or invalid query '{}' for entry {}".format(
q, e)
raise TableExportError(errmssg) raise TableExportError(errmssg)
if val is not None: if val is not None:
......
...@@ -32,6 +32,9 @@ from caosadvancedtools.cfood import (AbstractCFood, AbstractFileCFood, CMeal, ...@@ -32,6 +32,9 @@ from caosadvancedtools.cfood import (AbstractCFood, AbstractFileCFood, CMeal,
get_entity_for_path) get_entity_for_path)
from caosadvancedtools.crawler import FileCrawler from caosadvancedtools.crawler import FileCrawler
from caosadvancedtools.example_cfood import ExampleCFood from caosadvancedtools.example_cfood import ExampleCFood
from caosdb.common.models import _parse_single_xml_element
from lxml import etree
from datetime import datetime
PATTERN = "h.*" PATTERN = "h.*"
...@@ -215,6 +218,26 @@ class InsertionTest(unittest.TestCase): ...@@ -215,6 +218,26 @@ class InsertionTest(unittest.TestCase):
assert "parent" not in ps assert "parent" not in ps
assert "other_parent" not in ps assert "other_parent" not in ps
def test_assure_datetime(self):
entity_xml = '<Record id="1234" name="Test_Record"><Property id="1233" name="TestDate" datatype="DATETIME">{}</Property></Record>'
to_be_updated = []
rec = _parse_single_xml_element(
etree.fromstring(entity_xml.format("2020-01-01")))
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1), to_be_updated=to_be_updated)
assert not to_be_updated
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1, 0, 0), to_be_updated=to_be_updated)
assert not to_be_updated
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1, 15, 0), to_be_updated=to_be_updated)
assert len(to_be_updated) == 1
rec = _parse_single_xml_element(etree.fromstring(
entity_xml.format("2020-01-01T00:00:00.000")))
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1), to_be_updated=to_be_updated)
assert len(to_be_updated) == 1
class DependendTest(unittest.TestCase): class DependendTest(unittest.TestCase):
def test(self): def test(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment