def issues(): """ Returns all issues from all current source for keyword """ results = [] try: sync_id = request.args.get('sync_id') term = request.args.get('term') if not term: return jsonify({'results': []}) s = Synchronization.query.get(sync_id) target_connector = ConnectorManager.create_connector( s.target.connector_type.name, server=s.target.server, api_token=s.target.api_token, login=s.target.login, password=s.target.password) raw_results = target_connector.search_issues(term) results = [{ 'id': r['id'], 'text': '[{}] {}'.format(r['id'], r['name']) } for r in raw_results] except: pass if not results: results = [{'id': term, 'text': 'Use "{}" as issue ID'.format(term)}] return jsonify({'results': results})
def add_connector(): """ Adds a new connector """ form = ConnectorForm() if form.validate_on_submit(): connector_type = ConnectorType.query.get( form.connector_type.raw_data[0]) connector = ConnectorManager.get_connector(connector_type.name) if not connector.validate( server=form.server.data, login=form.login.data, api_token=form.api_token.data, ): flash( "Connector is not valid. Check spelling or correctness of fields and try again", "error") return redirect(url_for("app_routes.add_connector")) Connector.create(name=form.name.data, server=form.server.data, login=form.login.data, password=form.password.data, api_token=form.api_token.data, connector_type_id=form.connector_type.raw_data[0], user_id=current_user.get_id()) return redirect(url_for("app_routes.get_connectors")) return render_template("forms/connector.html", headline='Add a new connector', action="/connector/add", form=form)
def export_worklogs(self): """ Exports worklogs to target resource """ target_name = self.target.connector_type.name target_connector = ConnectorManager.create_connector( target_name, server=self.target.server, api_token=self.target.api_token, login=self.target.login, password=self.target.password) # Get all valid worklogs from this synchronization worklogs_to_upload = Worklog.query \ .filter( Worklog.synchronization_id == self.get_id(), Worklog.is_valid, Worklog.parent_id == None # NOQA ) try: target_connector.export_worklogs(worklogs_to_upload) except ExportException as err: # just delete worklogs # TODO: implement better solution worklogs_to_delete = worklogs_to_upload[err.index:] for w in worklogs_to_delete: Worklog.delete(w.get_id()) db.session.commit() raise err current_user.update(date_last_sync=datetime.utcnow()) self.complete()
def is_valid(self): connector = ConnectorManager.get_connector(self.connector_type.name) return connector.validate( server=self.server, login=self.login, api_token=self.api_token, )
def get_connector_type_fields(connector_type_id): connector_type = ConnectorType.query.get(connector_type_id) if connector_type: connector = ConnectorManager.get_connector(connector_type.name) return jsonify({'fields': connector.FORM_FIELDS}) raise Exception( 'Connector type with id {} does not exist.'.format(connector_type_id))
def validate_worklogs(self): worklogs = self.worklogs target_name = self.target.connector_type.name target_connector = ConnectorManager.create_connector( target_name, server=self.target.server, api_token=self.target.api_token, login=self.target.login, password=self.target.password) for w in worklogs: if w.is_valid: if not target_connector.validate_issue(w.issue_id): w.is_valid = False current_app.logger.warning( f'Wrong issue id {w.issue_id} in {target_name}.') db.session.commit()
def import_worklogs(self): """ Imports worklogs from source """ source_name = self.source.connector_type.name target_name = self.target.connector_type.name source_connector = ConnectorManager.create_connector( source_name, server=self.source.server, api_token=self.source.api_token, login=self.source.login, password=self.source.password) imported_worklogs = source_connector.import_worklogs( DateAndTime(current_user.timezone.name).localize( self.date_started_from).isoformat('T'), DateAndTime(current_user.timezone.name).now().isoformat('T')) Worklog.create_all( self.get_id(), imported_worklogs, target_name # type of connector to parse task/issue ID )