diff --git a/platypush/builder/_base.py b/platypush/builder/_base.py index 73cf69c8a7..5bc139f479 100644 --- a/platypush/builder/_base.py +++ b/platypush/builder/_base.py @@ -5,7 +5,7 @@ import logging import os import pathlib import sys -from typing import Final, Optional, Sequence +from typing import Optional, Sequence from platypush.config import Config from platypush.utils.manifest import ( @@ -29,7 +29,7 @@ class BaseBuilder(ABC): and :module:`platypush.platydock` modules/scripts. """ - REPO_URL: Final[str] = 'https://github.com/BlackLight/platypush.git' + REPO_URL: str = 'https://github.com/BlackLight/platypush.git' """ We use the Github URL here rather than the self-hosted Gitea URL to prevent too many requests to the Gitea server. diff --git a/platypush/bus/redis.py b/platypush/bus/redis.py index 83ded8aff7..40cd7350fa 100644 --- a/platypush/bus/redis.py +++ b/platypush/bus/redis.py @@ -1,6 +1,6 @@ import logging import threading -from typing import Final, Optional +from typing import Optional from platypush.bus import Bus from platypush.message import Message @@ -13,7 +13,7 @@ class RedisBus(Bus): Overrides the in-process in-memory local bus with a Redis bus """ - DEFAULT_REDIS_QUEUE: Final[str] = 'platypush/bus' + DEFAULT_REDIS_QUEUE: str = 'platypush/bus' def __init__(self, *args, on_message=None, redis_queue=None, **kwargs): from platypush.utils import get_redis diff --git a/platypush/entities/_base.py b/platypush/entities/_base.py index 2a739124a6..cc76450f3c 100644 --- a/platypush/entities/_base.py +++ b/platypush/entities/_base.py @@ -7,7 +7,7 @@ import subprocess import sys import types from datetime import datetime -from typing import Callable, Dict, Final, List, Optional, Set, Type, Tuple, Any +from typing import Callable, Dict, List, Optional, Set, Type, Tuple, Any import pkgutil @@ -41,7 +41,7 @@ EntityKey = Tuple[str, str] EntityMapping = Dict[EntityKey, 'Entity'] """ Internal mapping for entities used for deduplication/merge/upsert. """ -_import_error_ignored_modules: Final[Set[str]] = {'bluetooth'} +_import_error_ignored_modules: Set[str] = {'bluetooth'} """ ImportError exceptions will be ignored for these entity submodules when imported dynamically. An ImportError for these modules means that some optional diff --git a/platypush/plugins/mqtt/__init__.py b/platypush/plugins/mqtt/__init__.py index cdb6e49078..3dc62e5e26 100644 --- a/platypush/plugins/mqtt/__init__.py +++ b/platypush/plugins/mqtt/__init__.py @@ -469,8 +469,9 @@ class MqttPlugin(RunnablePlugin): client.stop() del client - @staticmethod - def _response_callback(reply_topic: str, event: threading.Event, buffer: IO[bytes]): + def _response_callback( + self, reply_topic: str, event: threading.Event, buffer: IO[bytes] + ): """ A response callback that writes the response to an IOBuffer and stops the client loop. @@ -480,9 +481,15 @@ class MqttPlugin(RunnablePlugin): if msg.topic != reply_topic: return - buffer.write(msg.payload) - client.loop_stop() - event.set() + try: + buffer.write(msg.payload) + client.loop_stop() + except Exception as e: + self.logger.warning( + 'Could not write the response back to the MQTT client: %s', e + ) + finally: + event.set() return on_message diff --git a/platypush/plugins/mqtt/_client.py b/platypush/plugins/mqtt/_client.py index 5ef0c9d4d8..a82cd1ba89 100644 --- a/platypush/plugins/mqtt/_client.py +++ b/platypush/plugins/mqtt/_client.py @@ -2,14 +2,14 @@ from enum import IntEnum import logging import os import threading -from typing import Any, Callable, Dict, Final, Iterable, Optional, Union +from typing import Any, Callable, Dict, Iterable, Optional, Union import paho.mqtt.client as mqtt from platypush.config import Config MqttCallback = Callable[["MqttClient", Any, mqtt.MQTTMessage], Any] -DEFAULT_TIMEOUT: Final[int] = 30 +DEFAULT_TIMEOUT: int = 30 class MqttClient(mqtt.Client, threading.Thread): diff --git a/platypush/plugins/rss/__init__.py b/platypush/plugins/rss/__init__.py index e7ad1d1773..4df6a24625 100644 --- a/platypush/plugins/rss/__init__.py +++ b/platypush/plugins/rss/__init__.py @@ -72,7 +72,9 @@ class RssPlugin(RunnablePlugin): t = var.get(varname) if t: - return dateutil.parser.isoparse(t) + if not isinstance(t, datetime.datetime): + t = dateutil.parser.isoparse(t) + return t return None diff --git a/setup.py b/setup.py index b9ea662eb0..8919f97061 100755 --- a/setup.py +++ b/setup.py @@ -43,6 +43,11 @@ setup( 'migrations/alembic.ini', 'migrations/alembic/*', 'migrations/alembic/**/*', + 'install/**', + 'install/scripts/*', + 'install/scripts/**/*', + 'install/requirements/*', + 'install/docker/*', ], }, entry_points={