1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-14 16:27:13 +03:00

Merge pull request #714 from EDCD/enhancement/miggytest-plugin

Now in docs/examples/plugintest
This commit is contained in:
Athanasius 2020-09-22 14:48:01 +01:00 committed by GitHub
commit a332aaedd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 139 additions and 0 deletions

View File

@ -0,0 +1,18 @@
"""Test class logging."""
import logging
class SubA:
"""Simple class to test logging."""
def __init__(self, logger: logging.Logger):
self.logger = logger
def ping(self) -> None:
"""
Log a ping to demonstrate correct logging.
:return:
"""
self.logger.info('ping!')

View File

@ -0,0 +1,121 @@
#!/usr/bin/env python
# vim: textwidth=0 wrapmargin=0 tabstop=4 shiftwidth=4 softtabstop=4 smartindent smarttab
"""Plugin that tests that modules we bundle for plugins are present and working."""
import logging
import os
import shutil
import sqlite3
import sys
import zipfile
from SubA import SubA
from config import appname
# This could also be returned from plugin_start3()
plugin_name = os.path.basename(os.path.dirname(__file__))
# Logger per found plugin, so the folder name is included in
# the logging format.
logger = logging.getLogger(f'{appname}.{plugin_name}')
if not logger.hasHandlers():
level = logging.INFO # So logger.info(...) is equivalent to print()
logger.setLevel(level)
logger_channel = logging.StreamHandler()
logger_channel.setLevel(level)
logger_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(lineno)d:%(funcName)s: %(message)s') # noqa: E501
logger_formatter.default_time_format = '%Y-%m-%d %H:%M:%S'
logger_formatter.default_msec_format = '%s.%03d'
logger_channel.setFormatter(logger_formatter)
logger.addHandler(logger_channel)
this = sys.modules[__name__] # For holding module globals
this.DBFILE = 'plugintest.db'
this.mt = None
class PluginTest(object):
"""Class that performs actual tests on bundled modules."""
def __init__(self, directory: str):
logger.debug(f'directory = "{directory}')
dbfile = os.path.join(directory, this.DBFILE)
# Test 'import zipfile'
with zipfile.ZipFile(dbfile + '.zip', 'w') as zip:
if os.path.exists(dbfile):
zip.write(dbfile)
zip.close()
# Testing 'import shutil'
if os.path.exists(dbfile):
shutil.copyfile(dbfile, dbfile + '.bak')
# Testing 'import sqlite3'
self.sqlconn = sqlite3.connect(dbfile)
self.sqlc = self.sqlconn.cursor()
try:
self.sqlc.execute('CREATE TABLE entries (timestamp TEXT, cmdrname TEXT, system TEXT, station TEXT, eventtype TEXT)') # noqa: E501
except sqlite3.OperationalError:
logger.exception('sqlite3.OperationalError when CREATE TABLE entries:')
def store(self, timestamp: str, cmdrname: str, system: str, station: str, event: str) -> None:
"""
Store the provided data in sqlite database.
:param timestamp:
:param cmdrname:
:param system:
:param station:
:param event:
:return: None
"""
logger.debug(f'timestamp = "{timestamp}", cmdr = "{cmdrname}", system = "{system}", station = "{station}", event = "{event}"') # noqa: E501
self.sqlc.execute('INSERT INTO entries VALUES(?, ?, ?, ?, ?)', (timestamp, cmdrname, system, station, event))
self.sqlconn.commit()
return None
def plugin_start3(plugin_dir: str) -> str:
"""
Plugin startup method.
:param plugin_dir:
:return: 'Pretty' name of this plugin.
"""
logger.info(f'Folder is {plugin_dir}')
this.mt = PluginTest(plugin_dir)
this.suba = SubA(logger)
this.suba.ping()
return plugin_name
def plugin_stop() -> None:
"""
Plugin stop method.
:return:
"""
logger.info('Stopping')
def journal_entry(cmdrname: str, is_beta: bool, system: str, station: str, entry: dict, state: dict) -> None:
"""
Handle the given journal entry.
:param cmdrname:
:param is_beta:
:param system:
:param station:
:param entry:
:param state:
:return: None
"""
logger.debug(f'cmdr = "{cmdrname}", is_beta = "{is_beta}", system = "{system}", station = "{station}"')
this.mt.store(entry['timestamp'], cmdrname, system, station, entry['event'])

Binary file not shown.