Exemplo n.º 1
0
def test_move_term(app, db, taxonomy_tree):
    taxonomy = current_flask_taxonomies.get_taxonomy("test_taxonomy")
    terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    print(terms)
    ti = TermIdentification(term=terms[2])
    current_flask_taxonomies.move_term(ti,
                                       new_parent=terms[0],
                                       remove_after_delete=False)
    db.session.commit()
    terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    print(terms)
Exemplo n.º 2
0
def test_taxonomy_term_delete_2(app, db, taxonomy_tree, test_record):
    taxonomy = current_flask_taxonomies.get_taxonomy("test_taxonomy")
    terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    term = terms[1]
    ti = TermIdentification(term=term)
    with pytest.raises(DeleteAbortedError):
        current_flask_taxonomies.delete_term(ti)
Exemplo n.º 3
0
def run():
    for res in tqdm(
            current_flask_taxonomies.list_taxonomy(
                'institutions', return_descendants_count=True)):
        tax = res.TaxonomyTerm
        if tax.level > 0:
            continue
        with db.session.begin_nested():
            primary_community = tax.slug.strip('/').rsplit('/', maxsplit=1)[-1]
            title = tax.extra_data.get('title', {}).get('cs')
            provider_type = tax.extra_data.get('type', ['neznámý'])[0]
            # TODO: fix this
            if len(primary_community) > 60 or not title:
                continue
            comm_data = {
                # "curation_policy": policy,
                "id": primary_community,
                "description": f'{provider_type} - {title}',
                # TODO: "logo": "data/community-logos/ecfunded.jpg"
            }
            try:
                comm = OARepoCommunity.create(comm_data,
                                              id_=primary_community,
                                              title=title,
                                              ctype='other')
            except IntegrityError:
                traceback.print_exc()
            except OARepoCommunityCreateError as e:
                traceback.print_exc()

    db.session.commit()
Exemplo n.º 4
0
def find_in_title(field: str, taxonomy_code: str, first_lang: str = "cs", second_lang: str = "en"):
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy(taxonomy_code)
    sqlalchemy_query = current_flask_taxonomies.apply_term_query(sqlalchemy_query,
                                                                 f'title.{first_lang}:"{field}" OR '
                                                                 f'title.{second_lang}:"{field}"',
                                                                 taxonomy_code)
    return sqlalchemy_query
Exemplo n.º 5
0
def test_import_taxonomy(app, db):
    file_path = pathlib.Path(__file__).parent.absolute()
    data_path = file_path / "data" / "licenses_v2.xlsx"
    import_taxonomy(str(data_path))
    taxonomy = current_flask_taxonomies.list_taxonomies(session=None).all()[0]
    taxonomy_list = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    assert len(taxonomy_list) > 0
    assert isinstance(taxonomy_list[1], TaxonomyTerm)
Exemplo n.º 6
0
def test_query(app, db):
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy('countries')
    sqlalchemy_query = current_flask_taxonomies.apply_term_query(
        sqlalchemy_query, 'title.cs:"Angola" OR '
        'title.en:"Anglola"', "countries")
    print("\n\nQUERY:", sqlalchemy_query, "\n\n")
    term = sqlalchemy_query.one_or_none()
    assert isinstance(term, TaxonomyTerm)
    assert term.slug == 'ao'
Exemplo n.º 7
0
def test_taxonomy_term_moved(app, db, taxonomy_tree, test_record):
    taxonomy = current_flask_taxonomies.get_taxonomy("test_taxonomy")
    terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    old_record = Record.get_record(id_=test_record.id)
    old_taxonomy = old_record["taxonomy"]
    assert old_taxonomy == [{
        'is_ancestor': True,
        'level': 1,
        'links': {
            'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a'
        },
        'test': 'extra_data'
    },
        {
            'is_ancestor': True,
            'level': 2,
            'links': {
                'parent':
                    'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a',
                'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b'
            },
            'test': 'extra_data'
        },
        {
            'is_ancestor': False,
            'level': 3,
            'links': {
                'parent':
                    'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b',
                'self':
                    'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b/c'
            },
            'test': 'extra_data'
        }]
    ti = TermIdentification(term=terms[2])
    current_flask_taxonomies.move_term(ti, new_parent=terms[0], remove_after_delete=False)
    db.session.commit()
    new_record = Record.get_record(id_=test_record.id)
    new_taxonomy = new_record["taxonomy"]
    new_terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    assert new_terms[-1].parent_id == 1
