Пример #1
0
def article_editor(req):
    namespace = req.matchdict.get('namespace')
    slug = req.matchdict.get('slug')

    code = req.params.get('code', None)  # update

    project = get_project(namespace, user=req.user)
    site = get_site(slug, project=project)

    if site.type != 'publication':
        raise HTTPNotFound

    publication = site.instance
    if code:
        article = publication.articles.where(Article.code == code).get()
    else:
        code = Article.grab_unique_code()  # as path
        article = Article(path=code, code=code)

    editor_form = build_article_editor_form(req, article)
    settings_form = build_article_settings_form(req, article)

    return dict(
        editor_form=editor_form,
        settings_form=settings_form,
        project=project,
        site=site,
        publication=publication,
        article=article,
    )
Пример #2
0
def article_list(req):
    namespace = req.matchdict.get('namespace')
    slug = req.matchdict.get('slug')

    project = get_project(namespace, user=req.user)
    site = get_site(slug, project=project)

    if site.type != 'publication':
        raise HTTPNotFound

    publication = site.instance
    articles = Article.select(
        Article, Chapter.name, Chapter.slug,
    ).join(Chapter).join(Publication, on=(
        Article.publication_id == publication.id
    )).order_by(
        Article.updated_at.desc(),
        Article.progress_state.desc(),
        Article.title,
    )

    return dict(
        project=project,
        site=site,
        publication=publication,
        articles=articles)
Пример #3
0
def handle_post(req):
    namespace = req.matchdict.get('namespace')
    slug = req.matchdict.get('slug')

    code = req.params.get('code')  # update

    project = get_project(namespace, user=req.user)
    site = get_site(slug, project=project)

    if site.type != 'publication':
        raise HTTPNotFound

    publication = site.instance
    if code:
        try:
            article = publication.articles.where(
                Article.code == code).get()
        except Article.DoesNotExist:
            article = None

    if not article:
        code = Article.grab_unique_code()
        article = Article(
            code=code,
            path=code,
            title='Untitled',
            copyright='',
            publication=publication)

    context = req.params.get('context', None)
    _ = req.translate
    if context == 'editor':
        (article, errors) = save_content(req, article)
    elif context == 'settings':
        (article, errors) = save_meta(req, article)
    else:
        raise HTTPNotFound

    message = _('article.save.failure')
    if not errors:
        message = _('article.save.success')

    return dict(
        status='ok',
        code=article.code,
        errors=errors,
        message=message)
Пример #4
0
def test_path_availability_check(mocker, dummy_request):
    article = Article(path='scrolliris')

    dummy_request.params = dummy_request.POST = MultiDict()
    form = build_article_settings_form(dummy_request, article)

    with pytest.raises(ValidationError):
        field = mocker.Mock('field', data=article.path)
        path_availability_check(form, field)
Пример #5
0
def test_path_duplication_check(mocker, users, dummy_request):
    user = users['oswald']
    article = Article()

    dummy_request.params = dummy_request.POST = MultiDict()
    form = build_article_settings_form(dummy_request, article)

    with pytest.raises(ValidationError):
        user = users['oswald']
        existing_article = user.articles[0]
        field = mocker.Mock('field', data=existing_article.path)
        path_duplication_check(form, field)
Пример #6
0
def test_path_validations_with_invalid_path_inputs(path, scope, progress_state,
                                                   dummy_request):
    article = Article(path=path)

    dummy_request.params = dummy_request.POST = MultiDict({
        'csrf_token':
        dummy_request.session.get_csrf_token(),
        'title':
        'Title',
        'path':
        path,
        'scope':
        scope,
        'progress_state':
        progress_state['value'],
    })
    form = build_article_settings_form(dummy_request, article)
    assert not form.validate()
    assert form.path.errors
Пример #7
0
def api_article_progress_states(req):
    try:
        namespace = req.matchdict.get('namespace')
        slug = req.matchdict.get('slug')
        code = req.matchdict.get('code')

        project = get_project(namespace, user=req.user)
        site = get_site(slug, project=project)

        if site.type != 'publication':
            raise HTTPNotFound

        publication = site.instance

        article = publication.articles.where(
            Article.code == code).get()
    except (HTTPNotFound, Article.DoesNotExist):
        article = Article(progress_state='draft')

    states = article.available_progress_states_as_choices
    current_state = article.progress_state

    data = {}
    for (i, v) in enumerate(Article.progress_states):
        n = str(i)
        data[v] = {'value': n, 'label': v}
        if (n, v) not in states:
            data[v]['disabled'] = True
        elif v == current_state:
            data[v]['selected'] = True

    return dict(
        status='ok',
        data=data,
        errors=[],
        message='')
Пример #8
0
def articles():
    from aarau.models.article import Article

    return {a.path: a for a in Article.select()}
Пример #9
0
def test_build_article_editor_form(dummy_request):
    dummy_request.params = dummy_request.POST = MultiDict()
    article = Article()
    form = build_article_editor_form(dummy_request, article)
    assert isinstance(form, ArticleEditorForm)
Пример #10
0
def test_build_article_settings_form(dummy_request):
    dummy_request.params = dummy_request.POST = MultiDict()
    article = Article()
    form = build_article_settings_form(dummy_request, article)
    assert isinstance(form, ArticleSettingsForm)