def _get_locals(): if len(sys.argv) > 1: dbuser = sys.argv[1] else: dbuser = None dbconfig.override(dbuser=dbuser) execute_zcml_for_scripts() readline.parse_and_bind('tab: complete') # Mimic the real interactive interpreter's loading of any # $PYTHONSTARTUP file. startup = os.environ.get('PYTHONSTARTUP') if startup: execfile(startup) store = IMasterStore(Person) if dbuser == 'launchpad': # Create a few variables "in case they come in handy." # Do we really use these? Are they worth carrying around? d = Distribution.get(1) p = Person.get(1) ds = DistroSeries.get(1) prod = Product.get(1) proj = ProjectGroup.get(1) b2 = Bug.get(2) b1 = Bug.get(1) s = Specification.get(1) q = Question.get(1) # Silence unused name warnings d, p, ds, prod, proj, b2, b1, s, q # Having a factory instance is handy. factory = LaunchpadObjectFactory() def browser_open(obj, *args, **kwargs): """Open a (possibly newly-created) object's view in a web browser. Accepts the same parameters as canonical_url. Performs a commit before invoking the browser, so "browser_open(factory.makeFoo())" works. """ transaction.commit() webbrowser.open(canonical_url(obj, *args, **kwargs)) # Silence unused name warnings factory, store res = {} res.update(locals()) res.update(globals()) del res['_get_locals'] return res
def _updateMaloneStatistics(self, ztm): self.update('bug_count', Bug.select().count()) ztm.commit() self.update('bugtask_count', BugTask.select().count()) ztm.commit() self.update( 'products_using_malone', Product.selectBy(official_malone=True).count()) ztm.commit() cur = cursor() cur.execute( "SELECT COUNT(DISTINCT product) + COUNT(DISTINCT distribution) " "FROM BugTask") self.update("projects_with_bugs", cur.fetchone()[0] or 0) ztm.commit() cur = cursor() cur.execute( "SELECT COUNT(*) FROM (SELECT COUNT(distinct product) + " " COUNT(distinct distribution) " " AS places " " FROM BugTask GROUP BY bug) " " AS temp WHERE places > 1") self.update("shared_bug_count", cur.fetchone()[0] or 0) ztm.commit()