コード例 #1
0
ファイル: analysis.py プロジェクト: LibCrowds/pybossa-lc
def analyse():
    """Trigger analysis for a result or set of results."""
    if request.method == 'GET':
        return respond('The analysis endpoint is listening...')

    payload = request.json or {}
    short_name = payload.get('project_short_name')
    project = project_repo.get_by_shortname(short_name)
    if not project:  # pragma: no cover
        abort(404)

    category = project_repo.get_category(project.category_id)
    presenter = category.info.get('presenter')
    valid_presenters = ['z3950', 'iiif-annotation']
    if not presenter or presenter not in valid_presenters:
        abort(400, 'Invalid task presenter')

    # Analyse all or empty
    if payload.get('all') or payload.get('empty'):
        ensure_authorized_to('update', project)

        if payload.get('all'):
            analyse_all(project.id, presenter)
        elif payload.get('empty'):
            analyse_empty(project.id, presenter)

        return respond('OK')

    # Analyse single
    if payload.get('event') != 'task_completed':
        abort(400)

    result_id = payload['result_id']
    analyse_single(result_id, presenter)
    return respond('OK')
コード例 #2
0
ファイル: admin.py プロジェクト: BNELab/comunidadbne
def del_category(id):
    """Delete a category."""
    try:
        category = project_repo.get_category(id)
        if category:
            if len(cached_cat.get_all()) > 1:
                ensure_authorized_to('delete', category)
                if request.method == 'GET':
                    response = dict(template='admin/del_category.html',
                                    title=gettext('Delete Category'),
                                    category=category,
                                    form=dict(csrf=generate_csrf()))
                    return handle_content_type(response)
                if request.method == 'POST':
                    project_repo.delete_category(category)
                    msg = gettext("Category deleted")
                    flash(msg, 'success')
                    cached_cat.reset()
                    return redirect_content_type(url_for(".categories"))
            else:
                msg = gettext('Sorry, it is not possible to delete the only'
                              ' available category. You can modify it, '
                              ' click the edit button')
                flash(msg, 'warning')
                return redirect_content_type(url_for('.categories'))
        else:
            abort(404)
    except HTTPException:
        raise
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)
コード例 #3
0
ファイル: admin.py プロジェクト: idahoan/pybossa
def del_category(id):
    """Deletes a category"""
    try:
        category = project_repo.get_category(id)
        if category:
            if len(cached_cat.get_all()) > 1:
                require.category.delete(category)
                if request.method == 'GET':
                    return render_template('admin/del_category.html',
                                           title=gettext('Delete Category'),
                                           category=category)
                if request.method == 'POST':
                    project_repo.delete_category(category)
                    msg = gettext("Category deleted")
                    flash(msg, 'success')
                    cached_cat.reset()
                    return redirect(url_for(".categories"))
            else:
                msg = gettext('Sorry, it is not possible to delete the only \
                                   available category. You can modify it, click the \
                                   edit button')
                flash(msg, 'warning')
                return redirect(url_for('.categories'))
        else:
            abort(404)
    except HTTPException:
        raise
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)
コード例 #4
0
ファイル: admin.py プロジェクト: TMoneyZ/pybossa
def del_category(id):
    """Delete a category."""
    try:
        category = project_repo.get_category(id)
        if category:
            if len(cached_cat.get_all()) > 1:
                ensure_authorized_to('delete', category)
                if request.method == 'GET':
                    return render_template('admin/del_category.html',
                                           title=gettext('Delete Category'),
                                           category=category)
                if request.method == 'POST':
                    project_repo.delete_category(category)
                    msg = gettext("Category deleted")
                    flash(msg, 'success')
                    cached_cat.reset()
                    return redirect(url_for(".categories"))
            else:
                msg = gettext('Sorry, it is not possible to delete the only'
                              ' available category. You can modify it, '
                              ' click the edit button')
                flash(msg, 'warning')
                return redirect(url_for('.categories'))
        else:
            abort(404)
    except HTTPException:
        raise
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)
コード例 #5
0
 def category_comments(self, category_id):
     """Embed Discourse comments for a particular category."""
     category = project_repo.get_category(category_id)
     if not category:
         abort(404)
     embed_url = url_for('project.project_cat_index',
                         category=category.short_name, _external=True)
     return self._comment_feed_markup(embed_url)
コード例 #6
0
 def _get_result_collection(self, project_id):
     """Return a ResultCollection for the category."""
     from pybossa.core import project_repo
     project = project_repo.get(project_id)
     category = project_repo.get_category(project.category_id)
     try:
         iri = category.info.get('annotations', {})['results']
     except (TypeError, KeyError):
         err_msg = 'AnnotationCollection not setup for the category'
         raise BulkImportException(err_msg)
     return ResultCollection(iri)
