Updated so json doesn't get sorted anymore, bugfixes, added new parameter to two endpoints, docker-compose jobs saving location update, json & swagger update

This commit is contained in:
Kikimanox
2022-11-03 15:58:11 +01:00
parent fe6120fb18
commit 7b7214905a
10 changed files with 137 additions and 88 deletions
+1
View File
@@ -9,6 +9,7 @@ services:
volumes: # when pushing to server, remove the first dot here in front of /mnt volumes: # when pushing to server, remove the first dot here in front of /mnt
- /mnt/ssd/ds_ftp/classla_OS2022:/usr/src/app/classla_OS2022 - /mnt/ssd/ds_ftp/classla_OS2022:/usr/src/app/classla_OS2022
- ../classla/classla_resources:/root/classla_resources - ../classla/classla_resources:/root/classla_resources
- ../jobs_database_rsdo5:/usr/src/app/DB
environment: environment:
- PYTHONUNBUFFERED=1 - PYTHONUNBUFFERED=1
- MDB_DATABASE=conllus_150k - MDB_DATABASE=conllus_150k
+28 -6
View File
@@ -546,7 +546,7 @@
} }
}, },
{ {
"name": "kljucnebesede", "name": "kljucneBesede",
"in": "query", "in": "query",
"required": false, "required": false,
"schema": { "schema": {
@@ -616,7 +616,18 @@
} }
}, },
{ {
"name": "kljucnebesede", "name": "kljucneBesede",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "prepovedaneBesede",
"in": "query", "in": "query",
"required": false, "required": false,
"schema": { "schema": {
@@ -688,7 +699,18 @@
} }
}, },
{ {
"name": "kljucnebesede", "name": "kljucneBesede",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "prepovedaneBesede",
"in": "query", "in": "query",
"required": false, "required": false,
"schema": { "schema": {
@@ -757,7 +779,7 @@
} }
}, },
{ {
"name": "kljucnebesede", "name": "kljucneBesede",
"in": "query", "in": "query",
"required": false, "required": false,
"schema": { "schema": {
@@ -869,7 +891,7 @@
} }
}, },
{ {
"name": "kljucnebesede", "name": "kljucneBesede",
"in": "query", "in": "query",
"required": false, "required": false,
"schema": { "schema": {
@@ -1004,7 +1026,7 @@
} }
}, },
{ {
"name": "kljucnebesede", "name": "kljucneBesede",
"in": "query", "in": "query",
"required": false, "required": false,
"schema": { "schema": {
+4
View File
@@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore
+1
View File
@@ -7,6 +7,7 @@ from swagger_server import encoder
def main(): def main():
app = connexion.App(__name__, specification_dir='./swagger/') app = connexion.App(__name__, specification_dir='./swagger/')
app.app.json_encoder = encoder.JSONEncoder app.app.json_encoder = encoder.JSONEncoder
app.app.config['JSON_SORT_KEYS'] = False
app.add_api('swagger.yaml', arguments={'title': 'OpenAPI definition'}, pythonic_params=True) app.add_api('swagger.yaml', arguments={'title': 'OpenAPI definition'}, pythonic_params=True)
app.run(port=8080) app.run(port=8080)
@@ -243,7 +243,9 @@ def execute_classla_job(job: Job):
classla_sem.acquire() classla_sem.acquire()
job.started_on = datetime.datetime.utcnow() job.started_on = datetime.datetime.utcnow()
job.save() job.save()
conllu, _ = cl_utils.raw_text_to_conllu(job.job_input) conllu, status = cl_utils.raw_text_to_conllu(job.job_input)
if status != 200:
conllu = f'ERROR - {conllu}'
job.job_output = conllu job.job_output = conllu
job.finished_on = datetime.datetime.utcnow() job.finished_on = datetime.datetime.utcnow()
job.save() job.save()
@@ -268,7 +270,7 @@ def execute_ateapi_job(job: Job):
try: try:
ret_json = _res.response[0].decode('utf-8') ret_json = _res.response[0].decode('utf-8')
except: except:
ret_json = "Unknown exception." ret_json = "ERROR - Unknown exception."
if _res.status_code != 200: if _res.status_code != 200:
ret_json = f'ERROR - {ret_json}' ret_json = f'ERROR - {ret_json}'
@@ -287,8 +289,8 @@ def execute_izluscipoiskanju_job(job: Job):
job.started_on = datetime.datetime.utcnow() job.started_on = datetime.datetime.utcnow()
job.save() job.save()
info = json.loads(job.job_input) info = json.loads(job.job_input)
terKand = db_utils.vrni_oss_terminoloske_kandidate(info['leta'], info['vrste'], info['kljucnebesede'], terKand = db_utils.vrni_oss_terminoloske_kandidate(info['leta'], info['vrste'], info['kljucne_besede'],
info['udk']) info['prepovedane_besede'], info['udk'])
job.job_output = terKand job.job_output = terKand
job.finished_on = datetime.datetime.utcnow() job.finished_on = datetime.datetime.utcnow()
job.save() job.save()
+35 -29
View File
@@ -8,7 +8,7 @@ from swagger_server import util
from flask import send_file from flask import send_file
def get_conllus(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E501 def get_conllus(leta=None, vrste=None, kljucne_besede=None, udk=None): # noqa: E501
""""Vrne seznam CoNNL-U-jev glede na iskalne pogoje """"Vrne seznam CoNNL-U-jev glede na iskalne pogoje
# noqa: E501 # noqa: E501
@@ -17,22 +17,22 @@ def get_conllus(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E
:type leta: List[int] :type leta: List[int]
:param vrste: :param vrste:
:type vrste: List[int] :type vrste: List[int]
:param kljucnebesede: :param kljucne_besede:
:type kljucnebesede: List[str] :type kljucne_besede: List[str]
:param udk: :param udk:
:type udk: List[str] :type udk: List[str]
:rtype: List[str] :rtype: List[str]
""" """
if not kljucnebesede: if not kljucne_besede:
return "Manjkajo kljucne besede", 400 return "Manjkajo kljucne besede", 400
files = db_utils.get_files_by_udc(kljucnebesede) files = db_utils.get_files_by_udc(kljucne_besede)
if not files: if not files:
return 'Nobena datoteka ne ustreza iskalnemu pogoju', 404 return 'Nobena datoteka ne ustreza iskalnemu pogoju', 404
return ' '.join(files), 200 return ' '.join(files), 200
def get_extracted_words(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E501 def get_extracted_words(leta=None, vrste=None, kljucne_besede=None, prepovedane_besede=None, udk=None): # noqa: E501
"""Vrne terminloške kandidate glede na ... (sync) """Vrne terminloške kandidate glede na ... (sync)
# noqa: E501 # noqa: E501
@@ -41,18 +41,21 @@ def get_extracted_words(leta=None, vrste=None, kljucnebesede=None, udk=None): #
:type leta: List[int] :type leta: List[int]
:param vrste: :param vrste:
:type vrste: List[int] :type vrste: List[int]
:param kljucnebesede: :param kljucne_besede:
:type kljucnebesede: List[str] :type kljucne_besede: List[str]
:param prepovedane_besede:
:type prepovedane_besede: List[str]
:param udk: :param udk:
:type udk: List[str] :type udk: List[str]
:rtype: List[TerminoloskiKandidat] :rtype: List[TerminoloskiKandidat]
""" """
terKand = db_utils.vrni_oss_terminoloske_kandidate(leta, vrste, kljucnebesede, udk) terKand = db_utils.vrni_oss_terminoloske_kandidate(leta, vrste, kljucne_besede, prepovedane_besede, udk)
return terKand, 200 return terKand, 200
def get_extracted_words_async(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E501 def get_extracted_words_async(leta=None, vrste=None, kljucne_besede=None, prepovedane_besede=None,
udk=None): # noqa: E501
"""Vrne terminloške kandidate glede na ... (async) """Vrne terminloške kandidate glede na ... (async)
# noqa: E501 # noqa: E501
@@ -61,22 +64,25 @@ def get_extracted_words_async(leta=None, vrste=None, kljucnebesede=None, udk=Non
:type leta: List[int] :type leta: List[int]
:param vrste: :param vrste:
:type vrste: List[int] :type vrste: List[int]
:param kljucnebesede: :param kljucne_besede:
:type kljucnebesede: List[str] :type kljucne_besede: List[str]
:param prepovedane_besede:
:type prepovedane_besede: List[str]
:param udk: :param udk:
:type udk: List[str] :type udk: List[str]
:rtype: str :rtype: str
""" """
job, is_old_job = JobManager.create_job(5, json.dumps( job, is_old_job = JobManager.create_job(5, json.dumps(
{'leta': leta, 'vrste': vrste, 'kljucnebesede': kljucnebesede, 'udk': udk})) {'leta': leta, 'vrste': vrste, 'kljucne_besede': kljucne_besede, 'prepovedane_besede': prepovedane_besede,
'udk': udk}))
if job is None: if job is None:
return "Something went wrong", 500 return "Something went wrong", 500
ret = {'check_job_url': f'{connexion.request.url_root}/job/{job.id}'} ret = {'check_job_url': f'{connexion.request.url_root}/job/{job.id}'}
return ret, 200 return ret, 200
def get_files(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E501 def get_files(leta=None, vrste=None, kljucne_besede=None, udk=None): # noqa: E501
"""Vrne seznam binarnih zapisov v originalnem formatu glede na iskalne pogoje """Vrne seznam binarnih zapisov v originalnem formatu glede na iskalne pogoje
# noqa: E501 # noqa: E501
@@ -85,22 +91,22 @@ def get_files(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E50
:type leta: List[int] :type leta: List[int]
:param vrste: :param vrste:
:type vrste: List[int] :type vrste: List[int]
:param kljucnebesede: :param kljucne_besede:
:type kljucnebesede: List[str] :type kljucne_besede: List[str]
:param udk: :param udk:
:type udk: List[str] :type udk: List[str]
:rtype: str :rtype: str
""" """
if not kljucnebesede: if not kljucne_besede:
return "Manjkajo kljucne besede", 400 return "Manjkajo kljucne besede", 400
files = db_utils.get_files_by_udc(kljucnebesede) files = db_utils.get_files_by_udc(kljucne_besede)
if not files: if not files:
return 'Nobena datoteka ne ustreza iskalnemu pogoju', 404 return 'Nobena datoteka ne ustreza iskalnemu pogoju', 404
return ' '.join(files), 200 return ' '.join(files), 200
def get_number_texts(leta=None, vrste=None, kljucnebesede=None, udk=None): # noqa: E501 def get_number_texts(leta=None, vrste=None, kljucne_besede=None, udk=None): # noqa: E501
"""Vrne število besedil glede na iskalne pogoje """Vrne število besedil glede na iskalne pogoje
# noqa: E501 # noqa: E501
@@ -109,8 +115,8 @@ def get_number_texts(leta=None, vrste=None, kljucnebesede=None, udk=None): # no
:type leta: List[int] :type leta: List[int]
:param vrste: :param vrste:
:type vrste: List[int] :type vrste: List[int]
:param kljucnebesede: :param kljucne_besede:
:type kljucnebesede: List[str] :type kljucne_besede: List[str]
:param udk: :param udk:
:type udk: List[str] :type udk: List[str]
@@ -119,29 +125,29 @@ def get_number_texts(leta=None, vrste=None, kljucnebesede=None, udk=None): # no
# if not kljucnebesede: # if not kljucnebesede:
# return "Manjkajo kljucne besede", 400 # return "Manjkajo kljucne besede", 400
files = db_utils.vrni_oss_dokumente(leta, vrste, kljucnebesede, udk) files = db_utils.vrni_oss_dokumente(leta, vrste, kljucne_besede, udk)
return len(files), 200 return len(files), 200
def get_texts(leta, vrste, kljucnebesede, cerifpodrocja): # noqa: E501 def get_texts(leta=None, vrste=None, kljucne_besede=None, udk=None): # noqa: E501
"""Vrne seznam besedil glede na iskalne pogoje """Vrne seznam besedil glede na iskalne pogoje
# noqa: E501 # noqa: E501
:param leta: :param leta:
:type leta: List[int] :type leta: List[int]
:param vrste: :param vrste:
:type vrste: List[int] :type vrste: List[int]
:param kljucnebesede: :param kljucne_besede:
:type kljucnebesede: List[str] :type kljucne_besede: List[str]
:param udk: :param udk:
:type udk: List[str] :type udk: List[str]
:rtype: List[str] :rtype: List[str]
""" """
if not kljucnebesede: if not kljucne_besede:
return "Manjkajo kljucne besede", 400 return "Manjkajo kljucne besede", 400
files = db_utils.get_files_by_udc(kljucnebesede) files = db_utils.get_files_by_udc(kljucne_besede)
if not files: if not files:
return 'Nobena datoteka ne ustreza iskalnemu pogoju', 404 return 'Nobena datoteka ne ustreza iskalnemu pogoju', 404
return ' '.join(files), 200 return ' '.join(files), 200
+8 -16
View File
@@ -7,22 +7,14 @@ import os
from swagger_server.util import get_random_filename from swagger_server.util import get_random_filename
from werkzeug.utils import secure_filename from werkzeug.utils import secure_filename
LOCAL_PATH = "requets_db/dbs" DB_Path = 'DB/jobs.db'
SERVER_PATH = "swagger_server/requets_db/dbs" if not os.path.exists('DB'):
os.makedirs('DB', exist_ok=True)
if not os.path.exists(LOCAL_PATH): db = SqliteDatabase(DB_Path, pragmas={
if os.path.exists('requets_db'): 'journal_mode': 'wal',
os.makedirs(LOCAL_PATH, exist_ok=True) 'cache_size': -1 * 256 * 1024, # 256MB
elif os.path.exists('swagger_server/requets_db'): 'foreign_keys': 1,
os.makedirs(SERVER_PATH, exist_ok=True) 'charset': 'utf8'
DB = f'{LOCAL_PATH}/jobs.db'
if not os.path.exists(LOCAL_PATH):
DB = f'{SERVER_PATH}/jobs.db'
db = SqliteDatabase(DB, pragmas={
# 'journal_mode': 'wal',
'cache_size': -1 * 128 * 1024, # 128MB
'foreign_keys': 1
}) })
+43 -25
View File
@@ -311,7 +311,7 @@ paths:
items: items:
type: integer type: integer
format: int64 format: int64
- name: kljucnebesede - name: kljucneBesede
in: query in: query
required: false required: false
style: form style: form
@@ -366,7 +366,16 @@ paths:
items: items:
type: integer type: integer
format: int64 format: int64
- name: kljucnebesede - name: kljucneBesede
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: prepovedaneBesede
in: query in: query
required: false required: false
style: form style: form
@@ -422,7 +431,16 @@ paths:
items: items:
type: integer type: integer
format: int64 format: int64
- name: kljucnebesede - name: kljucneBesede
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: prepovedaneBesede
in: query in: query
required: false required: false
style: form style: form
@@ -459,7 +477,7 @@ paths:
parameters: parameters:
- name: leta - name: leta
in: query in: query
required: true required: false
style: form style: form
explode: true explode: true
schema: schema:
@@ -469,25 +487,7 @@ paths:
format: int64 format: int64
- name: vrste - name: vrste
in: query in: query
required: true required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: kljucnebesede
in: query
required: true
style: form
explode: true
schema:
type: array
items:
type: string
- name: cerifpodrocja
in: query
required: true
style: form style: form
explode: true explode: true
schema: schema:
@@ -495,6 +495,24 @@ paths:
items: items:
type: integer type: integer
format: int64 format: int64
- name: kljucneBesede
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: udk
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: string
responses: responses:
"200": "200":
description: OK description: OK
@@ -563,7 +581,7 @@ paths:
items: items:
type: integer type: integer
format: int64 format: int64
- name: kljucnebesede - name: kljucneBesede
in: query in: query
required: false required: false
style: form style: form
@@ -667,7 +685,7 @@ paths:
items: items:
type: integer type: integer
format: int64 format: int64
- name: kljucnebesede - name: kljucneBesede
in: query in: query
required: false required: false
style: form style: form
+3
View File
@@ -10,8 +10,11 @@ nlp_loaded = True
sent_extractor = re.compile(r"# sent_id = \d+\.\d+(.*?)\n\n", re.MULTILINE | re.DOTALL) sent_extractor = re.compile(r"# sent_id = \d+\.\d+(.*?)\n\n", re.MULTILINE | re.DOTALL)
def raw_text_to_conllu(text): def raw_text_to_conllu(text):
try: try:
if text == '' or text is None:
raise Exception("Text can not be empty (when trying to make conllu for it)")
docall = nlpSlo(text) docall = nlpSlo(text)
docallconllu = docall.to_conll() docallconllu = docall.to_conll()
+8 -8
View File
@@ -33,7 +33,7 @@ def get_files_by_udc(udc):
return ret return ret
def vrni_oss_dokumente(leta, vrste, kljucnebesede, udk): def vrni_oss_dokumente(leta, vrste, kljucne_besede, udk):
ret = [] ret = []
try: try:
@@ -66,12 +66,12 @@ def vrni_oss_dokumente(leta, vrste, kljucnebesede, udk):
where=where + " tipologija IN (%s) " % (where_in_vrste) where=where + " tipologija IN (%s) " % (where_in_vrste)
params=params+vrste params=params+vrste
if (kljucnebesede): if (kljucne_besede):
if (where): if (where):
where=where+ " AND " where=where+ " AND "
where_in_kb = ','.join(['%s'] * len(kljucnebesede)) where_in_kb = ','.join(['%s'] * len(kljucne_besede))
where=where + " kljucnabeseda IN (%s) " % (where_in_kb) where=where + " kljucnabeseda IN (%s) " % (where_in_kb)
params=params+kljucnebesede params=params+kljucne_besede
if(where): if(where):
sql=sql+" where " + where + ";" sql=sql+" where " + where + ";"
@@ -91,7 +91,7 @@ def vrni_oss_dokumente(leta, vrste, kljucnebesede, udk):
return ret return ret
def vrni_oss_terminoloske_kandidate(leta, vrste, kljucnebesede, udk): def vrni_oss_terminoloske_kandidate(leta, vrste, kljucne_besede, prepovedane_besede, udk):
ret = [] ret = []
try: try:
@@ -124,12 +124,12 @@ def vrni_oss_terminoloske_kandidate(leta, vrste, kljucnebesede, udk):
where=where + " tipologija IN (%s) " % (where_in_vrste) where=where + " tipologija IN (%s) " % (where_in_vrste)
params=params+vrste params=params+vrste
if (kljucnebesede): if (kljucne_besede):
if (where): if (where):
where=where+ " AND " where=where+ " AND "
where_in_kb = ','.join(['%s'] * len(kljucnebesede)) where_in_kb = ','.join(['%s'] * len(kljucne_besede))
where=where + " kljucnabeseda IN (%s) " % (where_in_kb) where=where + " kljucnabeseda IN (%s) " % (where_in_kb)
params=params+kljucnebesede params=params+kljucne_besede
if(where): if(where):
sql=sql+" where " + where sql=sql+" where " + where