From c7f193d4b1ff683a8ab273a3ad5e8435f6c25437 Mon Sep 17 00:00:00 2001 From: Niko Fink Date: Sat, 11 Apr 2020 16:23:19 +0200 Subject: [PATCH] bugfixes --- doc/event-cmp.rst | 4 ++-- src/ics/alarm.py | 2 +- src/ics/converter/special.py | 3 +-- src/ics/timespan.py | 1 + src/ics/valuetype/base.py | 7 ++++--- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/event-cmp.rst b/doc/event-cmp.rst index b2b605b..f532676 100644 --- a/doc/event-cmp.rst +++ b/doc/event-cmp.rst @@ -261,8 +261,8 @@ timezone specified: >>> dt_ny = dt(2020, 2, 20, 20, 20, tzinfo=gettz("America/New York")) >>> dt_utc = dt(2020, 2, 20, 20, 20, tzinfo=tzutc()) >>> dt_local = dt(2020, 2, 20, 20, 20, tzinfo=tzlocal()) - >>> dt_local.tzinfo.tzname(dt_local), dt_local.tzinfo.utcoffset(dt_local) - ('+02', datetime.timedelta(seconds=7200)) + >>> dt_local.tzinfo.tzname(dt_local), dt_local.tzinfo.utcoffset(dt_local).total_seconds() + ('+02', 7200.0) >>> dt_utc < dt_ny True >>> dt_local < dt_utc # this always holds as tzlocal is +2:00 (i.e. European Summer Time) diff --git a/src/ics/alarm.py b/src/ics/alarm.py index 8a76c27..d74ca13 100644 --- a/src/ics/alarm.py +++ b/src/ics/alarm.py @@ -59,7 +59,7 @@ class AudioAlarm(BaseAlarm): A calendar event VALARM with AUDIO option. """ - attach: Union[URL, bytes] = attr.ib(default="") # type: ignore + attach: Union[URL, bytes, None] = attr.ib(default=None) @property def action(self): diff --git a/src/ics/converter/special.py b/src/ics/converter/special.py index aca6265..2d96283 100644 --- a/src/ics/converter/special.py +++ b/src/ics/converter/special.py @@ -26,8 +26,7 @@ def populate(self, component: "Component", item: ContainerItem, context: Context item = item.clone([ line for line in item if - not line.name.startswith("X-") and - not line.name == "SEQUENCE" + not line.name.startswith("X-") and not line.name == "SEQUENCE" ]) fake_file = StringIO() diff --git a/src/ics/timespan.py b/src/ics/timespan.py index 722cb3b..b57a0f0 100644 --- a/src/ics/timespan.py +++ b/src/ics/timespan.py @@ -55,6 +55,7 @@ def normalize(self, value): # noqa return value +# using datetime.min might lead to problems when doing timezone conversions / comparisions (e.g. by substracting an 1 hour offset) CMP_DATETIME_NONE_DEFAULT = datetime(1900, 1, 1, 0, 0) CMP_NORMALIZATION = Normalization(normalize_floating=True, normalize_with_tz=False, replacement=tzlocal) diff --git a/src/ics/valuetype/base.py b/src/ics/valuetype/base.py index 280b55c..883b84c 100644 --- a/src/ics/valuetype/base.py +++ b/src/ics/valuetype/base.py @@ -7,14 +7,15 @@ T = TypeVar('T') -class ValueConverter(abc.ABC, Generic[T]): +class ValueConverter(Generic[T], abc.ABC): BY_NAME: Dict[str, "ValueConverter"] = {} BY_TYPE: Dict[Type, "ValueConverter"] = {} INST: "ValueConverter" def __init_subclass__(cls) -> None: - super().__init_subclass__() - if not inspect.isabstract(cls): + super(ValueConverter, cls).__init_subclass__() + # isabstract(ValueConverter) == False on python 3.6 + if not inspect.isabstract(cls) and cls.parse is not ValueConverter.parse: cls.INST = cls() ValueConverter.BY_NAME[cls.INST.ics_type] = cls.INST ValueConverter.BY_TYPE.setdefault(cls.INST.python_type, cls.INST)