Mercurial > sqlpython
annotate omit_error_objects.patch @ 483:c5c1786cdee2
escape $ in names of schema objects sought
author | Catherine Devlin <catherine.devlin@gmail.com> |
---|---|
date | Wed, 25 Aug 2010 18:52:49 -0400 |
parents | ad07a08cb792 |
children |
rev | line source |
---|---|
478
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
1 diff -r db8d877dbf4e gerald/oracle_schema.py |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
2 --- a/gerald/oracle_schema.py Wed Mar 10 15:41:22 2010 -0500 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
3 +++ b/gerald/oracle_schema.py Wed Mar 10 15:46:07 2010 -0500 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
4 @@ -84,21 +84,21 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
5 cursor.execute(stmt) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
6 for table in cursor.fetchall(): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
7 LOG.debug('Getting details for table %s' % table[0]) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
8 - schema[table[0]] = Table(table[0], cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
9 + self._set_unless_fail(schema, table[0], table[0], Table, cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
10 # Views |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
11 stmt = """SELECT view_name |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
12 FROM user_views""" |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
13 cursor.execute(stmt) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
14 for view in cursor.fetchall(): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
15 LOG.debug("Getting details for view %s" % view[0]) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
16 - schema[view[0]] = View(view[0], cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
17 + self._set_unless_fail(schema, view[0], view[0], View, cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
18 # Sequences |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
19 stmt = """SELECT sequence_name |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
20 FROM user_sequences""" |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
21 cursor.execute(stmt) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
22 for sequence in cursor.fetchall(): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
23 LOG.debug("Getting details for sequence %s" % sequence[0]) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
24 - schema[sequence[0]] = Sequence(sequence[0], cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
25 + self._set_unless_fail(schema, sequence[0], sequence[0], Sequence, cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
26 # Code objects (packages, procedures and functions) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
27 # Note that we exclude package bodies, even though they are separate |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
28 # objects they are stored under the package header in gerald |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
29 @@ -112,11 +112,9 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
30 object_name, object_type = code_object |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
31 LOG.debug("Getting details for code object %s" % object_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
32 if object_type == 'PACKAGE': |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
33 - schema[object_name] = Package(object_name, object_type, cursor, |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
34 - schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
35 + self._set_unless_fail(schema, object_name, object_name, Package, object_type, cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
36 else: |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
37 - schema[object_name] = CodeObject(object_name, object_type, |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
38 - cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
39 + self._set_unless_fail(schema, object_name, object_name, CodeObject, object_type, cursor, schema_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
40 # Database links |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
41 stmt = """SELECT db_link |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
42 FROM user_db_links |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
43 @@ -126,12 +124,11 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
44 for db_link in cursor.fetchall(): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
45 link_name = db_link[0] |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
46 LOG.debug("Getting details for db link %s" % link_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
47 - schema[link_name] = DatabaseLink(link_name, cursor) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
48 + self._set_unless_fail(schema, link_name, link_name, DatabaseLink, cursor) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
49 # All done, return the fruit of our labours |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
50 LOG.info('Got details for schema %s' % self.name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
51 return schema |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
52 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
53 - |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
54 class User(schema.Schema): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
55 """ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
56 A representation of an Oracle database user |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
57 @@ -168,7 +165,7 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
58 owner, table_name = table |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
59 LOG.debug('Getting details for table %s' % table_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
60 table_key = '%s.%s' % (owner, table_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
61 - schema[table_key] = Table(table_name, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
62 + self._set_unless_fail(schema, table_key, table_name, Table, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
63 # Views |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
64 stmt = """SELECT view_name, owner |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
65 FROM all_views""" |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
66 @@ -177,7 +174,7 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
67 view_name, owner = view |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
68 LOG.debug("Getting details for view %s" % view_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
69 view_key = '%s.%s' % (owner, view_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
70 - schema[view_key] = View(view_name, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
71 + self._set_unless_fail(schema, view_key, view_name, View, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
72 # Sequences |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
73 stmt = """SELECT sequence_name, sequence_owner |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
74 FROM all_sequences""" |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
75 @@ -186,7 +183,7 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
76 sequence, owner = seq |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
77 LOG.debug("Getting details for sequence %s" % sequence) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
78 sequence_key = '%s.%s' % (owner, sequence) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
79 - schema[sequence_key] = Sequence(sequence, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
80 + self._set_unless_fail(schema, sequence_key, sequence, Sequence, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
81 # Code objects (packages, procedures and functions) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
82 # Note that we exclude package bodies, even though they are separate |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
83 # objects they are stored under the package header in gerald |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
84 @@ -201,9 +198,9 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
85 object_key = '%s.%s' % (owner, object_name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
86 LOG.debug("Getting details for code object %s" % object_key) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
87 if object_type == 'PACKAGE': |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
88 - schema[object_key] = Package(object_name, object_type, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
89 + self._set_unless_fail(schema, object_key, object_name, Package, object_type, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
90 else: |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
91 - schema[object_key] = CodeObject(object_name, object_type, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
92 + self._set_unless_fail(schema, object_key, object_name, CodeObject, object_type, cursor, owner) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
93 # All done, return the fruit of our labours |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
94 LOG.info('Got details for user %s' % self.name) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
95 return schema |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
96 @@ -1033,5 +1030,8 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
97 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
98 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
99 if __name__ == "__main__": |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
100 - print "This module should not be invoked from the command line" |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
101 + import gerald |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
102 + sch = gerald.oracle_schema.User('eqdbw', 'oracle://eqdbw/mtndew@afmcce1.wpafb.af.mil/eqprod.wpafb.af.mil',omit_error_objects=True) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
103 + print sch |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
104 + #print "This module should not be invoked from the command line" |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
105 sys.exit(1) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
106 diff -r db8d877dbf4e gerald/schema.py |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
107 --- a/gerald/schema.py Wed Mar 10 15:41:22 2010 -0500 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
108 +++ b/gerald/schema.py Wed Mar 10 15:46:07 2010 -0500 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
109 @@ -75,7 +75,7 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
110 - _db. A database connection. Optional, need not be provided by sub-classes. |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
111 - _cursor. A cursor generated from _db |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
112 """ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
113 - def __init__(self, schema_name, connection_string=None): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
114 + def __init__(self, schema_name, connection_string=None, omit_error_objects=False): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
115 """ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
116 Initialise the schema. |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
117 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
118 @@ -87,6 +87,7 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
119 @return: Success or failure |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
120 @rtype: Boolean |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
121 """ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
122 + self.omit_error_objects = omit_error_objects |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
123 self.name = schema_name |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
124 self.api_version = Decimal('1.1') |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
125 self.schema = {} |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
126 @@ -226,6 +227,15 @@ |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
127 results.append('%s is different ' % schema_object) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
128 results.append('in the two schemas') |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
129 return ''.join(results) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
130 + def _set_unless_fail(self, schema, key, object_name, object_type, *args): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
131 + try: |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
132 + schema[key] = object_type(object_name, *args) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
133 + except (AttributeError) as e: |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
134 + if self.omit_error_objects: |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
135 + LOG.warning("Couldn't get details for %s: %s" % (key, str(e))) |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
136 + else: |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
137 + raise |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
138 + |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
139 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
140 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
141 class Table(object): |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
142 |
ad07a08cb792
temporarily package gerald patch for convenience
catherine@dellzilla
parents:
diff
changeset
|
143 |