From bb5f8a9fe7f3968588b45eeaa0c993ef314ca904 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 1 Apr 2020 01:05:53 +0200 Subject: begin bridge --- .gitignore | 23 ++--------------------- cli/app/settings/app_cfg.py | 35 +++++++++++++++++++++++++++++++++-- cli/app/settings/types.py | 15 +++++++++++++++ cli/app/thesaurus/api.py | 33 ++++++++++++++++++++++++--------- cli/app/utils/util.py | 4 ++-- cli/commands/api/category.py | 2 +- cli/commands/api/search.py | 2 +- cli/commands/bridge/words.py | 30 ++++++++++++++++++++++++++++++ 8 files changed, 108 insertions(+), 36 deletions(-) create mode 100644 cli/app/settings/types.py create mode 100644 cli/commands/bridge/words.py diff --git a/.gitignore b/.gitignore index 5ee34bb..c5f444d 100644 --- a/.gitignore +++ b/.gitignore @@ -168,25 +168,6 @@ etc static/js/dist -data_store/docker/mysql/* -data_store/docker/redis/* -data_store/media/* -data_store/models/* -data_store/indexes/* -data_store/incoming/* -data_store/uploads/* -data_store/features/* -data_store/exports/* - -!data_store/.gitkeep -!data_store/media/.gitkeep -!data_store/models/.gitkeep -!data_store/indexes/.gitkeep -!data_store/incoming/.gitkeep -!data_store/uploads/.gitkeep -!data_store/features/.gitkeep -!data_store/exports/.gitkeep -!data_store/docker/.gitkeep -!data_store/docker/mysql/.gitkeep -!data_store/docker/redis/.gitkeep +data_store/categories/ +data_store/search/ diff --git a/cli/app/settings/app_cfg.py b/cli/app/settings/app_cfg.py index 952e76b..09f557b 100644 --- a/cli/app/settings/app_cfg.py +++ b/cli/app/settings/app_cfg.py @@ -1,10 +1,41 @@ import os +import logging +from pathlib import Path + +from app.settings import types + +# ----------------------------------------------------------------------------- +# Logging options exposed for custom click Params +# ----------------------------------------------------------------------------- CLICK_GROUPS = { 'api': 'commands/api', } -DATA_STORE = 'data_store' +# ----------------------------------------------------------------------------- +# Paths +# ----------------------------------------------------------------------------- + +DIR_SELF = os.path.dirname(os.path.realpath(__file__)) +DIR_ROOT = Path(DIR_SELF).parent.parent.parent + +DATA_STORE = os.path.join(DIR_ROOT, 'data_store') SEARCH_PATH = os.path.join(DATA_STORE, "search") -CATEGORIES_PATH = os.path.join(DATA_STORE, "categories") +CATEGORY_PATH = os.path.join(DATA_STORE, "categories") + +# ----------------------------------------------------------------------------- +# Logging options exposed for custom click Params +# ----------------------------------------------------------------------------- + +LOGGER_NAME = 'CLI' +LOG = logging.getLogger(LOGGER_NAME) +LOGLEVELS = { + types.LogLevel.DEBUG: logging.DEBUG, + types.LogLevel.INFO: logging.INFO, + types.LogLevel.WARN: logging.WARN, + types.LogLevel.ERROR: logging.ERROR, + types.LogLevel.CRITICAL: logging.CRITICAL +} +LOGLEVEL_OPT_DEFAULT = types.LogLevel.DEBUG.name +LOGFILE_FORMAT = "%(log_color)s%(levelname)-8s%(reset)s %(cyan)s%(filename)s:%(lineno)s:%(bold_cyan)s%(funcName)s() %(reset)s%(message)s" diff --git a/cli/app/settings/types.py b/cli/app/settings/types.py new file mode 100644 index 0000000..7afdf7f --- /dev/null +++ b/cli/app/settings/types.py @@ -0,0 +1,15 @@ +from enum import Enum + +def find_type(name, enum_type): + for enum_opt in enum_type: + if name == enum_opt.name.lower(): + return enum_opt + return None + +# --------------------------------------------------------------------- +# Logger, monitoring +# -------------------------------------------------------------------- + +class LogLevel(Enum): + """Loger vebosity""" + DEBUG, INFO, WARN, ERROR, CRITICAL = range(5) diff --git a/cli/app/thesaurus/api.py b/cli/app/thesaurus/api.py index ad0dd92..98e0210 100644 --- a/cli/app/thesaurus/api.py +++ b/cli/app/thesaurus/api.py @@ -1,5 +1,6 @@ import os import requests +from hashlib import sha256 from app.utils.util import * from app.settings import app_cfg @@ -40,9 +41,23 @@ class ThesaurusAPI: if resp.status_code != 200: return [] data = resp.text - data = data.split('
') - data = data[0].split('
') - return json.loads(data) + data = data.split('
')[1].split('
')[0] + # print(data) + rows = json.loads(data) + cats = [] + for row in rows: + cat, years = row['popup'].split(']: ') + cat = cat.split('[')[1] + cats.append({ + 'catid': row['catid'], + 'catnum': row['catnum'], + 'category': cat, + 'years': years, + }) + return { + 'word': word, + 'categories': cats, + } def category(self, id): query = { @@ -52,20 +67,20 @@ class ThesaurusAPI: if resp.status_code != 200: return "" raw = resp.text - classification = raw.split("")[1].split('')[0] - category = raw.split("
")[1].split('')[0] - raw_words = raw.split('')[1:] + catnum = raw.split("")[1].split('')[0] + category = raw.split("
")[1].split('')[0].replace("", "").replace("", "") + raw_words = raw.split('">')[1:] words = [] for word in raw_words: word, rest = word.split('') - years = word.split('