diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c22918a..24ac59c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,24 @@ All notable changes to this project will be documented in this file. Given the high speed of development in the first phase, changes are being reported only starting from v0.20.2. -## [0.24.0] +## [0.24.2] - 2022-12-10 + +## Fixed + +- The `main.db` configuration should use the configured `workdir` when no + values are specified. + +- The `zwave.mqtt` is now compatible both with older (i.e. `zwavejs2mqtt`) and + newer (i.e. `ZwaveJS`) versions of the backend. + +## [0.24.1] - 2022-12-08 + +### Fixed + +- Removed a parenthesized context manager that broke compatibility with + Python < 3.10. + +## [0.24.0] - 2022-11-22 ### Added diff --git a/platypush/__init__.py b/platypush/__init__.py index 97b9016e..f31b198c 100644 --- a/platypush/__init__.py +++ b/platypush/__init__.py @@ -25,7 +25,7 @@ from .message.response import Response from .utils import set_thread_name, get_enabled_plugins __author__ = 'Fabio Manganiello ' -__version__ = '0.24.0' +__version__ = '0.24.2' log = logging.getLogger('platypush') diff --git a/platypush/backend/zwave/mqtt/__init__.py b/platypush/backend/zwave/mqtt/__init__.py index 399e9886..fd7ca8c4 100644 --- a/platypush/backend/zwave/mqtt/__init__.py +++ b/platypush/backend/zwave/mqtt/__init__.py @@ -185,7 +185,9 @@ class ZwaveMqttBackend(MqttBackend): if not msg.topic.startswith(self.events_topic): return - topic = msg.topic[len(self.events_topic) + 1 :].split('/').pop() + topic = ( + msg.topic[(len(self.events_topic) + 1) :].split('/').pop() # noqa: E203 + ) data = msg.payload.decode() if not data: return diff --git a/platypush/config/__init__.py b/platypush/config/__init__.py index cb5ab789..addba07f 100644 --- a/platypush/config/__init__.py +++ b/platypush/config/__init__.py @@ -10,6 +10,7 @@ import re import shutil import socket import sys +from urllib.parse import quote from typing import Optional import yaml @@ -72,7 +73,7 @@ class Config: if cfgfile is None: cfgfile = self._create_default_config() - self._cfgfile = os.path.abspath(os.path.expanduser(cfgfile)) + cfgfile = self._cfgfile = os.path.abspath(os.path.expanduser(cfgfile)) self._config = self._read_config_file(self._cfgfile) if 'token' in self._config: @@ -80,6 +81,7 @@ class Config: if 'workdir' not in self._config: self._config['workdir'] = self._workdir_location + self._config['workdir'] = os.path.expanduser(self._config['workdir']) os.makedirs(self._config['workdir'], exist_ok=True) if 'scripts_dir' not in self._config: @@ -94,6 +96,7 @@ class Config: ) os.makedirs(self._config['dashboards_dir'], mode=0o755, exist_ok=True) + # Create a default (empty) __init__.py in the scripts folder init_py = os.path.join(self._config['scripts_dir'], '__init__.py') if not os.path.isfile(init_py): with open(init_py, 'w') as f: @@ -106,15 +109,21 @@ class Config: ) sys.path = [scripts_parent_dir] + sys.path - self._config['db'] = self._config.get( - 'main.db', - { - 'engine': 'sqlite:///' - + os.path.join( - os.path.expanduser('~'), '.local', 'share', 'platypush', 'main.db' + # Initialize the default db connection string + db_engine = self._config.get('main.db', '') + if db_engine: + if isinstance(db_engine, str): + db_engine = { + 'engine': db_engine, + } + else: + db_engine = { + 'engine': 'sqlite:///' + os.path.join( + quote(self._config['workdir']), 'main.db' ) - }, - ) + } + + self._config['db'] = db_engine logging_config = { 'level': logging.INFO, diff --git a/platypush/utils/__init__.py b/platypush/utils/__init__.py index 14ee7945..48ae4ab9 100644 --- a/platypush/utils/__init__.py +++ b/platypush/utils/__init__.py @@ -357,7 +357,7 @@ def grouper(n, iterable, fillvalue=None): args = [iter(iterable)] * n if fillvalue: - return zip_longest(fillvalue=fillvalue, *args) + return zip_longest(*args, fillvalue=fillvalue) for chunk in zip_longest(*args): yield filter(None, chunk) @@ -389,8 +389,9 @@ def run(action, *args, **kwargs): return response.output -def generate_rsa_key_pair(key_file: Optional[str] = None, size: int = 2048) \ - -> Tuple[PublicKey, PrivateKey]: +def generate_rsa_key_pair( + key_file: Optional[str] = None, size: int = 2048 +) -> Tuple[PublicKey, PrivateKey]: """ Generate an RSA key pair. @@ -434,10 +435,7 @@ def get_or_generate_jwt_rsa_key_pair(): pub_key_file = priv_key_file + '.pub' if os.path.isfile(priv_key_file) and os.path.isfile(pub_key_file): - with ( - open(pub_key_file, 'r') as f1, - open(priv_key_file, 'r') as f2 - ): + with open(pub_key_file, 'r') as f1, open(priv_key_file, 'r') as f2: return ( rsa.PublicKey.load_pkcs1(f1.read().encode()), rsa.PrivateKey.load_pkcs1(f2.read().encode()), diff --git a/setup.cfg b/setup.cfg index 5882e785..e29cbd8e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.24.0 +current_version = 0.24.2 commit = True tag = True diff --git a/setup.py b/setup.py index 86abd2dd..16bacf3a 100755 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ backend = pkg_files('platypush/backend') setup( name="platypush", - version="0.24.0", + version="0.24.2", author="Fabio Manganiello", author_email="info@fabiomanganiello.com", description="Platypush service",