diff --git a/app/lexicon/controller.py b/app/lexicon/controller.py index c1b231d..d2820a7 100644 --- a/app/lexicon/controller.py +++ b/app/lexicon/controller.py @@ -1,12 +1,10 @@ import json -from flask_login import current_user +from flask import request from flask import Response -from flask_restx import Namespace, Resource, reqparse +from flask_restx import Namespace, Resource -from app.lexicon.interface import LexiconItemInterface -from app.lexicon.schema import LexiconItemSchema -from app.utils.grew_utils import grew_request +from app.utils.grew_utils import GrewService api = Namespace( "LexiconV2", description="Endpoints for dealing with samples of project" @@ -18,44 +16,22 @@ class LexiconResource(Resource): "Lexicon" def post(self, project_name: str): - parser = reqparse.RequestParser() - parser.add_argument(name="samplenames", type=str, action="append") - parser.add_argument(name="features", type=str,action="append") - parser.add_argument(name="lexiconType", type=str) - parser.add_argument(name="prune", type=int) - args = parser.parse_args() - - sample_names = args.get("samplenames") + + args = request.get_json() + sample_ids = args.get("samplenames") features = args.get("features") - lexicon_type=args.get("lexiconType") - prune=args.get("prune") - - if lexicon_type == 'user': - user_ids = { "one": [current_user.username] } - elif lexicon_type == 'user_recent': - user_ids = { "one": [current_user.username, "__last__"] } - elif lexicon_type == 'recent': - user_ids = { "one": ["__last__"] } - elif lexicon_type == 'validated': - user_ids = { "one": ["validated"] } - elif lexicon_type=='all': - user_ids = "all" - - prune = (None, prune) [prune != 0] - reply = grew_request( - "getLexicon", - data={"project_id": project_name, "sample_ids": json.dumps(sample_names), "user_ids": json.dumps(user_ids), "features": json.dumps(features),"prune":prune}, - ) + lexicon_type = args.get("lexiconType") + prune = args.get("prune") + + reply = GrewService.get_lexicon(project_name, sample_ids, lexicon_type, '',prune, features) return reply["data"] -@api.route("//lexicon/export-json") +@api.route("lexicon/export-json") class LexiconExportJson(Resource): - def post(self, project_name: str): - parser = reqparse.RequestParser() - parser.add_argument(name="data", type=dict, action="append") - args = parser.parse_args() + def post(self): + args = request.get_json() lexicon = args.get("data") for element in lexicon: del element["key"] @@ -64,17 +40,16 @@ def post(self, project_name: str): return resp -@api.route("//lexicon/export-tsv") +@api.route("/lexicon/export-tsv") class LexiconExportTsv(Resource): - def post(self, project_name: str): - parser = reqparse.RequestParser() - parser.add_argument(name="data", type=dict, action="append") - args = parser.parse_args() + def post(self): + + args = request.get_json() lexicon = args.get("data") - features=list(lexicon[0]["feats"].keys()) + features = list(lexicon[0]["feats"].keys()) header = "\t".join(features)+"\tfrequence" - line_tsv=header+'\n' + line_tsv = header+'\n' for item in lexicon: line_tsv += "\t".join(str(value) for key, value in item["feats"].items()) diff --git a/app/lexicon/interface.py b/app/lexicon/interface.py deleted file mode 100644 index 86359ec..0000000 --- a/app/lexicon/interface.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import Any, Dict, Optional, Union -from mypy_extensions import TypedDict - - -class LexiconItemInterface(TypedDict, total=True): - form: str - lemma: str - pos: str # or with capital letters POS ? - gloss: str - features: Dict[str, Any] # when no features, equal to None ? or empty dict ? - frequency: int - - -tokenWithoutFeatures = LexiconItemInterface( - form="eating", - lemma="eat", - pos="VERB", - gloss="manger", - frequency=178, - features={}, -) - -tokenWithFeatures = LexiconItemInterface( - form="eating", - lemma="eat", - pos="VERB", - gloss="manger", - frequency=178, - features={"featureInt": 212, "featureFloat": 0.2113, "featureStr": "qwerty"}, -) diff --git a/app/lexicon/schema.py b/app/lexicon/schema.py deleted file mode 100644 index c4dafb0..0000000 --- a/app/lexicon/schema.py +++ /dev/null @@ -1,13 +0,0 @@ -from marshmallow import fields -from marshmallow.schema import Schema - - -class LexiconItemSchema(Schema): - """User schema""" - - form = fields.String(attribute="form") - pos = fields.String(attribute="pos") - lemma = fields.String(attribute="lemma") - gloss = fields.String(attribute="gloss") - frequency = fields.Integer(attribute="frequency") - features = fields.Dict(attribute="features") diff --git a/app/utils/grew_utils.py b/app/utils/grew_utils.py index 4a39a0b..f6e21dd 100644 --- a/app/utils/grew_utils.py +++ b/app/utils/grew_utils.py @@ -178,6 +178,23 @@ def get_relation_table(project_id: str, sample_ids, user_type, other_user): ) return reply + @staticmethod + def get_lexicon(project_name: str, sample_ids, user_type, other_user, prune, features): + + user_ids = GrewService.get_user_ids(user_type, other_user) + prune = (None, prune) [prune != 0] + reply = grew_request( + "getLexicon", + data={ + "project_id": project_name, + "sample_ids": json.dumps(sample_ids), + "user_ids": json.dumps(user_ids), + "features": json.dumps(features), + "prune":prune + }, + ) + return reply + @staticmethod def get_user_ids(user_type: str, other_user: str): if user_type == 'user':