Exemplo n.º 8
0
def test_create_update_terms(app, db, taxonomy_data):
    taxonomy = current_flask_taxonomies.create_taxonomy(
        "licenses", extra_data={"title": {
            "cs": "Licence",
            "en": "Licenses"
        }})
    create_update_terms(taxonomy, taxonomy_data)  # creating
    create_update_terms(taxonomy, taxonomy_data)  # updating
    res = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    assert res[0].slug == "cc"
    assert res[0].level == 0
    assert res[1].slug == "cc/1-0"
    assert res[1].level == 1
Exemplo n.º 9
0
def export_taxonomy(taxonomy_code: str):
    # get cwd path
    cwd = pathlib.Path().absolute()
    path = str(cwd / f"{taxonomy_code}.csv")

    # get taxonomy flatten dicts (header and content)
    taxonomy = current_flask_taxonomies.get_taxonomy(taxonomy_code)
    first_level_list = current_flask_taxonomies.list_taxonomy(taxonomy,
                                                              levels=1).all()
    taxonomy_header_dict = get_taxonomy_header_dict(taxonomy)
    taxonomy_terms_list = get_taxonomy_terms_list(first_level_list)

    csv_path = convert_to_csv(path, taxonomy_terms_list)
    excel_path = convert_csv_to_excel(path, taxonomy_header_dict)
    return csv_path, excel_path
Exemplo n.º 10
0
def test_get_taxonomy_terms_list(app, db):
    file_path = pathlib.Path(__file__).parent.absolute()
    data_path = file_path / "data" / "licenses_v2.xlsx"
    str_path = str(data_path)
    import_taxonomy(str_path)

    taxonomy = current_flask_taxonomies.get_taxonomy("licenses")
    first_level = current_flask_taxonomies.list_taxonomy(taxonomy,
                                                         levels=1).all()
    res = get_taxonomy_terms_list(first_level)
    assert res[0]["level"] == 1
    assert res[1]["level"] == 2
    assert res[2]["level"] == 3
    assert res[3]["level"] == 3
    assert res[8]["level"] == 2
Exemplo n.º 11
0
def test_taxonomy_term_delete(app, db, taxonomy_tree):
    taxonomy = current_flask_taxonomies.get_taxonomy("test_taxonomy")
    terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    term = terms[1]
    ti = TermIdentification(term=term)
    current_flask_taxonomies.delete_term(ti)
Exemplo n.º 12
0
def find_in_json_list(taxonomy_code: str, field: str, value: str):
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy(f'{taxonomy_code}')
    sqlalchemy_query = sqlalchemy_query.filter(
        func.jsonb_extract_path(TaxonomyTerm.extra_data, field).op('?')(
            value))
    return sqlalchemy_query
Exemplo n.º 13
0
def find_in_title_jsonb(value: str, taxonomy_code: str, lang: str = "cs"):
    json_ = '{"title": {"%s": "%s"}}' % (lang, value)
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy(taxonomy_code)
    sqlalchemy_query = sqlalchemy_query.filter(TaxonomyTerm.extra_data.op("@>")(json_))
    return sqlalchemy_query
Exemplo n.º 14
0
def get_query_by_slug(taxonomy_code: str, slug: str):
    slug = f"*.{slug.lower()}"
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy(f'{taxonomy_code}')
    sqlalchemy_query = sqlalchemy_query.filter(
        TaxonomyTerm.slug.op('~')(slug))
    return sqlalchemy_query
Exemplo n.º 15
0
def find_in_json(taxonomy_code: str, field: str, value: str):
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy(taxonomy_code)
    sqlalchemy_query = current_flask_taxonomies.apply_term_query(sqlalchemy_query,
                                                                 f'{field}:{value}', taxonomy_code)
    return sqlalchemy_query
def get_role(role):
    sqlalchemy_query = current_flask_taxonomies.list_taxonomy(
        'contributor-type')
    sqlalchemy_query = current_flask_taxonomies.apply_term_query(
        sqlalchemy_query, f'title.en:"{role}"', "contributor-type")
    return sqlalchemy_query.one_or_none()
Exemplo n.º 17
0
def get_taxonomy(code=None,
                 prefer=None,
                 page=None,
                 size=None,
                 status_code=200,
                 q=None):
    try:
        taxonomies = current_flask_taxonomies.filter_taxonomy(
            code,
            return_descendants_count=INCLUDE_DESCENDANTS_COUNT in prefer,
            return_descendants_busy_count=INCLUDE_STATUS in prefer)
        taxonomy = taxonomies.one()
        taxonomy = enrich_data_with_computed(taxonomy)
    except NoResultFound:
        json_abort(404, {})
        return  # make pycharm happy

    current_flask_taxonomies.permissions.taxonomy_read.enforce(request=request,
                                                               status_code=404)

    prefer = taxonomy.merge_select(prefer)

    try:
        if INCLUDE_SELF in prefer:
            paginator = Paginator(
                prefer, [taxonomy],
                page=0,
                size=0,
                json_converter=lambda data: [x.json(prefer) for x in data],
                envelope_links=lambda prefer, data, original_data:
                original_data[0].links(prefer)
                if original_data else EnvelopeLinks({}, {}),
                single_result=True,
                allow_empty=False)

            if INCLUDE_DESCENDANTS not in prefer:
                return paginator.jsonify(status_code=status_code)
        else:
            paginator = None

        if INCLUDE_DESCENDANTS in prefer:
            if INCLUDE_DELETED in prefer:
                status_cond = sqlalchemy.sql.true()
            else:
                status_cond = TaxonomyTerm.status == TermStatusEnum.alive

            descendants = current_flask_taxonomies.list_taxonomy(
                taxonomy,
                levels=prefer.options.get('levels', None),
                status_cond=status_cond,
                return_descendants_count=INCLUDE_DESCENDANTS_COUNT in prefer,
                return_descendants_busy_count=INCLUDE_STATUS in prefer)
            if q:
                descendants = current_flask_taxonomies.apply_term_query(
                    descendants, q, code)

            child_exclude = set(prefer.exclude)
            child_exclude.discard(INCLUDE_SELF)
            child_prefer = prefer.copy(exclude=child_exclude).extend(
                include=[INCLUDE_SELF])

            child_paginator = Paginator(
                child_prefer,
                descendants,
                page,
                size,
                json_converter=lambda data: build_descendants(
                    data, prefer, root_slug=None))

            if INCLUDE_SELF in prefer:
                paginator.set_children(
                    child_paginator.paginated_data_without_envelope)
                # reset page, size, count from the child paginator
                paginator.page = page
                paginator.size = size
                paginator.count = child_paginator.count
            else:
                paginator = child_paginator

        return paginator.jsonify(status_code=status_code)

    except NoResultFound:
        json_abort(404, {})
    except:
        traceback.print_exc()
        raise
Exemplo n.º 18
0
def test_taxonomy_term_update(app, db, taxonomy_tree, test_record):
    taxonomy = current_flask_taxonomies.get_taxonomy("test_taxonomy")
    terms = current_flask_taxonomies.list_taxonomy(taxonomy).all()
    old_record = Record.get_record(id_=test_record.id)
    assert old_record == {
        'pid': 1,
        'taxonomy': [{
            'is_ancestor': True,
            'level': 1,
            'links': {'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a'},
            'test': 'extra_data'
        },
            {
                'is_ancestor': True,
                'level': 2,
                'links': {
                    'parent': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a',
                    'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b'
                },
                'test': 'extra_data'
            },
            {
                'is_ancestor': False,
                'level': 3,
                'links': {
                    'parent': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b',
                    'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b/c'
                },
                'test': 'extra_data'
            }],
        'title': 'record 1'
    }
    term = terms[-1]
    current_flask_taxonomies.update_term(term, extra_data={"new_data": "changed extra data"})
    new_record = Record.get_record(id_=test_record.id)
    assert new_record == {
        'pid': 1,
        'taxonomy': [{
                         'is_ancestor': True,
                         'level': 1,
                         'links': {'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a'},
                         'test': 'extra_data'
                     },
                     {
                         'is_ancestor': True,
                         'level': 2,
                         'links': {
                             'parent': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a',
                             'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b'
                         },
                         'test': 'extra_data'
                     },
                     {
                         'is_ancestor': False,
                         'level': 3,
                         'links': {
                             'parent': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b',
                             'self': 'http://127.0.0.1:5000/2.0/taxonomies/test_taxonomy/a/b/c'
                         },
                         'new_data': 'changed extra data',
                         'test': 'extra_data'
                     }],
        'title': 'record 1'
    }