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 _updateQuestionStatistics(self, ztm): self.update('question_count', Question.select().count()) ztm.commit() self.update( 'answered_question_count', Question.select( 'status = %s' % sqlvalues(QuestionStatus.ANSWERED)).count()) ztm.commit() self.update( 'solved_question_count', Question.select( 'status = %s' % sqlvalues(QuestionStatus.SOLVED)).count()) ztm.commit() cur = cursor() cur.execute( "SELECT COUNT(DISTINCT product) + COUNT(DISTINCT distribution) " "FROM Question") self.update("projects_with_questions_count", cur.fetchone()[0] or 0) ztm.commit()