Skip to content
Snippets Groups Projects
Select Git revision
  • c8446fc7baf0ea9fb1ff9c0b1edfbbfeeaab8df4
  • main default protected
  • dev protected
  • f-fix-accent-sensitivity
  • f-filesystem-import
  • f-update-acl
  • f-filesystem-link
  • f-filesystem-directory
  • f-filesystem-core
  • f-filesystem-cleanup
  • f-string-ids
  • f-filesystem-main
  • f-multipart-encoding
  • f-trigger-advanced-user-tools
  • f-real-rename-test-pylibsolo2
  • f-real-rename-test-pylibsolo
  • f-real-rename-test
  • f-linkahead-rename
  • f-reference-record
  • f-xml-serialization
  • f-xfail-server-181
  • linkahead-pylib-v0.18.0
  • linkahead-control-v0.16.0
  • linkahead-pylib-v0.17.0
  • linkahead-mariadbbackend-v8.0.0
  • linkahead-server-v0.13.0
  • caosdb-pylib-v0.15.0
  • caosdb-pylib-v0.14.0
  • caosdb-pylib-v0.13.2
  • caosdb-server-v0.12.1
  • caosdb-pylib-v0.13.1
  • caosdb-pylib-v0.12.0
  • caosdb-server-v0.10.0
  • caosdb-pylib-v0.11.1
  • caosdb-pylib-v0.11.0
  • caosdb-server-v0.9.0
  • caosdb-pylib-v0.10.0
  • caosdb-server-v0.8.1
  • caosdb-pylib-v0.8.0
  • caosdb-server-v0.8.0
  • caosdb-pylib-v0.7.2
41 results

