def dispatch(self): client_id = self.request.GET.get('client_id') client = Client.query.get(client_id) form = ProjectForm(self.request.POST) if self.request.method == 'POST' and form.validate(): tracker_id = form.tracker_id.data coordinator_id = int(form.coordinator_id.data) if form.coordinator_id.data.isdigit() else None project = Project( client=client, name=form.name.data, coordinator_id=coordinator_id, tracker_id=tracker_id, turn_off_selectors=form.turn_off_selectors.data, project_selector=form.project_selector.data, component_selector=form.component_selector.data, version_selector=form.version_selector.data, ticket_id_selector=form.ticket_id_selector.data, active=form.active.data, google_card=form.google_card.data, google_wiki=form.google_wiki.data, mailing_url=form.mailing_url.data, working_agreement=form.working_agreement.data, definition_of_done=form.definition_of_done.data, definition_of_ready=form.definition_of_ready.data, continuous_integration_url=form.continuous_integration_url.data, backlog_url=form.backlog_url.data, status = form.status.data, ) self.session.add(project) self.session.flush() self.flash(self._(u"Project added")) LOG(u"Project added") SelectorMapping.invalidate_for(tracker_id) return HTTPFound(location=self.request.url_for('/client/view', client_id=project.client_id)) return dict(client=client, form=form)
def dispatch(self): project_id = self.request.GET.get('project_id') project = self.session.query(Project).filter(Project.id==project_id).one() form = ProjectForm(self.request.POST, obj=project) # hack, when user has no permision coordinator (that means that he has only scrum perms) # we do not validate the form if self.request.method == 'POST' and (not self.request.has_perm('coordinator') or form.validate()): project.working_agreement = form.working_agreement.data project.definition_of_done = form.definition_of_done.data project.definition_of_ready = form.definition_of_ready.data project.continuous_integration_url = form.continuous_integration_url.data project.backlog_url = form.backlog_url.data if self.request.has_perm('coordinator'): project.name = form.name.data coordinator_id = int(form.coordinator_id.data) if form.coordinator_id.data.isdigit() else None project.coordinator_id = coordinator_id project.tracker_id = form.tracker_id.data project.turn_off_selectors = form.turn_off_selectors.data project.project_selector = form.project_selector.data project.component_selector = form.component_selector.data project.version_selector = form.version_selector.data project.ticket_id_selector = form.ticket_id_selector.data project.active = form.active.data project.google_card = form.google_card.data project.google_wiki = form.google_wiki.data project.mailing_url = form.mailing_url.data project.status = form.status.data self.flash(self._(u"Project saved")) LOG(u"Project saved") SelectorMapping.invalidate_for(project.tracker_id) return HTTPFound(location=self.request.url_for('/project/edit', project_id=project.id)) return dict(project_id=project.id, form=form)
def dispatch(self): project_id = self.request.GET.get('project_id') project = Project.query.get(project_id) form = ProjectForm(self.request.POST, obj=project) if self.request.method == 'POST' and form.validate(): SelectorMapping.invalidate_for(project.tracker_id) project.name = form.name.data coordinator_id = int(form.coordinator_id.data) if form.coordinator_id.data.isdigit() else None project.coordinator_id = coordinator_id project.tracker_id = form.tracker_id.data project.turn_off_selectors = form.turn_off_selectors.data project.project_selector = form.project_selector.data project.component_selector = form.component_selector.data project.version_selector = form.version_selector.data project.ticket_id_selector = form.ticket_id_selector.data project.active = form.active.data project.google_card = form.google_card.data project.google_wiki = form.google_wiki.data project.mailing_url = form.mailing_url.data project.working_agreement = form.working_agreement.data project.definition_of_done = form.definition_of_done.data project.definition_of_ready = form.definition_of_ready.data project.continuous_integration_url = form.continuous_integration_url.data project.backlog_url = form.backlog_url.data project.status = form.status.data self.flash(self._(u"Project saved")) LOG(u"Project saved") SelectorMapping.invalidate_for(project.tracker_id) return HTTPFound(location=self.request.url_for('/client/view', client_id=project.client_id)) return dict(project_id=project.id, form=form)
def dispatch(self): project_id = self.request.GET.get('project_id') project = Project.query.get(project_id) form = DeleteForm(self.request.POST) back_url = self.request.url_for('/client/view', client_id=project.client_id) if self.request.method == 'POST' and form.validate(): self.session.delete(project) SelectorMapping.invalidate_for(project.tracker_id) return HTTPFound(location=back_url) return dict( type_name=u'project', title=project.name, url=self.request.url_for('/project/delete', project_id=project.id), back_url=back_url, form=form )
def dispatch(self): project_id = self.request.GET.get('project_id') project = Project.query.get(project_id) form = DeleteForm(self.request.POST) back_url = self.request.url_for('/client/view', client_id=project.client_id) if self.request.method == 'POST' and form.validate(): DBSession.delete(project) SelectorMapping.invalidate_for(project.tracker_id) return HTTPFound(location=back_url) return dict(type_name=u'project', title=project.name, url=self.request.url_for('/project/delete', project_id=project.id), back_url=back_url, form=form)
def get_project_id_(self, tracker, bug): return SelectorMapping(tracker).match( bug.id, bug.project_name, bug.component_name, bug.version, )
def dispatch(self): project_id = self.request.GET.get('project_id') project = DBSession.query(Project).filter( Project.id == project_id).one() form = ProjectForm(self.request.POST, obj=project) # hack, when user has no permision can_edit_projects (that means that he has only scrum perms) # we do not validate the form if self.request.method == 'POST' and ( not self.request.has_perm('can_edit_projects') or form.validate()): project.working_agreement = form.working_agreement.data project.definition_of_done = form.definition_of_done.data project.definition_of_ready = form.definition_of_ready.data project.continuous_integration_url = form.continuous_integration_url.data project.backlog_url = form.backlog_url.data project.status = form.status.data project.sprint_tabs = form.sprint_tabs.data if self.request.has_perm('can_edit_projects'): project.name = form.name.data coordinator_id = int( form.coordinator_id.data ) if form.coordinator_id.data.isdigit() else None project.coordinator_id = coordinator_id project.tracker_id = form.tracker_id.data project.turn_off_selectors = form.turn_off_selectors.data project.project_selector = form.project_selector.data project.component_selector = form.component_selector.data project.version_selector = form.version_selector.data project.ticket_id_selector = form.ticket_id_selector.data project.active = form.active.data project.google_card = form.google_card.data project.google_wiki = form.google_wiki.data project.mailing_url = form.mailing_url.data project.status = form.status.data self.flash(self._(u"Project saved")) LOG(u"Project saved") SelectorMapping.invalidate_for(project.tracker_id) return HTTPFound(location=self.request.url_for( '/project/edit', project_id=project.id)) return dict(project_id=project.id, form=form)
def __call__(self, *args, **kwargs): config = ApplicationConfig.get_current_config(allow_empty=True) if config is None: WARN(u'Application config not found, emails cannot be checked') return trackers = dict( (tracker.mailer, tracker) for tracker in Tracker.query.filter( Tracker.mailer != None).filter(Tracker.mailer != '')) if not len(trackers): WARN( u'No trackers have mailers configured, email will not be checked' ) return username = config.google_user_email.encode('utf-8') password = config.google_user_password.encode('utf-8') # TODO logins_mappings = dict( (tracker.id, TrackerCredentials.get_logins_mapping(tracker)) for tracker in trackers.itervalues()) selector_mappings = dict((tracker.id, SelectorMapping(tracker)) for tracker in trackers.itervalues()) # find all projects connected to the tracker projects = dict( (project.id, project) for project in Project.query.all()) # all pre-conditions should be checked by now # start fetching fetcher = MailFetcher( username, password, ) # ok, we have all mails, lets create timeentries from them extractor = TimeEntryMailExtractor( trackers, logins_mappings, projects, selector_mappings, ) for msg in fetcher: timeentry = extractor.get(msg) if timeentry: DBSession.add(timeentry) transaction.commit()
def _run(self): config = ApplicationConfig.get_current_config(allow_empty=True) if config is None: WARN(u'Application config not found, emails cannot be checked') return self.mark_not_busy() trackers = dict( (tracker.mailer, tracker) for tracker in Tracker.query.filter(Tracker.mailer != None).filter(Tracker.mailer != '') ) if not len(trackers): WARN(u'No trackers have mailers configured, email will not be checked') return self.mark_not_busy() username = config.google_user_email.encode('utf-8') password = config.google_user_password.encode('utf-8') # TODO logins_mappings = dict( (tracker.id, TrackerCredentials.get_logins_mapping(tracker)) for tracker in trackers.itervalues() ) selector_mappings = dict( (tracker.id, SelectorMapping(tracker)) for tracker in trackers.itervalues() ) # find all projects connected to the tracker projects = dict( (project.id, project) for project in Project.query.all() ) # all pre-conditions should be checked by now # start fetching f = CustomClientFactory(username, password, self.mark_not_busy, trackers, logins_mappings, projects, selector_mappings) f.protocol = MailerPOP3Client reactor.connectSSL(self.POP3_SERVER, self.POP3_PORT, f, self.context_factory)
def resolve(self, bug): bug.owner = self.resolve_user(bug.owner) bug.reporter = self.resolve_user(bug.reporter) bug.project_id = SelectorMapping(self.tracker).match( bug.id, bug.project_name, bug.component_name, bug.version, )