From 39cd1cfe62d43b161decc807f94211519ee95597 Mon Sep 17 00:00:00 2001 From: Miguel BarĂ£o Date: Wed, 24 Apr 2019 16:46:50 +0100 Subject: [PATCH] add config/logger.yaml example files to start from. --- README.md | 1 + aprendizations/knowledge.py | 24 +++++++++--------------- aprendizations/serve.py | 25 ++++++++++++++----------- config/logger-debug.yaml | 46 ++++++++++++++++++++++++++++++++++++++++++++++ config/logger.yaml | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 26 deletions(-) create mode 100644 config/logger-debug.yaml create mode 100644 config/logger.yaml diff --git a/README.md b/README.md index 6bd2643..c124968 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,7 @@ errors in the browser. Logging levels can be adjusted in `~/.config/aprendizations/logger.yaml` and `~/.config/aprendizations/logger-debug.yaml`. +If these files do not yet exist, there are examples in `aprendizations/config` that can be copied to `~/.config/aprendizations`. #### UnicodeEncodeError diff --git a/aprendizations/knowledge.py b/aprendizations/knowledge.py index ec7c73f..cb774c6 100644 --- a/aprendizations/knowledge.py +++ b/aprendizations/knowledge.py @@ -69,13 +69,14 @@ class StudentKnowledge(object): # ------------------------------------------------------------------------ async def start_topic(self, topic): logger.debug('StudentKnowledge.start_topic()') + if self.current_topic == topic: - logger.info(' Restarting current topic is not allowed.') + logger.info('Restarting current topic is not allowed.') return False # do not allow locked topics if self.is_locked(topic): - logger.debug(f' Topic {topic} is locked') + logger.debug(f'Topic {topic} is locked') return False # starting new topic @@ -96,23 +97,16 @@ class StudentKnowledge(object): # synchronous: # self.questions = [self.factory[ref].generate() for ref in questions] - loop = asyncio.get_running_loop() - # async: - # generators = [loop.run_in_executor(None, self.factory[qref].generate) - # for qref in questions] - # self.questions = await asyncio.gather(*generators) - - # another async: - self.questions = [] - for qref in questions: - q = await loop.run_in_executor(None, self.factory[qref].generate) - self.questions.append(q) - - logger.debug(f'Generated {len(self.questions)} questions') + loop = asyncio.get_running_loop() + generators = [loop.run_in_executor(None, self.factory[qref].generate) + for qref in questions] + self.questions = await asyncio.gather(*generators) # get first question self.next_question() + + logger.debug(f'Generated {len(self.questions)} questions') return True # ------------------------------------------------------------------------ diff --git a/aprendizations/serve.py b/aprendizations/serve.py index fb45113..d0ebd6c 100644 --- a/aprendizations/serve.py +++ b/aprendizations/serve.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 # python standard library -from os import path -import os import sys import base64 import uuid @@ -13,12 +11,12 @@ import signal import functools import ssl import asyncio -# from typing import NoReturn +from os import path, environ # third party libraries import tornado.ioloop -import tornado.web import tornado.httpserver +import tornado.web from tornado.escape import to_unicode # this project @@ -294,7 +292,7 @@ class QuestionHandler(BaseHandler): answer_qid = self.get_body_arguments('qid')[0] current_qid = self.learn.get_current_question_id(user) if answer_qid != current_qid: - logging.debug(f'User {user} desynchronized questions') + logging.info(f'User {user} desynchronized questions') self.write({ 'method': 'invalid', 'params': { @@ -428,16 +426,16 @@ def get_logger_config(debug=False): filename = 'logger.yaml' level = 'INFO' - config_dir = os.environ.get('XDG_CONFIG_HOME', '~/.config/') + config_dir = environ.get('XDG_CONFIG_HOME', '~/.config/') config_file = path.join(path.expanduser(config_dir), APP_NAME, filename) default_config = { 'version': 1, 'formatters': { 'standard': { - 'format': '%(asctime)s %(name)-24s %(levelname)-8s ' + 'format': '%(asctime)s %(name)-24s %(levelname)-10s - ' '%(message)s', - 'datefmt': '%H:%M:%S', + 'datefmt': '%Y-%m-%d %H:%M:%S', }, }, 'handlers': { @@ -503,8 +501,8 @@ def main(): sys.exit(1) # --- get SSL certificates - if 'XDG_DATA_HOME' in os.environ: - certs_dir = path.join(os.environ['XDG_DATA_HOME'], 'certs') + if 'XDG_DATA_HOME' in environ: + certs_dir = path.join(environ['XDG_DATA_HOME'], 'certs') else: certs_dir = path.expanduser('~/.local/share/certs') @@ -523,7 +521,12 @@ def main(): logging.critical('Certificates cert.pem and privkey.pem not found') sys.exit(1) - httpserver.listen(arg.port) + try: + httpserver.listen(arg.port) + except OSError: + logging.critical(f'Cannot bind port {arg.port}. Already in use?') + sys.exit(1) + logging.info(f'Listening on port {arg.port}.') # --- run webserver diff --git a/config/logger-debug.yaml b/config/logger-debug.yaml new file mode 100644 index 0000000..8642783 --- /dev/null +++ b/config/logger-debug.yaml @@ -0,0 +1,46 @@ +--- +version: 1 + +formatters: + void: + format: '' + standard: + format: '%(asctime)s | %(levelname)-9s | %(name)-24s | %(thread)-15d | %(message)s' + datefmt: '%H:%M:%S' + +handlers: + default: + level: 'DEBUG' + class: 'logging.StreamHandler' + formatter: 'standard' + stream: 'ext://sys.stdout' + +loggers: + '': + handlers: ['default'] + level: 'DEBUG' + + 'aprendizations.factory': + handlers: ['default'] + level: 'DEBUG' + propagate: false + + 'aprendizations.knowledge': + handlers: ['default'] + level: 'DEBUG' + propagate: false + + 'aprendizations.learnapp': + handlers: ['default'] + level: 'DEBUG' + propagate: false + + 'aprendizations.questions': + handlers: ['default'] + level: 'DEBUG' + propagate: false + + 'aprendizations.tools': + handlers: ['default'] + level: 'DEBUG' + propagate: false diff --git a/config/logger.yaml b/config/logger.yaml new file mode 100644 index 0000000..4a5def2 --- /dev/null +++ b/config/logger.yaml @@ -0,0 +1,46 @@ +--- +version: 1 + +formatters: + void: + format: '' + standard: + format: '%(asctime)s | %(thread)-15d | %(levelname)-9s | %(name)-24s | %(message)s' + datefmt: '%Y-%m-%d %H:%M:%S' + +handlers: + default: + level: 'INFO' + class: 'logging.StreamHandler' + formatter: 'standard' + stream: 'ext://sys.stdout' + +loggers: + '': + handlers: ['default'] + level: 'INFO' + + 'aprendizations.factory': + handlers: ['default'] + level: 'INFO' + propagate: false + + 'aprendizations.knowledge': + handlers: ['default'] + level: 'INFO' + propagate: false + + 'aprendizations.learnapp': + handlers: ['default'] + level: 'INFO' + propagate: false + + 'aprendizations.questions': + handlers: ['default'] + level: 'INFO' + propagate: false + + 'aprendizations.tools': + handlers: ['default'] + level: 'INFO' + propagate: false -- libgit2 0.21.2