Changeset 638
- Timestamp:
- 10/22/08 16:10:58 (5 years ago)
- Location:
- trunk/plugins/oforgeplugin
- Files:
-
- 3 edited
-
oforge/api.py (modified) (4 diffs)
-
oforge/console.py (modified) (1 diff)
-
setup.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugins/oforgeplugin/oforge/api.py
r637 r638 70 70 props['port'] = \ 71 71 self.config.get('oforge', 'master_warehouse.port', None) 72 props['schema'] = \ 73 self.config.get('oforge', 'master_warehouse.schema', None) 72 74 return props 73 75 … … 101 103 thepath = path.join(base, name) 102 104 env = Environment(thepath) 103 return env105 return env 104 106 105 107 def getconfig(self, name): … … 149 151 return ("workspace_%s"%(re.sub('(\W+)', '', name))).lower() 150 152 153 def reload_warehouse_tickets(self, name): 154 env = self.getenv(name) 155 proj_id = self.config.get('oforge', 'proj_id') 156 if proj_id: 157 project = Project.objects.filter(id=proj_id) 158 tickets = Ticket.objects.filter(project=project) 159 tickets.delete() 160 for row in cursor.fetchall(): 161 t = Ticket.new( 162 project=project, 163 ticket_id=row.id, 164 type=row.type, 165 time=int(row.time), 166 changetime=int(row.changetime), 167 component=row.component, 168 severity=row.severity, 169 priority=row.priority, 170 owner=row.owner, 171 report=row.report, 172 cc=row.cc, 173 version=row.version, 174 milestone=row.milestone, 175 resolution=row.resolution, 176 summary=row.summary, 177 description=row.description, 178 keyword=row.keyword, 179 status=row.status) 180 t.save() 181 182 def warehouse_project(self, name): 183 env = self.getenv(name) 184 proj_id = env.config.get('oforge', 'proj_id') 185 if proj_id: 186 fields = ('type', 'time', 'changetime', 'component', 'severity', 187 'priority', 'owner', 'reporter', 'cc', 'version', 'milestone', 188 'resolution', 'summary', 'description', 'keywords', 'status') 189 names = ','.join(fields) 190 values = ','.join(map(lambda f: "new.%s"%(f), fields)) 191 setters = ','.join(map(lambda f: "%s = new.%s"%(f,f), fields)) 192 db_cnx = env.get_db_cnx() 193 db_conn_str = env.config.get('trac', 'database') 194 conn_regex = re.compile('^postgres://([^:]+):') 195 db_user = conn_regex.match(db_conn_str).group(1) 196 workspace_prefix = self._canonize_schema_name(name) 197 project = Project.objects.filter(id=proj_id) 198 wh_db_cnx = self.warehouse_db_cnx() 199 try: 200 wh_cursor = wh_db_cnx.cursor() 201 cursor = db_cnx.cursor() 202 schema = env.config.get('oforge', 'postgres_schema') 203 wh_schema = self.config.get('oforge', 'master_warehouse.schema', 'public') 204 wh_cursor.execute("""GRANT USAGE ON 205 schema %s TO %s"""%(wh_schema, db_user)) 206 wh_cursor.execute("""GRANT INSERT,DELETE,UPDATE ON 207 projects_ticket TO %s"""%(db_user)) 208 wh_cursor.execute("""GRANT UPDATE,SELECT ON 209 projects_ticket_id_seq TO %s"""%(db_user)) 210 if not re.match('(.*, ?)?%s($|,)'%(wh_schema), schema): 211 # Add warehouse schema to the path if it's not added already 212 wh_cursor.execute("""ALTER USER %s SET search_path TO %s, %s 213 """%(db_user, schema, wh_schema)) 214 cursor.execute("SET search_path TO %s, %s"%(schema, wh_schema)) 215 wh_db_cnx.commit() 216 cursor.execute(""" 217 CREATE OR REPLACE RULE %s_update_ticket 218 AS ON UPDATE TO ticket 219 DO ALSO UPDATE projects_ticket 220 SET %s 221 WHERE ticket_id = old.id AND 222 project_id = %s"""%(workspace_prefix, setters, 223 proj_id)) 224 cursor.execute(""" 225 CREATE OR REPLACE RULE %s_insert_ticket 226 AS ON INSERT TO ticket 227 DO ALSO 228 INSERT INTO projects_ticket (project_id, ticket_id, %s) 229 VALUES(%s, currval('ticket_id_seq'::text), %s) 230 """%(workspace_prefix, names, proj_id, values)) 231 cursor.execute(""" 232 CREATE OR REPLACE RULE %s_delete_ticket 233 AS ON DELETE TO ticket 234 DO ALSO DELETE FROM projects_ticket 235 WHERE ticket_id = old.id AND 236 project_id = %s"""%(workspace_prefix, proj_id)) 237 cursor.execute("SELECT * FROM ticket") 238 db_cnx.commit() 239 except Exception, e: 240 db_cnx.rollback() 241 wh_db_cnx.rollback() 242 raise 243 self.reload_warehouse_tickets(name) 244 151 245 def converttopostgres(self, name): 152 246 """ … … 167 261 config.set('trac', 'database', 168 262 self._get_postgres_url(new_user_schema_name, new_password)) 263 config.set('oforge', 'postgres_schema', new_user_schema_name) 169 264 config.save() 170 265 new_env = self.getenv(name) -
trunk/plugins/oforgeplugin/oforge/console.py
r525 r638 205 205 oforge.converttopostgres(proj) 206 206 207 def warehouse_project(): 208 _init_oforge_logger() 209 210 usage = "%prog [options] workspace-shortname \n - Adds project to data warehouse." 211 parser = OptionParser(usage) 212 213 parser.set_defaults(master_trac_ini=_get_master_trac_ini()) 214 215 parser.add_option("--master-trac-ini", dest="master_trac_ini", 216 help="Master trac ini that describes project locations.") 217 (opts, args) = parser.parse_args() 218 proj = args[0] 219 if proj: 220 oforge = OForge(opts.master_trac_ini) 221 oforge.warehouse_project(proj) 222 207 223 def add_to_dashboard(): 208 224 _init_oforge_logger() -
trunk/plugins/oforgeplugin/setup.py
r508 r638 40 40 'oforge-convert-to-postgres = oforge.console:convert_to_postgres', 41 41 'oforge-add-to-dashboard = oforge.console:add_to_dashboard', 42 'oforge-remove-from-dashboard = oforge.console:remove_from_dashboard' 42 'oforge-remove-from-dashboard = oforge.console:remove_from_dashboard', 43 'oforge-warehouse-project = oforge.console:warehouse_project' 43 44 ]}, 44 45 zip_safe=True,
Note: See TracChangeset
for help on using the changeset viewer.
