Advertisement
Guest User

Pyrseas WC

a guest
Feb 11th, 2015
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 6.53 KB | None | 0 0
  1. diff --git a/pyrseas/dbobject/__init__.py b/pyrseas/dbobject/__init__.py
  2. index f6f8191..2017d55 100644
  3. --- a/pyrseas/dbobject/__init__.py
  4. +++ b/pyrseas/dbobject/__init__.py
  5. @@ -121,8 +121,7 @@ def ownable(func):
  6.      @wraps(func)
  7.      def add_alter(obj, *args, **kwargs):
  8.          stmts = func(obj, *args, **kwargs)
  9. -        if hasattr(obj, 'owner'):
  10. -            stmts.append(obj.alter_owner())
  11. +        stmts.append(obj.alter_owner())
  12.          return stmts
  13.      return add_alter
  14.  
  15. @@ -149,7 +148,7 @@ class DbObject(object):
  16.  
  17.      allprivs = ''
  18.  
  19. -    def __init__(self, **attrs):
  20. +    def __init__(self, owner=None, privileges=None, **attrs):
  21.          """Initialize the catalog object from a dictionary of attributes
  22.  
  23.          :param attrs: the dictionary of attributes
  24. @@ -160,6 +159,11 @@ class DbObject(object):
  25.          """
  26.          self.depends_on = []
  27.  
  28. +        self.owner = owner
  29. +        if isinstance(privileges, basestring):
  30. +            privileges = privileges.split(',')
  31. +        self.privileges = privileges or []
  32. +
  33.          for key, val in list(attrs.items()):
  34.              if val or key in self.keylist:
  35.                  if key in ['definition', 'description', 'source'] and \
  36. @@ -301,32 +305,37 @@ class DbObject(object):
  37.          :param no_privs: exclude privilege information
  38.          :return: dictionary
  39.          """
  40. -        dct = self.__dict__.copy()
  41. -        for key in self.keylist:
  42. -            del dct[key]
  43. -        if no_owner and hasattr(self, 'owner'):
  44. -            del dct['owner']
  45. -        if hasattr(self, 'privileges'):
  46. -            if no_privs:
  47. -                del dct['privileges']
  48. -            else:
  49. -                dct['privileges'] = self.map_privs()
  50. +        rv = {}
  51. +        for k, v in self.__dict__.iteritems():
  52. +            # Don't dump any private attribute
  53. +            if k.startswith('_'):
  54. +                continue
  55.  
  56. -        # Never dump the oid
  57. -        dct.pop('oid', None)
  58. +            # Never dump the oid
  59. +            if k == 'oid':
  60. +                continue
  61.  
  62. -        # Only dump dependencies that can't be inferred from the context
  63. -        deps = set(dct.pop('depends_on', ()))
  64. -        deps -= self.get_implied_deps(db)
  65. -        if deps:
  66. -            dct['depends_on'] = sorted([ dep.extern_key() for dep in deps ])
  67. +            # Don't dump the keylist items
  68. +            if k in self.keylist:
  69. +                continue
  70.  
  71. -        # Don't drop any private attribute
  72. -        for k in dct.keys():
  73. -            if k.startswith('_'):
  74. -                del dct[k]
  75. +            if k == 'owner' and no_owner:
  76. +                continue
  77. +
  78. +            if k == 'privileges':
  79. +                if no_privs:
  80. +                    continue
  81. +                else:
  82. +                    v = self.map_privs()
  83. +
  84. +            if k == 'depends_on':
  85. +                v = set(v)
  86. +                v -= self.get_implied_deps(db)
  87. +                v = sorted(dep.extern_key() for dep in v)
  88. +
  89. +            rv[k] = v
  90.  
  91. -        return dct
  92. +        return rv
  93.  
  94.      def to_map(self, db, no_owner=False, no_privs=False):
  95.          """Convert an object to a YAML-suitable format
  96. @@ -349,9 +358,8 @@ class DbObject(object):
  97.          :return: list
  98.          """
  99.          privlist = []
  100. -        owner = self.owner if hasattr(self, 'owner') else ''
  101.          for prv in self.privileges:
  102. -            privlist.append(privileges_to_map(prv, self.allprivs, owner))
  103. +            privlist.append(privileges_to_map(prv, self.allprivs, self.owner))
  104.          return privlist
  105.  
  106.      def _comment_text(self):
  107. @@ -400,9 +408,8 @@ class DbObject(object):
  108.  
  109.      def alter_sql(self, inobj, no_owner=False):
  110.          stmts = []
  111. -        if not no_owner and hasattr(inobj, 'owner') and hasattr(self, 'owner'):
  112. -            if inobj.owner != self.owner:
  113. -                stmts.append(self.alter_owner(inobj.owner))
  114. +        if not no_owner and inobj.owner != self.owner:
  115. +            stmts.append(self.alter_owner(inobj.owner))
  116.          stmts.append(self.diff_privileges(inobj))
  117.          stmts.append(self.diff_description(inobj))
  118.          return stmts
  119. @@ -417,9 +424,8 @@ class DbObject(object):
  120.          :return: list of SQL statements
  121.          """
  122.          stmts = []
  123. -        currprivs = self.privileges if hasattr(self, 'privileges') else {}
  124. -        newprivs = inobj.privileges if hasattr(inobj, 'privileges') else {}
  125. -        stmts.append(diff_privs(self, currprivs, inobj, newprivs))
  126. +        stmts.append(diff_privs(self, self.privileges,
  127. +                                inobj, inobj.privileges))
  128.          return stmts
  129.  
  130.      def diff_description(self, inobj):
  131. @@ -558,11 +564,8 @@ class DbObjectDict(dict):
  132.          This is may be overriden by derived classes as needed.
  133.          """
  134.          for obj in self.fetch():
  135. -            if hasattr(obj, 'privileges'):
  136. -                obj.privileges = obj.privileges.split(',')
  137.              self[obj.key()] = obj
  138. -            if hasattr(obj, 'oid'):
  139. -                self.by_oid[obj.oid] = obj
  140. +            self.by_oid[obj.oid] = obj
  141.  
  142.      def to_map(self, db, opts):
  143.          """Convert the object dictionary to a regular dictionary
  144. diff --git a/pyrseas/dbobject/column.py b/pyrseas/dbobject/column.py
  145. index 49aceb8..bf36ba4 100644
  146. --- a/pyrseas/dbobject/column.py
  147. +++ b/pyrseas/dbobject/column.py
  148. @@ -69,9 +69,8 @@ class Column(DbSchemaObject):
  149.          :return: list of SQL statements
  150.          """
  151.          stmts = []
  152. -        currprivs = self.privileges if hasattr(self, 'privileges') else {}
  153. -        newprivs = incol.privileges if hasattr(incol, 'privileges') else {}
  154. -        stmts.append(diff_privs(self._table, currprivs, incol._table, newprivs,
  155. +        stmts.append(diff_privs(self._table, self.privileges,
  156. +                                incol._table, incol.privileges,
  157.                                  self.name))
  158.          return stmts
  159.  
  160. diff --git a/pyrseas/dbobject/foreign.py b/pyrseas/dbobject/foreign.py
  161. index 04eef12..8d25876 100644
  162. --- a/pyrseas/dbobject/foreign.py
  163. +++ b/pyrseas/dbobject/foreign.py
  164. @@ -127,9 +127,8 @@ class ForeignDataWrapper(DbObjectWithOptions):
  165.          :return: list of SQL statements
  166.          """
  167.          stmts = super(ForeignDataWrapper, self).diff_map(inwrapper)
  168. -        if hasattr(inwrapper, 'owner'):
  169. -            if inwrapper.owner != self.owner:
  170. -                stmts.append(self.alter_owner(inwrapper.owner))
  171. +        if inwrapper.owner != self.owner:
  172. +            stmts.append(self.alter_owner(inwrapper.owner))
  173.          stmts.append(self.diff_description(inwrapper))
  174.          return stmts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement