コード例 #1
0
def create_update_taxonomy_post(prefer=None, q=None):
    if q:
        json_abort(
            422, {
                'message':
                'Query not appropriate when creating or updating taxonomy',
                'reason': 'search-query-not-allowed'
            })
    data = request.json
    if 'code' not in data:
        abort(Response('Code missing', status=400))
    code = data.pop('code')
    url = data.pop('url', None)
    select = data.pop('select', None)
    tax = current_flask_taxonomies.get_taxonomy(code=code, fail=False)
    if not tax:
        current_flask_taxonomies.permissions.taxonomy_create.enforce(
            request=request, code=code)
        current_flask_taxonomies.create_taxonomy(code=code,
                                                 extra_data=data,
                                                 url=url,
                                                 select=select)
        status_code = 201
    else:
        current_flask_taxonomies.permissions.taxonomy_update.enforce(
            request=request, taxonomy=tax)
        current_flask_taxonomies.update_taxonomy(tax,
                                                 extra_data=data,
                                                 url=url,
                                                 select=select)
        status_code = 200
    current_flask_taxonomies.commit()

    return get_taxonomy(code, prefer=prefer, status_code=status_code)
コード例 #2
0
def test_create_taxonomy(app, db):
    """
    Test if creating taxonomy working. Test uses SQLite db.
    """

    # management task that creates flask-taxonomies tables
    # subprocess.run(["invenio", "taxonomies", "init"])

    current_flask_taxonomies.create_taxonomy("root", extra_data={}, session=db.session)
    db.session.commit()
    res = current_flask_taxonomies.list_taxonomies(session=db.session).all()
    print(res)
    assert len(res) == 1
コード例 #3
0
def test_api(app, db):
    taxonomy = current_flask_taxonomies.create_taxonomy("root",
                                                        extra_data={},
                                                        session=db.session)
    db.session.commit()

    identification = TermIdentification(taxonomy=taxonomy, slug="a")
    term = current_flask_taxonomies.create_term(identification,
                                                extra_data={"a": 1})
    assert term.slug == "a"
    db.session.commit()

    identification2 = TermIdentification(parent=term, slug="b")
    term2 = current_flask_taxonomies.create_term(identification2,
                                                 extra_data={"b": 2})
    assert term2.slug == "a/b"
    db.session.commit()

    res = current_flask_taxonomies.list_taxonomies().all()
    print(res)

    # filter
    term_identification = TermIdentification(taxonomy=taxonomy, slug=term.slug)
    assert list(
        current_flask_taxonomies.filter_term(term_identification)) == [term]

    assert list(
        current_flask_taxonomies.filter_term(
            TermIdentification(taxonomy=taxonomy,
                               slug=term2.slug))) == [term2]

    res_term = current_flask_taxonomies.filter_term(
        term_identification).one_or_none()
    assert isinstance(res_term, TaxonomyTerm)
コード例 #4
0
def taxonomy(app, db):
    taxonomy = current_flask_taxonomies.create_taxonomy(
        "test_taxonomy",
        extra_data={"title": {
            "cs": "test_taxonomy",
            "en": "test_taxonomy"
        }})
    db.session.commit()
    return taxonomy
コード例 #5
0
def create_update_taxonomy(code=None,
                           prefer=None,
                           page=None,
                           size=None,
                           q=None):
    if q:
        json_abort(
            422, {
                'message':
                'Query not appropriate when creating or updating taxonomy',
                'reason': 'search-query-not-allowed'
            })
    tax = current_flask_taxonomies.get_taxonomy(code=code, fail=False)

    if tax:
        current_flask_taxonomies.permissions.taxonomy_update.enforce(
            request=request, taxonomy=tax)
    else:
        current_flask_taxonomies.permissions.taxonomy_create.enforce(
            request=request, code=code)

    data = request.json
    url = data.pop('url', None)
    select = data.pop('select', None)
    if not tax:
        current_flask_taxonomies.create_taxonomy(code=code,
                                                 extra_data=request.json,
                                                 url=url,
                                                 select=select)
        status_code = 201
    else:
        current_flask_taxonomies.update_taxonomy(tax,
                                                 extra_data=request.json,
                                                 url=url,
                                                 select=select)
        status_code = 200
    current_flask_taxonomies.commit()
    return get_taxonomy(code,
                        prefer=prefer,
                        page=page,
                        size=size,
                        status_code=status_code)
コード例 #6
0
ファイル: test_api.py プロジェクト: Semtexcz/flask-taxonomies
    def test_create(self, db, Taxonomy, TaxonomyTerm):
        """Test create taxonomy."""
        tax = current_flask_taxonomies.create_taxonomy('code', {'extra': 'data'})
        db.session.add(tax)
        db.session.commit()

        retrieved = Taxonomy(TaxonomyTerm.query.get(tax.id))
        assert retrieved.code == "code"
        assert retrieved.extra_data == {"extra": "data"}

        tax.check()
コード例 #7
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
コード例 #8
0
ファイル: views.py プロジェクト: Semtexcz/flask-taxonomies
def taxonomy_create(code: str, extra_data: dict = None):
    """Create a new Taxonomy."""
    try:
        created = current_flask_taxonomies.create_taxonomy(
            code=code, extra_data=extra_data)
        created_dict = jsonify_taxonomy(created)

        response = jsonify(created_dict)
        response.status_code = 201
        response.headers['Location'] = created_dict['links']['self']
        return response
    except IntegrityError:
        raise BadRequest("Taxonomy with this code already exists.")
コード例 #9
0
def test_create_update_terms_2(app, db, taxonomy_data_list):
    taxonomy_code = "licenses"
    slug = "copyright"
    taxonomy = current_flask_taxonomies.create_taxonomy(
        taxonomy_code,
        extra_data={"title": {
            "cs": "Licence",
            "en": "Licenses"
        }})
    create_update_terms(taxonomy, taxonomy_data_list,
                        resolve_list=True)  # creating
    create_update_terms(taxonomy, taxonomy_data_list,
                        resolve_list=True)  # updating
    term_identification = TermIdentification(taxonomy=taxonomy_code, slug=slug)
    res = list(current_flask_taxonomies.filter_term(term_identification))
    assert isinstance(res[0].extra_data["list"], list)
コード例 #10
0
def import_countries(db):
    # with db.session.begin_nested():
    try:
        Base.metadata.create_all(db.engine)
    except:
        pass

    tax = current_flask_taxonomies.get_taxonomy(code='country', fail=False)
    if tax:
        return

    tax = current_flask_taxonomies.create_taxonomy(
        code='country',
        extra_data={'title': 'List of countries'},
        url='https://www.kaggle.com/nikitagrec/world-capitals-gps/data')

    continents = {}
    with open(os.path.join(os.path.dirname(__file__), 'countries.csv'),
              'r') as f:
        rdr = csv.DictReader(f)
        for row in rdr:
            try:
                continent = row['ContinentName']
                country = row['CountryCode']
                if continent not in continents:
                    print('Creating continent', continent.lower())
                    continent_term = current_flask_taxonomies.create_term(
                        TermIdentification(taxonomy=tax,
                                           slug=continent.lower().replace(
                                               ' ', '-')), )
                    continents[continent] = continent_term

                slug = '%s/%s' % (continent.lower(), country.lower())
                slug = slug.replace(' ', '-')
                print('Importing', slug)
                current_flask_taxonomies.create_term(TermIdentification(
                    taxonomy=tax, slug=slug),
                                                     extra_data=row)
            except:
                traceback.print_exc()
                return
    try:
        db.session.commit()
    except:
        traceback.print_exc()
        sys.exit(1)
コード例 #11
0
def create_update_taxonomy(data, drop) -> Taxonomy:
    tax_dict = convert_data_to_dict(data)[0]
    if 'code' not in tax_dict:
        raise ValueError('Taxonomy does not contain "code"')
    code = tax_dict.pop('code')
    taxonomy = current_flask_taxonomies.get_taxonomy(code, fail=False)
    if taxonomy and drop:
        current_flask_taxonomies.delete_taxonomy(taxonomy)
        taxonomy = None

    if taxonomy:
        merged_dict = taxonomy.extra_data
        merged_dict.update(tax_dict)
        current_flask_taxonomies.update_taxonomy(taxonomy, merged_dict)
    else:
        taxonomy = current_flask_taxonomies.create_taxonomy(code, extra_data=tax_dict)
    db.session.commit()
    return taxonomy