예제 #1
0
    def populate(cls, con, items, log=None):
        log = log or LogManager().get_logger(
            "turberfield.dialogue.schema.populate")
        states = [i for i in items if type(i) is enum.EnumMeta]
        entities = [i for i in items if i not in states]
        rv = 0
        for state in states:
            for defn in state:
                try:
                    Insertion(cls.tables["state"],
                              data={
                                  "class": defn.__objclass__.__name__,
                                  "name": defn.name,
                                  "value": defn.value
                              }).run(con)
                except sqlite3.IntegrityError as e:
                    log.warning(e)
                    con.rollback()
                except Exception as e:
                    log.error(e)
                    con.rollback()
                else:
                    rv += 1

        for entity in entities:
            try:
                Insertion(cls.tables["entity"],
                          data={
                              "name":
                              getattr(
                                  entity, "_name",
                                  getattr(entity, "name",
                                          entity.__class__.__name__))
                          }).run(con)
            except sqlite3.IntegrityError as e:
                log.warning(e)
                con.rollback()
            except Exception as e:
                log.error(e)
                con.rollback()
            else:
                rv += 1
        return rv
예제 #2
0
 def test_insert_entity(self):
     expected = (
         "insert into entity (name) values (:name)",
         {"name": "qwerty"}
     )
     rv = Insertion(
         SchemaBase.tables["entity"],
         data=dict(
             name="qwerty"
         )
     ).sql
     self.assertEqual(expected, rv)
예제 #3
0
 def test_insert_entity(self):
     expected = (
         "insert into entity (session, name) values (:session, :name)",
         {"session": "1234567890", "name": "qwerty"}
     )
     rv = Insertion(
         schema["entity"],
         data=dict(
             session="1234567890",
             name="qwerty"
         )
     ).sql
     self.assertEqual(expected, rv)
예제 #4
0
 def test_primary_keys(self):
     con = Connection(**Connection.options())
     with con as db:
         rv = Creation(schema["entity"]).run(db)
         session=uuid.uuid4().hex
         rv = Insertion(
             schema["entity"],
             data=dict(
                 name="test",
                 session=session
             )
         ).run(db)
         self.assertRaises(
             sqlite3.IntegrityError,
             Insertion(
                 schema["entity"],
                 data=dict(
                     session=session
                 )
             ).run,
             db
         )
예제 #5
0
 def test_not_null(self):
     con = Connection(**Connection.options())
     with con as db:
         rv = Creation(schema["entity"]).run(db)
         self.assertRaises(
             sqlite3.IntegrityError,
             Insertion(
                 schema["entity"],
                 data=dict(
                     session=uuid.uuid4().hex
                 )
             ).run,
             db
         )
예제 #6
0
 def test_insertion_keys(self):
     con = Connection(**Connection.options())
     with con as db:
         rv = Creation(schema["touch"]).run(db)
         session=uuid.uuid4().hex
         self.assertRaises(
             sqlite3.OperationalError,
             Insertion(
                 schema["touch"],
                 data=dict(
                     sbjct=1,
                     objct=1
                 )
             ).run,
             db
         )
예제 #7
0
 def test_insertion_entity(self):
     con = Connection(**Connection.options())
     with con as db:
         rv = Creation(schema["entity"]).run(db)
         session=uuid.uuid4().hex
         Insertion(
             schema["entity"],
             data=dict(
                 session=session,
                 name="test"
             )
         ).run(db)
         cur = db.cursor()
         cur.execute("select * from entity")
         rv = cur.fetchall()
         self.assertEqual(1, len(rv))
         self.assertEqual(rv[0]["id"], 1)
         self.assertEqual(rv[0]["name"], "test")
예제 #8
0
 def test_insertion_entities(self):
     con = Connection(**Connection.options())
     session = uuid.uuid4().hex
     with con as db:
         rv = Creation(schema["entity"]).run(db)
         Insertion(
             schema["entity"],
             data=[
                 {"name": "test_one", "session": session},
                 {"name": "test_two", "session": session}
             ]
         ).run(db)
         cur = db.cursor()
         cur.execute("select * from entity")
         rv = cur.fetchall()
         self.assertEqual(2, len(rv))
         self.assertEqual(rv[0]["id"], 1)
         self.assertEqual(rv[0]["name"], "test_one")
         self.assertEqual(rv[1]["id"], 2)
         self.assertEqual(rv[1]["name"], "test_two")
예제 #9
0
    def note(cls,
             con,
             sbjct,
             state,
             objct=None,
             ts=None,
             text="",
             html="",
             log=None):
        rv = cls.touch(con, sbjct, state, objct, ts, log=log)

        op = Insertion(cls.tables["note"],
                       data={
                           "touch": rv,
                           "text": text,
                           "html": html,
                       })
        if log is not None:
            log.debug(op.sql)
        cur = op.run(con)
        rv = cur.lastrowid
        cur.close()
        return rv
예제 #10
0
 def touch(cls,
           con,
           sbjct,
           state,
           objct=None,
           ts=None,
           text="",
           html="",
           log=None):
     refs = list(cls.reference(con, [sbjct, state, objct]))
     op = Insertion(cls.tables["touch"],
                    data={
                        "ts": ts or datetime.datetime.utcnow(),
                        "sbjct": refs[0]["id"],
                        "state": refs[1]["id"],
                        "objct": refs[2] and refs[2]["id"]
                    })
     if log is not None:
         log.debug(op.sql)
     cur = op.run(con)
     rv = cur.lastrowid
     cur.close()
     return rv
예제 #11
0
    def test_selection_entity(self):
        class Selection(SQLOperation):

            @property
            def sql(self):
                return ("select * from {0.name}".format(self.tables[0]) , {})

        con = Connection(**Connection.options())
        with con as db:
            rv = Creation(schema["entity"]).run(db)
            session = uuid.uuid4().hex
            cur = Insertion(
                schema["entity"],
                data=dict(
                    session=session,
                    name="test"
                )
            ).run(db)

            rv = Selection(schema["entity"]).run(db)
            rows = rv.fetchall()
            self.assertEqual(1, len(rows))
            self.assertEqual(rows[0]["id"], 1)
            self.assertEqual(rows[0]["name"], "test")