コード例 #1
0
ファイル: zooobject.py プロジェクト: pombredanne/GraphZOO
 def _todict(self, r, skip = [], fields = None):
     if fields is None:
         fields = self._spec["fields"]
     return {k: self._db.from_db_type(r[k],
                             lookup(fields, k, default = type(r[k])))
             for k in r.keys() if k in fields and k not in skip
                                  and r[k] is not None}
コード例 #2
0
ファイル: zooobject.py プロジェクト: pombredanne/GraphZOO
 def one(self, *largs, **kargs):
     kargs["limit"] = 1
     db = lookup(kargs, "db", default = None, destroy = True)
     if db is None:
         db = self.getdb()
     cur = self.query(db =db, *largs, **kargs)
     r = cur.fetchone()
     if r is None:
         raise KeyError(kargs)
     return self.cl(drop_none(r), db = db)
コード例 #3
0
ファイル: zoograph.py プロジェクト: pombredanne/GraphZOO
 def _graphattr(store=False, *largs, **kargs):
     default = len(largs) + len(kargs) == 0
     try:
         if not default:
             raise NotImplementedError
         return lookup(self._props, name)
     except (KeyError, NotImplementedError):
         a = Graph.__getattribute__(self, name)(*largs, **kargs)
         if default and store:
             update(self._props, attr, d)
         return a
コード例 #4
0
ファイル: zoograph.py プロジェクト: pombredanne/GraphZOO
 def is_cayley_graph(self, store=False):
     try:
         return lookup(self._props, "is_cayley_graph")
     except (KeyError, NotImplementedError):
         A = self.automorphism_group()
         n = self.order()
         if A.order() == n:
             c = A.is_transitive()
         else:
             c = any(s.order() == n and s.is_transitive() for s in A.conjugacy_classes_subgroups())
         if store:
             update(self._props, "is_cayley_graph", c)
         return c
コード例 #5
0
ファイル: zoograph.py プロジェクト: pombredanne/GraphZOO
 def is_regular(self, k=None, store=False, **kargs):
     default = len(kargs) == 0
     try:
         if not default:
             raise NotImplementedError
         r = lookup(self._props, "is_regular")
         return r and (True if k is None else k == self.average_degree(store=store))
     except (KeyError, NotImplementedError):
         r = Graph.is_regular(self, k, **kargs)
         if default and store:
             update(self._props, "is_regular", r)
             if r and k is not None:
                 update(self._props, "average_degree", k)
         return r
コード例 #6
0
ファイル: zooobject.py プロジェクト: pombredanne/GraphZOO
 def count(self, *largs, **kargs):
     db = lookup(kargs, "db", default = None, destroy = True)
     join = lookup(kargs, "join", default = None, destroy = True)
     by = lookup(kargs, "by", default = None, destroy = True)
     if db is None:
         db = self.getdb()
     t = Table(self.cl._spec["name"])
     if join is not None:
         t = t.join(join, by = by)
     if self.cl._parent is None:
         groupby = lookup(kargs, "groupby", default = [], destroy = True)
         if type(groupby) == set:
             groupby = list(groupby)
         elif type(groupby) != list:
             groupby = [groupby]
         cur = db.query(columns = [Count(All())] + groupby, table = t,
                        cond = And(*largs, **kargs), groupby = groupby)
         n = cur.fetchall()
         cur.close()
         return tomultidict(n, groupby)
     else:
         return ZooInfo(self.cl._parent).count(db = db, join = t,
                                     by = {self.cl._spec["primary_key"]},
                                     *largs, **kargs)
コード例 #7
0
ファイル: zooobject.py プロジェクト: pombredanne/GraphZOO
 def query(self, *largs, **kargs):
     db = lookup(kargs, "db", default = None, destroy = True)
     join = lookup(kargs, "join", default = None, destroy = True)
     by = lookup(kargs, "by", default = None, destroy = True)
     if db is None:
         db = self.getdb()
     t = Table(self.cl._spec["name"])
     if join is not None:
         t = t.join(join, by = by)
     if self.cl._parent is None:
         cur = lookup(kargs, "cur", default = None, destroy = True)
         orderby = lookup(kargs, "orderby", default = [], destroy = True)
         limit = lookup(kargs, "limit", default = None, destroy = True)
         offset = lookup(kargs, "offset", default = None, destroy = True)
         return db.query(columns = [All()], table = t,
                         cond = And(*largs, **kargs), orderby = orderby,
                         limit = limit,  offset = offset, cur = cur)
     else:
         return ZooInfo(self.cl._parent).query(db = db, join = t,
                                     by = {self.cl._spec["primary_key"]},
                                     *largs, **kargs)
コード例 #8
0
ファイル: zooobject.py プロジェクト: pombredanne/GraphZOO
 def all(self, *largs, **kargs):
     db = lookup(kargs, "db", default = None, destroy = True)
     if db is None:
         db = self.getdb()
     cur = self.query(db = db, *largs, **kargs)
     return (self.cl(drop_none(r), db = db) for r in cur)
コード例 #9
0
ファイル: postgresql.py プロジェクト: pombredanne/GraphZOO
 def cursor(self, **kargs):
     try:
         lookup(kargs, 'cursor_factory')
     except KeyError:
         kargs['cursor_factory'] = psycopg2.extras.DictCursor
     return self.db.cursor(**kargs)