コード例 #7
0
    def __call__(self, form, form_field):
        category_id = int(form.category_id.data)
        vol_id = form.id.data
        category = project_repo.get_category(category_id)
        volumes = category.info.get('volumes', [])
        exists = [
            vol for vol in volumes
            if vol.get(self.field_name) and vol[self.field_name] ==
            form_field.data and (not vol_id or vol_id != vol['id'])
        ]

        if exists:
            raise ValidationError(self.message)
コード例 #8
0
    def _sync_category(self, category_id, payload):
        category_syncer = CategorySyncer(self.target_url, self.target_key)
        category = project_repo.get_category(category_id)
        target_category = category_syncer.get_target(name=category.name)

        if target_category:
            payload['category_id'] = target_category['id']
        else:
            res = category_syncer.sync(category)
            if res.ok:
                data = json.loads(res.content)
                payload['category_id'] = data['id']

        return payload
コード例 #9
0
ファイル: helper.py プロジェクト: geotagx/geotagx-plugin
def get_project_category(category_id):
    """Returns the project category instance with the specified identifier.

    Args:
        category_id (int): A project category's unique identifier.

    Raises:
        TypeError: If the 'category_id' argument is not an integer.

    Returns:
        pybossa.model.category.Category: A project category object with the specified identifier.
    """
    if not isinstance(category_id, int):
        raise TypeError("get_project_category expects 'int' but got '{}'.".format(type(category_id).__name__))

    from pybossa.core import project_repo
    return project_repo.get_category(category_id)
コード例 #10
0
ファイル: admin.py プロジェクト: LibCrowds/pybossa-lc
def analyse_empty_results(category_id):
    """Analyse empty results for a category."""
    category = project_repo.get_category(category_id)
    if not category:
        abort(404)

    if request.method == 'POST':
        presenter = category.info.get('presenter')
        projects = project_repo.filter_by(category_id=category.id)
        for project in projects:
            analyse_empty(project.id, presenter)
        flash('Analysis of empty results queued', 'success')
        csrf = None
    else:
        csrf = generate_csrf()

    response = dict(csrf=csrf)
    return handle_content_type(response)
コード例 #11
0
ファイル: admin.py プロジェクト: BNELab/comunidadbne
def update_category(id):
    """Update a category."""
    try:
        category = project_repo.get_category(id)
        if category:
            ensure_authorized_to('update', category)
            form = CategoryForm(obj=category)
            form.populate_obj(category)
            if request.method == 'GET':
                response = dict(template='admin/update_category.html',
                                title=gettext('Update Category'),
                                category=category,
                                form=form)
                return handle_content_type(response)
            if request.method == 'POST':
                form = CategoryForm(request.body)
                if form.validate():
                    slug = form.name.data.lower().replace(" ", "")
                    new_category = Category(id=form.id.data,
                                            name=form.name.data,
                                            short_name=slug)
                    project_repo.update_category(new_category)
                    cached_cat.reset()
                    msg = gettext("Category updated")
                    flash(msg, 'success')
                    return redirect_content_type(url_for(".categories"))
                else:
                    msg = gettext("Please correct the errors")
                    flash(msg, 'success')
                    response = dict(template='admin/update_category.html',
                                    title=gettext('Update Category'),
                                    category=category,
                                    form=form)
                    return handle_content_type(response)
        else:
            abort(404)
    except HTTPException:
        raise
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)
コード例 #12
0
ファイル: admin.py プロジェクト: fiorda/pybossa
def update_category(id):
    """Update a category."""
    try:
        category = project_repo.get_category(id)
        if category:
            ensure_authorized_to('update', category)
            form = CategoryForm(obj=category)
            form.populate_obj(category)
            if request.method == 'GET':
                response = dict(template='admin/update_category.html',
                                title=gettext('Update Category'),
                                category=category,
                                form=form)
                return handle_content_type(response)
            if request.method == 'POST':
                form = CategoryForm(request.body)
                if form.validate():
                    slug = form.name.data.lower().replace(" ", "")
                    new_category = Category(id=form.id.data,
                                            name=form.name.data,
                                            short_name=slug)
                    project_repo.update_category(new_category)
                    cached_cat.reset()
                    msg = gettext("Category updated")
                    flash(msg, 'success')
                    return redirect_content_type(url_for(".categories"))
                else:
                    msg = gettext("Please correct the errors")
                    flash(msg, 'success')
                    response = dict(template='admin/update_category.html',
                                    title=gettext('Update Category'),
                                    category=category,
                                    form=form)
                    return handle_content_type(response)
        else:
            abort(404)
    except HTTPException:
        raise
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)