Example #1
0
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})
Example #2
0
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)
Example #3
0
    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()
Example #4
0
 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,
     )
Example #5
0
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))
Example #6
0
    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()
Example #7
0
    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
        )