test_tickets.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    test_tickets.py 53.89 KiB
    # -*- coding: utf-8 -*-
    #
    # ** header v3.0
    # This file is a part of the CaosDB Project.
    #
    # Copyright (C) 2018 Research Group Biomedical Physics,
    # Max-Planck-Institute for Dynamics and Self-Organization Göttingen
    #
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU Affero General Public License as
    # published by the Free Software Foundation, either version 3 of the
    # License, or (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU Affero General Public License for more details.
    #
    # You should have received a copy of the GNU Affero General Public License
    # along with this program. If not, see <https://www.gnu.org/licenses/>.
    #
    # ** end header
    #
    """Created on 18.02.2015.
    
    @author: tf
    """
    from __future__ import absolute_import, print_function, unicode_literals
    import caosdb as db
    from tests import test_misc
    from caosdb.exceptions import CaosDBException, TransactionError, EntityError, UniqueNamesError, AmbiguityException, EntityDoesNotExistError
    from nose.tools import (nottest, assert_true, assert_raises, assert_not_equals,
                            assert_equals, assert_false, assert_is_not_none,
                            assert_is_none)
    from nose import with_setup
    
    
    def setup_module():
        try:
            db.execute_query("FIND ENTITY WITH ID > 100").delete()
        except Exception as e:
            print(e)
    
    
    def setup():
        pass
    
    
    def teardown():
        setup_module()
    
    
    def test_ticket_103a():
        # strict flag...
    
        rt = db.RecordType(name="TestRecordType")
        try:
            # insert w/o strict flag
            haswarnings = False
            rt.insert(strict=False)
            assert_true(rt.is_valid())
    
            for w in rt.get_warnings():
                haswarnings = True
                break
            assert_true(haswarnings)
    
            # update w/o strict flag
            haswarnings = False
            rt.name = "TestRecordTypeUpdate"
            rt.update(strict=False)
            assert_true(rt.is_valid())
    
            for w in rt.get_warnings():
                haswarnings = True
                break
            assert_true(haswarnings)
    
            # update w/ strict flag
            rt.name = "TestRecordTypeUpdate2"
            try:
                rt.update(strict=True)
                assert_true(False, "This should have raised an 128-Error (strict)")
            except TransactionError as exc:
                print(exc)
                assert_equals(128, int(exc.get_code()))
                rt = exc.get_entities()[0]
            assert_false(rt.is_valid())
            for w in rt.get_warnings():
                haswarnings = True
                break
            assert_true(haswarnings)
            for w in rt.get_errors():
                if w.get_code() == 128:
                    hasstricterror = True
                    break
            assert_true(hasstricterror)
        finally:
            try:
                rt.delete()
            except BaseException:
                pass
    
        # insert w/ strict flag
        haswarnings = False
        hasstricterror = False
        rt = db.RecordType(name="TestRecordType")
        try:
            rt.insert(strict=True, raise_exception_on_error=False)
            assert_false(rt.is_valid())
            for w in rt.get_warnings():
                haswarnings = True
                break
            assert_true(haswarnings)
            for w in rt.get_errors():
                if w.get_code() == 128:
                    hasstricterror = True
                    break
            assert_true(hasstricterror)
        finally:
            try:
                rt.delete()
            except BaseException:
                pass
    
    
    def test_ticket_103c():
        # strict flag
    
        try:
            rt1 = db.RecordType(name="TestStrict2")
    
            rt1.insert(unique=True)
            assert_true(rt1.is_valid())
    
        finally:
            try:
                rt1.delete()
            except BaseException:
                pass
    
    
    def test_ticket_103b():
        # unique flag
    
        try:
            rt1 = db.RecordType(name="NameDuplicatesEntity")
            rt2 = db.RecordType(name="NameDuplicatesEntity")
    
            rt1.insert(
                unique=True, strict=False)
            assert_true(rt1.is_valid())
            try:
                rt2.insert(unique=True)
                assert_true(False)
            except UniqueNamesError:
                pass
    
            assert_false(rt2.is_valid())
    
        finally:
            try:
                rt1.delete()
            except BaseException:
                pass
            try:
                rt2.delete()
            except BaseException:
                pass
    
    
    def test_ticket_102():
        """EntityDoesNotExistException."""
    
        try:
            p = db.Property(name="Non-ExistentProperty")
            p.retrieve(
                unique=True, raise_exception_on_error=True)
            assert_true(False)
        except CaosDBException as e:
            assert_true(isinstance(e, EntityDoesNotExistError))
            assert_is_not_none(e.get_entity())
            assert_equals(e.get_entity().name, p.name)
            assert_true(e.get_entity().has_errors())
            assert_false(p.has_errors())
            assert_false(p.is_valid())
            assert_false(e.get_entity().is_valid())
    
    
    def test_ticket_101():
        """RecordType and Property constructor work differently?"""
    
        rec = db.Record("some_name")
        assert_is_not_none(rec.name)
        assert_equals("some_name", rec.name)
        assert_is_none(rec.id)
        rt = db.RecordType("some_name")
        assert_is_not_none(rt.name)
        assert_equals("some_name", rt.name)
        assert_is_none(rt.id)
        p = db.Property("some_name")
        assert_is_not_none(p.name)
        assert_equals("some_name", p.name)
        assert_is_none(p.id)
        f = db.File("some_name")
        assert_is_not_none(f.name)
        assert_equals("some_name", f.name)
        assert_is_none(f.id)
    
    
    def test_ticket_100():
    
        try:
            rt = db.RecordType(name="a_b").insert()
            db.RecordType(name="a_b").retrieve()
        finally:
            try:
                rt.delete()
            except BaseException:
                pass
    
    
    def test_ticket_96():
    
        try:
            rt1 = db.RecordType(name="a_b")
            rt2 = db.RecordType(name="a_b")
            rt1.insert()
            rt2.insert(unique=False)
    
            c = db.Container().append(
                db.RecordType(name="a_b")).retrieve(unique=False)
            assert_equals(len(c), 2)
    
            try:
                c = db.Container().append(
                    db.RecordType(name="a_b")).retrieve(unique=True)
                assert_true(False)
            except AmbiguityException as e:
                print(repr(e))
        finally:
            try:
                rt2.delete()
            except BaseException:
                pass
            try:
                rt1.delete()
            except BaseException:
                pass
    
    
    def test_ticket_114():
        try:
            db.execute_query("FIND rt_nice").delete()
        except BaseException:
            pass
        try:
            db.execute_query("FIND rtfirst").delete()
        except BaseException:
            pass
        try:
            db.execute_query("FIND first").delete()
        except BaseException:
            pass
        p = db.Property(name="first", datatype="double").insert()
        rt1 = db.RecordType(name="rtfirst").add_property(
            name="first", importance="obligatory").insert()
        rt2 = db.RecordType(name='rt_nice').add_property(
            name="rtfirst", importance="obligatory")
        try:
            rt2.insert()
        except TransactionError:
            rt1.delete()
            p.delete()
            raise
        else:
            rt2.delete()
            rt1.delete()
            p.delete()
    
    
    def test_ticket_120():
    
        try:
            p = db.Property(
                name="SimpleDoubleProperty", datatype="DOUBLE").insert()
            rt1 = db.RecordType(name="SimpleRT1").insert()
            rt2 = db.RecordType(name="SimpleRT2").add_parent(rt1).insert()
            rt3 = db.RecordType(name="SimpleRT3").add_parent(rt2).insert()
            r1 = db.Record().add_parent(rt1).add_property(
                id=p.id, value=3.14).insert()
            r2 = db.Record().add_parent(rt2).add_property(
                id=rt1.id, value=r1).insert()
            r3 = db.Record().add_parent(rt3).add_property(
                id=rt2.id, value=r2).insert()
    
            cp = db.Query("FIND PROPERTY SimpleDoubleProperty").execute(
                unique=True)
            assert_equals(p.id, cp.id)
    
            crt123 = db.Query("FIND RECORDTYPE SimpleRT1").execute(unique=False)
            assert_true(crt123.get_entity_by_id(rt1.id).is_valid())
            assert_true(crt123.get_entity_by_id(rt2.id).is_valid())
            assert_true(crt123.get_entity_by_id(rt3.id).is_valid())
    
            cr1 = db.Query("FIND RECORD . SimpleDoubleProperty='3.14'").execute(
                unique=True)
            assert_equals(r1.id, cr1.id)
    
            cr23 = db.Query("FIND RECORD . SimpleRT1").execute(unique=False)
            assert_true(cr23.get_entity_by_id(r2.id).is_valid())
            assert_true(cr23.get_entity_by_id(r3.id).is_valid())
    
            cr3 = db.Query("FIND RECORD . SimpleRT2").execute(unique=True)
            assert_equals(r3.id, cr3.id)
    
            cr2 = db.Query("FIND RECORD . SimpleRT1->" + str(r1.id)).execute(
                unique=True)
            assert_equals(r2.id, cr2.id)
    
            cr3 = db.Query("FIND RECORD . SimpleRT1->" + str(r2.id)).execute(
                unique=True)
            assert_equals(r3.id, cr3.id)
    
            cr3 = db.Query(
                "FIND RECORD WHICH HAS A PROPERTY blabla=4 OR SimpleRT1->SimpleRT2 WHICH HAS A PROPERTY SimpleRT1->" +
                str(
                    r1.id) +
                "").execute(
                unique=True)
            assert_equals(r3.id, cr3.id)
    
            cr3 = db.Query(
                "FIND SimpleRT1 . SimpleRT1.SimpleRT1.SimpleDoubleProperty='3.14'"
            ).execute(unique=True)
            assert_equals(r3.id, cr3.id)
    
            cr3 = db.Query(
                "FIND RECORD SimpleRT1 . SimpleRT1.SimpleRT1.SimpleDoubleProperty='3.14'"
            ).execute(unique=True)
            assert_equals(r3.id, cr3.id)
    
            cr3 = db.Query(
                "FIND RECORD . SimpleRT1.SimpleRT1.SimpleDoubleProperty='3.14'"
            ).execute(unique=True)
            assert_equals(r3.id, cr3.id)
        finally:
            r3.delete()
            r2.delete()
            r1.delete()
            rt3.delete()
            rt2.delete()
            rt1.delete()
            p.delete()
    
    
    @with_setup(setup, teardown)
    def test_ticket_120a():
    
        p = db.Property(name="TestSimpleDoubleProperty", datatype="DOUBLE")
        rt1 = db.RecordType(name="TestRT1").add_property(p)
        rt2 = db.RecordType(name="TestRT2").add_property(rt1, inheritance='None')
        rt3 = db.RecordType(name="TestRT3").add_property(rt2, inheritance='None')
    
        c = db.Container()
        c.extend([p, rt1, rt2, rt3]).insert()
    
        c.delete(raise_exception_on_error=True)
    
    
    @with_setup(setup, teardown)
    def test_ticket_117():
        p = db.Property(
            name="TestwaveVelocity",
            datatype="Double",
            unit="a.u.",
            description="The measured velocity of the wavefront.")
    
        # insert record type
        rt1 = db.RecordType(name="TestRT1").insert()
        assert_true(rt1.is_valid())
        id_rt1 = rt1.id
    
        # retrieve it
        r = db.RecordType(id=id_rt1).retrieve()
        assert_true(r.is_valid())
        assert_equals(id_rt1, r.id)
    
        # create property
        p.insert()
        assert_true(p.is_valid())
    
        # add property to record type
        r.add_property(id=p.id, name='TestwaveVelocity', importance="obligatory")
        r.name = 'TestRT1update'
        r.update()
    
        assert_is_not_none(r.name)
        assert_equals('TestRT1update', r.name)
        assert_true(r.is_valid())
        assert_is_not_none(r.get_properties())
        assert_is_not_none(r.get_properties().get_by_name('TestwaveVelocity'))
        assert_is_not_none(
            r.get_properties().get_by_name('TestwaveVelocity').datatype)
        assert_equals(
            str("DOUBLE").lower(),
            r.get_properties().get_by_name('TestwaveVelocity').datatype.lower())
    
    
    def test_ticket_106():
    
        try:
            rt = db.RecordType(name="test RT 2")
            rt.insert()
            while True:
                try:
                    rt.insert()
                    raise AssertionError(
                        "2nd insert should raise an TransactionError")
                except db.exceptions.TransactionError as e:
                    print(e)
                    break
        finally:
            rt.delete()
    
    
    def test_ticket_91():
        import os
        path = "ticket_91_test_file.py"
        try:
            assert_false(os.path.isfile(path))
            upload_file = open(path, "w")
            upload_file.write('print("hello world!")\n')
            upload_file.close()
    
            f = db.File(
                name=path,
                description="Python File Test",
                path="pythontestfiles/python_test_file.py",
                file=path)
            f.insert()
            assert_true(f.is_valid())
        finally:
            try:
                os.remove(path)
            except BaseException:
                pass
            try:
                f.delete()
            except BaseException:
                pass
    
    
    def test_ticket_86():
        import os
        path = "ticket_86_test_file.py"
        try:
            upload_file = open(path, "w")
            upload_file.write('print("hello world!")\n')
            upload_file.close()
    
            f = db.File(
                name=path,
                description="Python File Test",
                path="pythontestfiles/python_test_file.py",
                file=path)
            f.insert()
            assert_true(f.is_valid())
    
            f2 = db.File(name=path)
            f2.retrieve()
            assert_true(f2.is_valid())
        finally:
            os.remove(path)
            f.delete()
    
    
    @with_setup(setup, teardown)
    def test_ticket_83():
        rt1 = db.RecordType(name="TestRT1").insert()
        rt2 = db.RecordType(name="TestRT2").insert()
        assert_true(rt1.is_valid())
        assert_true(rt2.is_valid())
    
        crt1 = db.RecordType(id=rt1.id).retrieve()
        crt2 = db.RecordType(id=rt2.id).retrieve()
        assert_true(crt1.is_valid())
        assert_true(crt2.is_valid())
    
        c = db.Container().extend([crt1, crt2]).retrieve()
        assert_equals(2, len(c))
    
    
    def test_ticket_139():
    
        rt1 = db.RecordType(name="TestRT1").insert()
        assert_true(rt1.is_valid())
        assert_equals("TestRT1", rt1.name)
        assert_equals(1, len(db.execute_query("FIND TestRT1")))
    
        rt1.delete()
        assert_false(rt1.is_valid())
        assert_equals(0, len(db.execute_query("FIND TestRT1")))
    
        rt1.insert()
        assert_true(rt1.is_valid())
        assert_equals("TestRT1", rt1.name)
        assert_equals(1, len(db.execute_query("FIND TestRT1")))
    
        rt1.delete()
        assert_false(rt1.is_valid())
        assert_equals(0, len(db.execute_query("FIND TestRT1")))
    
        assert_equals("TestRT1", rt1.name)
    
    
    def test_ticket_138():
        try:
            rt_person = db.RecordType("Person").insert()
            rt_person_x = db.RecordType("Person_x")
            rt_person_x.add_property(rt_person)
            rt_person_x.insert()
    
            assert_equals(1, len(rt_person_x.get_properties()))
    
            rt_person_x.delete()
            assert_equals(1, len(rt_person_x.get_properties()))
    
            rt_person_x.insert()
            assert_equals(1, len(rt_person_x.get_properties()))
    
            rt_person_x.delete()
            assert_equals(1, len(rt_person_x.get_properties()))
    
            rt_person_x.insert()
            assert_equals(1, len(rt_person_x.get_properties()))
    
        finally:
            if len(db.execute_query("FIND Person_x")) > 0:
                rt_person_x.delete()
            rt_person.delete()
    
    
    @with_setup(setup, teardown)
    def test_ticket_137():
        # insert RecordType
        rt1 = db.RecordType("TestRT1").insert()
        assert_true(rt1.is_valid())
    
        crt1 = db.execute_query("FIND TestRT1", unique=True)
        assert_true(crt1.is_valid())
        assert_equals(rt1.id, crt1.id)
    
        crt1.delete()
        assert_false(crt1.is_valid())
        assert_equals(0, len(db.execute_query("FIND TestRT1")))
    
        try:
            rt1.insert()
            raise AssertionError("This should have raised an TransactionError")
        except TransactionError as e:
            print(e)
    
    
    @with_setup(setup, teardown)
    def test_ticket_132():
        # insert RecordType
        rt1 = db.RecordType("TestRT1").insert()
        assert_true(rt1.is_valid())
    
        # get as Property by id
        crt1 = db.execute_query("FIND TestRT1", unique=True)
        p1 = db.Property(id=crt1.id).retrieve()
        assert_true(p1.is_valid())
        assert_true(isinstance(p1, db.Property))
    
        # get as Property by name
        p2 = db.Property("TestRT1").retrieve()
        assert_true(p2.is_valid())
        assert_true(isinstance(p2, db.Property))
    
    
    @with_setup(setup, teardown)
    @nottest
    def test_ticket_39():
        import os
    
        scratch = os.path.realpath(db.get_config().get(
            "EndToEndTests", "test_tickets.test_ticket_39.scratch"))
        assert_true(os.path.isdir(scratch))
        testfile = os.path.join(scratch, "test.dat")
        try:
            # insert RecordType
    
            upload_file = open(testfile, "w")
            upload_file.write("hello world\n")
            upload_file.close()
            # check if the server can connect to this filesystem
    
            f = db.File(path="testfiles/file1", from_location=testfile).insert()
            assert_true(f.is_valid())
            f.delete()
    
            # make unreadable
            os.chmod(testfile, 0o000)
            try:
                f = db.File(
                    path="testfiles/file1", from_location=testfile).insert()
            except EntityError as e:
                assert_equals(
                    "Insufficient read permission for this file. Please make it readable.",
                    e.msg)
    
        finally:
            os.chmod(testfile, 0o600)
            if len(db.execute_query("FIND RT1")) > 0:
                rt1.delete()
            try:
                os.remove(testfile)
            except Exception as e:
                print(e)
    
    
    def test_ticket_128():
    
        try:
            db.execute_query(r"FIND 5\#):xw;;-`;BY6~PjsI^*g.$+eY#n.aA9zm")
        except TransactionError as e:
            assert_equals(13, int(e.get_error().code))
    
    
    def test_ticket_123a():
    
        try:
            p = db.Property(
                name="SimpleDoubleProperty", datatype="Double").insert()
            assert_true(p.is_valid())
    
            assert_equals(p.id,
                          db.execute_query(
                              "FIND SimpleDoubleProperty", unique=True).id)
            assert_equals(p.id,
                          db.execute_query("FIND SimpleDouble*", unique=True).id)
            assert_equals(p.id,
                          db.execute_query("FIND SimpleD*Property",
                                           unique=True).id)
            assert_equals(p.id,
                          db.execute_query("FIND *leDoubleProperty",
                                           unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND SimpleDoubleProperty*", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND SimpleDouble*Property", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND *Simpl*eDoublePr*operty", unique=True).id)
            assert_equals(p.id,
                          db.execute_query("FIND *Simp*oubl*oper*",
                                           unique=True).id)
        finally:
            p.delete()
    
    
    def test_ticket_123():
    
        try:
            p = db.Property(
                name="SimpleDoubleProperty", datatype="Double").insert()
            assert_true(p.is_valid())
    
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<SimpleDoubleProperty>>", unique=True).id)
            assert_equals(p.id,
                          db.execute_query("FIND <<SimpleDouble>>",
                                           unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<SimpleD.*Property>>", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<leDoubleProperty>>", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<SimpleDoubleProperty>>", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<SimpleDoubleProperty>>", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<SimpleDoubleProperty>>", unique=True).id)
            assert_equals(p.id,
                          db.execute_query(
                              "FIND <<Simp[asdfgjkle]eDoubl.*oper>>",
                              unique=True).id)
        finally:
            p.delete()
    
    
    def test_ticket_143():
    
        try:
            p = db.Property(
                name="SimpleDoubleProperty", datatype="DOUBLE").insert()
            assert_true(p.is_valid())
            rt = db.RecordType(name="SimpleRecordType").add_property(p).insert()
            assert_true(rt.is_valid())
            r1 = db.Record().add_parent(rt).add_property(p, value="1.0").insert()
            assert_true(r1.is_valid())
            r2 = db.Record().add_parent(rt).add_property(p, value="2.0").insert()
            assert_true(r2.is_valid())
    
            s = db.execute_query("FIND SimpleRecordType")
            assert_equals(3, len(s))
            assert_true(s.is_valid())
    
            s = db.execute_query("FIND RECORD SimpleRecordType")
            assert_equals(2, len(s))
            assert_true(s.is_valid())
    
            s = db.execute_query("FIND SimpleRecordType WITH SimpleDoubleProperty")
            assert_equals(3, len(s))
            assert_true(s.is_valid())
    
            s = db.execute_query(
                "FIND RECORD SimpleRecordType WITH SimpleDoubleProperty")
            assert_equals(2, len(s))
            assert_true(s.is_valid())
    
            s = db.execute_query(
                "FIND SimpleRecordType WITH SimpleDoubleProperty>0")
            assert_equals(2, len(s))
            assert_true(s.is_valid())
    
            s = db.execute_query(
                "FIND SimpleRecordType WITH THE GREATEST SimpleDoubleProperty>0")
            assert_equals(1, len(s))
            assert_true(s.is_valid())
    
            assert_equals(
                r2.id,
                db.execute_query(
                    "FIND SimpleRecordType WITH THE GREATEST SimpleDoubleProperty>0",
                    unique=True).id)
            assert_equals(
                r2.id,
                db.execute_query(
                    "FIND SimpleRecordType WITH THE GREATEST SimpleDoubleProperty",
                    unique=True).id)
            assert_equals(
                r1.id,
                db.execute_query(
                    "FIND SimpleRecordType WITH THE SMALLEST SimpleDoubleProperty",
                    unique=True).id)
        finally:
            try:
                r2.delete()
            except BaseException:
                pass
            try:
                r1.delete()
            except BaseException:
                pass
            try:
                rt.delete()
            except BaseException:
                pass
            try:
                p.delete()
            except BaseException:
                pass
    
    
    def test_ticket_147():
    
        try:
            db.execute_query("FIND ticket147_*").delete()
        except BaseException:
            pass
    
        try:
            # structure
            obs = db.Property(
                name="ticket147_ObstacleRadius", datatype="DOUBLE").insert()
            assert_true(obs.is_valid())
            tstep = db.Property(
                name="ticket147_TimeStep", datatype="DOUBLE").insert()
            assert_true(tstep.is_valid())
            bmsim = db.RecordType(name="ticket147_BarkleyModelSimulation"
                                  ).add_property(tstep).insert()
            assert_true(bmsim.is_valid())
            frm = db.RecordType(name="ticket147_FrequencyMeasurement"
                                ).add_property(obs).add_property(bmsim).insert()
            assert_true(frm.is_valid())
    
            # data
            c = db.Container()
            r1 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001")
            r2 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001")
            r3 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002")
            r4 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002")
            r5 = db.Record().add_parent(bmsim).add_property(tstep, value="0.003")
            c.extend([r1, r2, r3, r4, r5]).insert()
            assert_true(c.is_valid())
            for e in c:
                assert_true(e.is_valid())
    
            c2 = db.Container()
            r21 = db.Record().add_parent(frm).add_property(
                obs, value="1.0").add_property(
                    id=bmsim.id, value=r1)
            r22 = db.Record().add_parent(frm).add_property(
                obs, value="2.0").add_property(
                    id=bmsim.id, value=r2)
            r23 = db.Record().add_parent(frm).add_property(
                obs, value="2.0").add_property(
                    id=bmsim.id, value=r3)
            r24 = db.Record().add_parent(frm).add_property(
                obs, value="3.0").add_property(
                    id=bmsim.id, value=r4)
            r25 = db.Record().add_parent(frm).add_property(
                obs, value="3.0").add_property(
                    id=bmsim.id, value=r5)
            c2.extend([r21, r22, r23, r24, r25]).insert()
            assert_true(c2.is_valid())
            '''
            s = db.execute_query("FIND ticket147*")
            assert_true(s.is_valid())
            assert_equals(14, len(s))
    
            s = db.execute_query("FIND ticket147_Bar*")
            assert_true(s.is_valid())
            assert_equals(6, len(s))
    
            s = db.execute_query("FIND RECORD ticket147_Bar*")
            assert_true(s.is_valid())
            assert_equals(5, len(s))
    
            s = db.execute_query("FIND ticket147_Fre*")
            assert_true(s.is_valid())
            assert_equals(6, len(s))
    
            s = db.execute_query("FIND RECORD ticket147_Fre*")
            assert_true(s.is_valid())
            assert_equals(5, len(s))
    
            s = db.execute_query("FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius=2.0")
            assert_true(s.is_valid())
            assert_equals(2, len(s))
    
            s = db.execute_query("FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0'")
            assert_true(s.is_valid())
            assert_equals(2, len(s))
    
            s = db.execute_query("FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation")
            assert_true(s.is_valid())
            assert_equals(6, len(s))
    
            s = db.execute_query("FIND Record ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation")
            assert_true(s.is_valid())
            assert_equals(5, len(s))'''
    
            s = db.execute_query(
                "FIND Record ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep"
            )
            assert_true(s.is_valid())
            assert_equals(5, len(s))
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation )"
            )
            assert_true(s.is_valid())
            assert_equals(2, len(s))
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep)"
            )
            assert_true(s.is_valid())
            assert_equals(2, len(s))
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep<='0.0021')"
            )
            assert_true(s.is_valid())
            assert_equals(2, len(s))
            assert_equals(r22.id, s[0].id)
            assert_equals(r23.id, s[1].id)
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep='0.002')"
            )
            assert_true(s.is_valid())
            assert_equals(1, len(s))
            assert_equals(r23.id, s[0].id)
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius>='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep>='0.002')"
            )
            assert_true(s.is_valid())
            assert_equals(3, len(s))
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep='0.001')"
            )
            assert_true(s.is_valid())
            assert_equals(1, len(s))
            assert_equals(r22.id, s[0].id)
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS ticket147_TimeStep='0.001')"
            )
            assert_true(s.is_valid())
            assert_equals(1, len(s))
            assert_equals(r22.id, s[0].id)
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLEST ticket147_TimeStep)"
            )
            assert_true(s.is_valid())
            assert_equals(1, len(s))
            assert_equals(r22.id, s[0].id)
    
            s = db.execute_query(
                "FIND ticket147_Fre* WHICH HAS THE SMALLEST ticket147_ObstacleRadius AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLEST ticket147_TimeStep)"
            )
            assert_true(s.is_valid())
            assert_equals(1, len(s))
            assert_equals(r21.id, s[0].id)
    
            # typo: SMALLES
            try:
                s = db.execute_query(
                    "FIND ticket147_Fre* WHICH HAS THE SMALLEST ticket147_ObstacleRadius AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLES ticket147_TimeStep)"
                )
                raise AssertionError("This should raise a TransactionError")
            except TransactionError:
                pass
    
        finally:
            try:
                c2.delete()
            except BaseException:
                pass
            try:
                c.delete()
            except BaseException:
                pass
            try:
                frm.delete()
            except BaseException:
                pass
            try:
                bmsim.delete()
            except BaseException:
                pass
            try:
                tstep.delete()
            except BaseException:
                pass
            try:
                obs.delete()
            except BaseException:
                pass
    
    
    def test_ticket_89():
    
        try:
            nt_user = db.Property(name="NT_user", datatype="TEXT").insert()
            assert_true(nt_user.is_valid())
            nt_data = db.RecordType(name="NT_testfile", id=-100)
            # nt_data = <File id="-100" name="NT_testfile"
            # path="testfiles/NT_test.txt"/>
    
            nt_data.insert()
            assert_true(nt_data.is_valid())
            assert_equals(0, len(nt_data.get_properties()))
            #    nt_data =
            #    <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0">
            #        <Warning code="106" description="Entity has no description."/>
            #    </File>
    
            nt_data.add_property(nt_user, value="user1")
            nt_data.update()
            assert_true(nt_data.is_valid())
            assert_equals(1, len(nt_data.get_properties()))
    
            # nt_data =
            #     <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0">
            #         <Warning code="106" description="Entity has no description."/>
            #         <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property>
            #     </File>
    
            nt_data.add_property(nt_user, value="user2")
            nt_data.update()
            assert_true(nt_data.is_valid())
            assert_equals(2, len(nt_data.get_properties()))
    
            # nt_data =
            #     <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0">
            #       <Warning code="106" description="Entity has no description."/>
            #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property>
            #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property>
            #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property>
            #     </File>
    
            nt_data.retrieve()
            assert_true(nt_data.is_valid())
            assert_equals(2, len(nt_data.get_properties()))
        # response:
        #     <Entities>
        #       <File id="318" name="NT_testfile" path="testfiles/NT_test.txt" checksum="CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E" size="0">
        #         <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property>
        #         <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property>
        #       </File>
        #     </Entities>
    
        #     nt_data=
        #     <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E" size="0">
        #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property>
        #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property>
        #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property>
        #       <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property>
        #     </File>
        finally:
            try:
                db.execute_query("FIND RECORDTYPE NT_testfile").delete(
                    raise_exception_on_error=False)
            except BaseException:
                pass
            try:
                db.execute_query(
                    "FIND PROPERTY NT_user",
                    unique=True).delete(raise_exception_on_error=False)
            except BaseException:
                pass
    
    
    def test_ticket_173():
    
        try:
            assert_equals(0, db.execute_query("COUNT SimpleTextProperty"))
    
            p = db.Property(
                name="SimpleTextProperty",
                description="simple text property (from test_tickets.py:test_ticket173)",
                datatype='text')
            p.insert()
    
            assert_true(p.is_valid())
            assert_equals(1, db.execute_query("COUNT SimpleTextProperty"))
        finally:
            try:
                p.delete()
            except BaseException:
                pass
    
    
    def test_ticket_166():
        try:
            # structure
            obs = db.Property(
                name="ticket166_ObstacleRadius", datatype="DOUBLE").insert()
            assert_true(obs.is_valid())
            tstep = db.Property(
                name="ticket166_TimeStep", datatype="DOUBLE").insert()
            assert_true(tstep.is_valid())
            bmsim = db.RecordType(name="ticket166_BarkleyModelSimulation"
                                  ).add_property(tstep).insert()
            assert_true(bmsim.is_valid())
            frm = db.RecordType(name="ticket166_FrequencyMeasurement"
                                ).add_property(obs).add_property(bmsim).insert()
            assert_true(frm.is_valid())
    
            # data
            c = db.Container()
            r1 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001")
            r2 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001")
            r3 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002")
            r4 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002")
            r5 = db.Record().add_parent(bmsim).add_property(tstep, value="0.003")
            c.extend([r1, r2, r3, r4, r5]).insert()
            assert_true(c.is_valid())
            for e in c:
                assert_true(e.is_valid())
    
            c2 = db.Container()
            r21 = db.Record().add_parent(frm).add_property(
                obs, value="1.0").add_property(
                    id=bmsim.id, value=r1)
            r22 = db.Record().add_parent(frm).add_property(
                obs, value="2.0").add_property(
                    id=bmsim.id, value=r2)
            r23 = db.Record().add_parent(frm).add_property(
                obs, value="2.0").add_property(
                    id=bmsim.id, value=r3)
            r24 = db.Record().add_parent(frm).add_property(
                obs, value="3.0").add_property(
                    id=bmsim.id, value=r4)
            r25 = db.Record().add_parent(frm).add_property(
                obs, value="3.0").add_property(
                    id=bmsim.id, value=r5)
            c2.extend([r21, r22, r23, r24, r25]).insert()
            assert_true(c2.is_valid())
    
            # retrieve all 10
            q = db.Query("FIND RECORD ticket166*")
            assert_equals(10, len(q.execute()))
    
            # retrieve first 5
            q.putFlag("P", "0L5")
            ret = q.execute()
            assert_equals(5, len(ret))
            for e in ret:
                assert_equals(bmsim.id, e.get_parents()[0].id)
    
            # retrieve from 5 to 9 (4 entities)
            q.putFlag("P", "5L4")
            ret = q.execute()
            assert_equals(4, len(ret))
            for e in ret:
                assert_equals(frm.id, e.get_parents()[0].id)
    
        finally:
            try:
                c2.delete()
            except BaseException:
                pass
            try:
                c.delete()
            except BaseException:
                pass
            try:
                frm.delete()
            except BaseException:
                pass
            try:
                bmsim.delete()
            except BaseException:
                pass
            try:
                tstep.delete()
            except BaseException:
                pass
            try:
                obs.delete()
            except BaseException:
                pass
    
    
    def test_ticket_161():
    
        try:
            rt = db.RecordType(name="RecordTypeTest")
            rt.insert()
    
            assert_true(rt.is_valid())
    
            rt2 = db.RecordType(name="RecordTypeTest")
            assert_raises(UniqueNamesError, rt2.insert)
    
        finally:
            try:
                rt2.delete()
            except BaseException:
                pass
            try:
                rt.delete()
            except BaseException:
                pass
    
    
    def test_ticket_178():
        from lxml import etree
    
        # lxml umlaut
        xml = etree.Element("Björn")
        assert_equals(xml.tag, "Björn")
    
        try:
            rt = db.RecordType(name="Person")
            rt.insert()
    
            assert_true(rt.is_valid())
    
            p = db.Property(name="First name", datatype="TEXT")
            p.insert()
    
            assert_true(p.is_valid())
    
            r = db.Record().add_parent(parent=rt).add_property(
                name="First name", value="Björn")
    
            r.insert()
    
            assert_true(r.is_valid())
    
            assert_true(
                db.Record(id=r.id).retrieve().get_property("First name").value,
                "Björn")
    
        finally:
            try:
                r.delete()
            except BaseException:
                pass
            try:
                p.delete()
            except BaseException:
                pass
            try:
                rt.delete()
            except BaseException:
                pass
    
    
    def test_ticket_124():
    
        try:
            rt = db.RecordType(name="Person")
            rt.insert()
    
            assert_true(rt.is_valid())
    
            p = db.Property(name="First name", datatype="TEXT")
            p.insert()
    
            assert_true(p.is_valid())
    
            r = db.Record().add_parent(parent=rt).add_property(
                name="First name", value="Björn")
    
            r.insert()
    
            assert_true(r.is_valid())
    
            r2 = db.execute_query("Find Person WITH 'First name'=Björn")[0]
            assert_true(r2.is_valid())
            assert_equals(r2.id, r.id)
    
        finally:
            try:
                r.delete()
            except BaseException:
                pass
            try:
                p.delete()
            except BaseException:
                pass
            try:
                rt.delete()
            except BaseException:
                pass
    
    
    def test_ticket_163():
    
        try:
            p = db.Property(name="SomePropertyTest", datatype="TEXT")
            p.insert()
            assert_true(p.is_valid())
    
            rt = db.RecordType(name="RecordTypeTest").add_property(
                name="SomePropertyTest", importance="obligatory", value="blabla")
            rt.insert()
            assert_true(rt.is_valid())
    
            rt2 = db.execute_query(
                "FIND Entity . SomePropertyTest=blabla", unique=True)
            assert_true(rt2.is_valid())
    
            assert_equals(rt2.id, rt.id)
    
        finally:
            try:
                rt.delete()
            except BaseException:
                pass
            try:
                p.delete()
            except BaseException:
                pass
    
    
    def test_ticket_165():
        try:
            db.execute_query("FIND Test*").delete()
        except BaseException:
            pass
        try:
            p = db.Property(name="TestComment", datatype="TEXT")
    
            rt_a = db.RecordType(name="TestAnnotation").add_property(
                name="TestComment")
            rt_a.datatype = "REFERENCE"
    
            rt_b = db.RecordType(name="TestEntity")
    
            assert_true(isinstance(rt_a, db.Entity))
            r_a = db.Record().add_parent(rt_a).add_property(
                name="TestComment", value="blablabla")
            r_a.value = rt_b
    
            c = db.Container().extend([p, rt_a, rt_b, r_a]).insert()
            assert_true(c.is_valid())
            for e in c:
                assert_true(e.is_valid())
    
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND TestEntity WHICH IS REFERENCED BY TestAnnotation",
                    unique=True).id)
            assert_equals(rt_b.id,
                          db.execute_query(
                              "FIND Entity WHICH IS REFERENCED BY TestAnnotation",
                              unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND RecordType WHICH IS REFERENCED BY TestAnnotation",
                    unique=True).id)
            assert_equals(
                0,
                len(
                    db.execute_query(
                        "FIND Record WHICH IS REFERENCED BY TestAnnotation")))
    
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND TestEntity WHICH IS REFERENCED WITH TestComment",
                    unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment",
                    unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment",
                    unique=True).id)
            assert_equals(0, len(db.execute_query(
                "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment")))
    
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND TestEntity WHICH IS REFERENCED BY TestAnnotation WITH TestComment",
                    unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment",
                    unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment",
                    unique=True).id)
            assert_equals(0, len(db.execute_query(
                "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment")))
    
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND TestEntity WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'",
                    unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'",
                    unique=True).id)
            assert_equals(
                rt_b.id,
                db.execute_query(
                    "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'",
                    unique=True).id)
            assert_equals(0, len(db.execute_query(
                "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'")))
    
            c.delete()
    
        finally:
            try:
                db.execute_query("FIND Test*").delete()
            except BaseException:
                pass
            try:
                r_a.delete()
            except BaseException:
                pass
            try:
                rt_b.delete()
            except BaseException:
                pass
            try:
                rt_b.delete()
            except BaseException:
                pass
            try:
                rt_a.delete()
            except BaseException:
                pass
            try:
                p.delete()
            except BaseException:
                pass
    
    
    def test_ticket_174():
    
        try:
    
            p1 = db.Property(name="Ticket174_P1", datatype="INTEGER")
            p2 = db.Property(name="Ticket174_P2", datatype="DOUBLE")
            rt1 = db.RecordType(name="Ticket174_RecordType1").add_property(
                p1, value=1).add_property(
                    p2, value=2)
            rt2 = db.RecordType(name="Ticket174_RecordType2").add_property(
                p2, value=1).add_property(
                    p1, value=2)
            rt3 = db.RecordType(name="Ticket174_RecordType3").add_property(
                p1, value=1).add_property(
                    p1, value=2).add_property(
                        p2, value=3)
            rt4 = db.RecordType(name="Ticket174_RecordType4").add_property(
                p2, value=1).add_property(
                    p1, value=2).add_property(
                        p1, value=3).add_property(
                            p2, value=4)
    
            c = db.Container().extend([p1, p2, rt1, rt2, rt3, rt4]).insert()
    
            assert_true(c.is_valid())
    
            assert_true(rt1.is_valid())
            for i in range(len(rt1.get_properties())):
                assert_equals(i + 1.0, float(rt1.get_properties()[i].value))
    
            assert_true(rt2.is_valid())
            for i in range(len(rt2.get_properties())):
                assert_equals(i + 1.0, float(rt2.get_properties()[i].value))
    
            assert_true(rt3.is_valid())
            for i in range(len(rt3.get_properties())):
                assert_equals(i + 1.0, float(rt3.get_properties()[i].value))
    
            assert_true(rt4.is_valid())
            for i in range(len(rt4.get_properties())):
                assert_equals(i + 1.0, float(rt4.get_properties()[i].value))
    
            # change order:
            rt4_i1 = rt4.get_properties()[1]
            rt4_i2 = rt4.get_properties()[2]
            rt4.get_properties()[2] = rt4_i1
            rt4.get_properties()[1] = rt4_i2
            rt4.update()
    
            assert_true(rt4.is_valid())
    
            assert_equals(1.0, float(rt4.get_properties()[0].value))
            assert_equals(3.0, float(rt4.get_properties()[1].value))
            assert_equals(2.0, float(rt4.get_properties()[2].value))
            assert_equals(4.0, float(rt4.get_properties()[3].value))
    
            # retrieve again:
            rt42 = db.execute_query("FIND Ticket174_RecordType4", unique=True)
    
            assert_equals(1.0, float(rt42.get_properties()[0].value))
            assert_equals(3.0, float(rt42.get_properties()[1].value))
            assert_equals(2.0, float(rt42.get_properties()[2].value))
            assert_equals(4.0, float(rt42.get_properties()[3].value))
    
            c.delete()
        finally:
            try:
                rt1.delete()
            except BaseException:
                pass
            try:
                rt2.delete()
            except BaseException:
                pass
            try:
                rt3.delete()
            except BaseException:
                pass
            try:
                rt4.delete()
            except BaseException:
                pass
            try:
                p2.delete()
            except BaseException:
                pass
            try:
                p1.delete()
            except BaseException:
                pass
    
    
    def test_ticket_192():
        import time
    
        if time.localtime().tm_hour > time.gmtime().tm_hour:
            try:
                rt = db.RecordType(name="SimulationTestRecordType").insert()
                rec = db.Record().add_parent(rt).insert()
    
                assert_equals(
                    rec.id,
                    db.execute_query(
                        "FIND Record SimulationTestRecordType WHICH WAS CREATED BY ME",
                        unique=True).id)
                assert_equals(
                    rec.id,
                    db.execute_query(
                        "FIND Record SimulationTestRecordType WHICH WAS CREATED TODAY",
                        unique=True).id)
                assert_equals(
                    rec.id,
                    db.execute_query(
                        "FIND Record SimulationTestRecordType WHICH WAS CREATED TODAY BY ME",
                        unique=True).id)
                assert_equals(rec.id,
                              db.execute_query(
                                  "FIND Record WHICH WAS CREATED TODAY BY ME",
                                  unique=True).id)
            finally:
                try:
                    rec.delete()
                except BaseException:
                    pass
                try:
                    rt.delete()
                except BaseException:
                    pass
    
    
    def test_ticket_200():
        try:
    
            # Properties:
            Email = db.Property(name="EmailAddressTest", datatype="TEXT").insert()
            Fname = db.Property(name="FirstNameTest", datatype="TEXT").insert()
            Lname = db.Property(name="LastNameTest", datatype="TEXT").insert()
    
            # Record Types:
            Person = db.RecordType(name="PersonTestRecordType").add_property(
                Fname).add_property(Lname).insert()
    
            # These properties are to be inherited:
            # FirstName = Property(name="FirstName", datatype="TEXT")
            # LastName = Property(name="LastName", datatype="TEXT")
            Person2 = db.RecordType(
                name="PersonWithEmailTestRecordType") .add_parent(
                parent=db.RecordType("PersonTestRecordType").retrieve(),
                inheritance="all") .add_property(
                property=Email).insert()
    
            assert_true(Person2.is_valid())
            assert_equals(Email.id, Person2.get_property("EmailAddressTest").id)
            assert_equals(Fname.id, Person2.get_property("FirstNameTest").id)
            assert_equals(Lname.id, Person2.get_property("LastNameTest").id)
    
            p2 = db.execute_query(
                "FIND RecordType PersonWithEmailTestRecordType", unique=True)
            assert_equals(p2.id, Person2.id)
            assert_equals(Email.id, p2.get_property("EmailAddressTest").id)
            assert_equals(Fname.id, p2.get_property("FirstNameTest").id)
            assert_equals(Lname.id, p2.get_property("LastNameTest").id)
    
        finally:
            try:
                Person2.delete()
            except BaseException:
                pass
            try:
                Person.delete()
            except BaseException:
                pass
            try:
                Email.delete()
            except BaseException:
                pass
            try:
                Fname.delete()
            except BaseException:
                pass
            try:
                Lname.delete()
            except BaseException:
                pass
    
    
    def test_ticket_155():
    
        try:
    
            # Properties:
            p = db.Property(
                name="SimpleTextProperty",
                description="standard desc",
                datatype="TEXT").insert()
            assert_true(p.is_valid())
            assert_equals(p.description, "standard desc")
            p2 = db.execute_query("FIND SimpleTextProperty", True)
            assert_true(p2.is_valid())
            assert_equals(p2.description, "standard desc")
    
            rt = db.RecordType(name="SimpleRecordType").add_property(
                p, description="overridden standard desc").insert()
            assert_true(rt.is_valid())
            assert_equals(
                rt.get_property("SimpleTextProperty").description,
                "overridden standard desc")
            rt2 = db.execute_query("FIND SimpleRecordType", True)
            assert_true(rt2.is_valid())
            assert_equals(
                rt2.get_property("SimpleTextProperty").description,
                "overridden standard desc")
    
            rt3 = db.RecordType(name="SimpleRecordType2").add_parent(
                rt, inheritance="all").insert()
            assert_true(rt3.is_valid())
            assert_equals(
                rt3.get_property("SimpleTextProperty").description,
                "overridden standard desc")
    
            rt4 = db.execute_query("FIND SimpleRecordType2", True)
            assert_true(rt4.is_valid())
            assert_equals(
                rt4.get_property("SimpleTextProperty").description,
                "overridden standard desc")
    
        finally:
            try:
                rt3.delete()
            except BaseException:
                pass
            try:
                rt.delete()
            except BaseException:
                pass
            try:
                p.delete()
            except BaseException:
                pass
    
    
    def test_ticket_191():
        try:
            rt = db.RecordType(name="RecordTypeTest")
            rt.insert()
            c = db.Container().retrieve(
                [rt.id, rt.id], raise_exception_on_error=False, sync=False)
            print(c)
            assert_equals(len(c), 1)
        finally:
            try:
                rt.delete()
            except BaseException:
                pass
    
    
    def run_test_files_tmp():
        test_misc.test_info()
    
    
    def test_ticket_104():
        try:
            url = db.get_config().get("Connection", "url")
    
            try:
                from urllib.parse import urlparse
            except BaseException:
                # python2
                from urlparse import urlparse
            _fullurl = urlparse(url)
            _netloc = _fullurl.netloc
            _basepath = _fullurl.path
    
            wrongbasepath = _netloc + "/wrongcontextroot/"
            print(wrongbasepath)
            assert_raises(
                CaosDBException, db.configure_connection(url=wrongbasepath)._login)
        finally:
            db.configure_connection()
    
    
    def test_ticket_115():
        try:
            p1 = db.Property(name="SimpleDoubleProperty1", datatype=db.DOUBLE)
            p2 = db.Property(name="SimpleDoubleProperty2", datatype=db.DOUBLE)
            rt = db.RecordType(
                name="SimpleRecordType").add_property(p1).add_property(p2)
            c = db.Container().extend([p1, p2, rt])
            c.insert()
            assert_true(c.is_valid())
    
            rtc = db.execute_query("FIND SimpleRecordType", unique=True)
            assert_equals(len(rtc.get_properties()), 2)
    
            rtc.get_properties().remove("SimpleDoubleProperty1")
            assert_equals(len(rtc.get_properties()), 1)
    
            rtc.update()
            assert_true(c.is_valid())
            assert_equals(len(rtc.get_properties()), 1)
    
        finally:
            try:
                db.execute_query("FIND Simple*").delete()
            except BaseException:
                pass