core: Local Calendar: FileNotFoundError for Time Zone

The problem

When restarting Home Assistant or reloading a local calendar, an error is logged for a missing time zone:

FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib/python3.10/site-packages/tzdata/zoneinfo/UTC-06:00'
During handling of the above exception, another exception occurred:
...
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC-06:00'

What version of Home Assistant Core has the issue?

2023.2.3

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

Local Calendar

Link to integration documentation on our website

https://www.home-assistant.io/integrations/local_calendar/

Diagnostics information

No response

Example YAML snippet

No response

Anything in the logs that might be useful for us?

Error while setting up local_calendar platform for calendar
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/zoneinfo/_common.py", line 12, in load_tzdata
    return importlib.resources.open_binary(package_name, resource_name)
  File "/usr/local/lib/python3.10/importlib/resources.py", line 46, in open_binary
    return reader.open_resource(resource)
  File "/usr/local/lib/python3.10/importlib/abc.py", line 433, in open_resource
    return self.files().joinpath(resource).open('rb')
  File "/usr/local/lib/python3.10/pathlib.py", line 1119, in open
    return self._accessor.open(self, mode, buffering, encoding, errors,
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib/python3.10/site-packages/tzdata/zoneinfo/UTC-06:00'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 293, in _async_setup_platform
    await asyncio.shield(task)
  File "/usr/src/homeassistant/homeassistant/components/local_calendar/calendar.py", line 42, in async_setup_entry
    calendar = IcsCalendarStream.calendar_from_ics(ics)
  File "/usr/local/lib/python3.10/site-packages/ical/calendar_stream.py", line 74, in calendar_from_ics
    stream = cls.from_ics(content)
  File "/usr/local/lib/python3.10/site-packages/ical/calendar_stream.py", line 61, in from_ics
    return cls.parse_obj(result)
  File "pydantic/main.py", line 527, in pydantic.main.BaseModel.parse_obj
  File "pydantic/main.py", line 340, in pydantic.main.BaseModel.__init__
  File "pydantic/main.py", line 1077, in pydantic.main.validate_model
  File "pydantic/fields.py", line 895, in pydantic.fields.ModelField.validate
  File "pydantic/fields.py", line 928, in pydantic.fields.ModelField._validate_sequence_like
  File "pydantic/fields.py", line 1094, in pydantic.fields.ModelField._validate_singleton
  File "pydantic/fields.py", line 884, in pydantic.fields.ModelField.validate
  File "pydantic/fields.py", line 1101, in pydantic.fields.ModelField._validate_singleton
  File "pydantic/fields.py", line 1148, in pydantic.fields.ModelField._apply_validators
  File "pydantic/class_validators.py", line 318, in pydantic.class_validators._generic_validator_basic.lambda13
  File "pydantic/main.py", line 712, in pydantic.main.BaseModel.validate
  File "pydantic/main.py", line 340, in pydantic.main.BaseModel.__init__
  File "pydantic/main.py", line 1077, in pydantic.main.validate_model
  File "pydantic/fields.py", line 895, in pydantic.fields.ModelField.validate
  File "pydantic/fields.py", line 928, in pydantic.fields.ModelField._validate_sequence_like
  File "pydantic/fields.py", line 1094, in pydantic.fields.ModelField._validate_singleton
  File "pydantic/fields.py", line 884, in pydantic.fields.ModelField.validate
  File "pydantic/fields.py", line 1101, in pydantic.fields.ModelField._validate_singleton
  File "pydantic/fields.py", line 1148, in pydantic.fields.ModelField._apply_validators
  File "pydantic/class_validators.py", line 318, in pydantic.class_validators._generic_validator_basic.lambda13
  File "pydantic/main.py", line 712, in pydantic.main.BaseModel.validate
  File "/usr/local/lib/python3.10/site-packages/ical/event.py", line 249, in __init__
    super().__init__(**data)
  File "pydantic/main.py", line 340, in pydantic.main.BaseModel.__init__
  File "pydantic/main.py", line 1051, in pydantic.main.validate_model
  File "/usr/local/lib/python3.10/site-packages/ical/component.py", line 117, in parse_property_values
    validated = [cls._parse_property(field_types, prop) for prop in value]
  File "/usr/local/lib/python3.10/site-packages/ical/component.py", line 117, in <listcomp>
    validated = [cls._parse_property(field_types, prop) for prop in value]
  File "/usr/local/lib/python3.10/site-packages/ical/component.py", line 136, in _parse_property
    return cls._parse_single_property(sub_type, prop)
  File "/usr/local/lib/python3.10/site-packages/ical/component.py", line 162, in _parse_single_property
    return decoder(prop)
  File "/usr/local/lib/python3.10/site-packages/ical/types/date_time.py", line 40, in __parse_property_value__
    timezone = zoneinfo.ZoneInfo(tzid)
  File "/usr/local/lib/python3.10/zoneinfo/_common.py", line 24, in load_tzdata
    raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC-06:00'

Additional information

No response

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 22 (10 by maintainers)

Most upvoted comments

btw as a temporary workaround, if you are stuck and need a quick fix, you can edit the ics file (though maybe save a backup!) and remove the ;TDZID... part. If you have a string like DTSTART:20230206T220152 it will be interpreted as local time.

Thank you for the detail. I was able to reproduce this problem locally in a test and am considering options for fixes.