Pythonic and easy iCalendar library (rfc5545)

Overview

ics.py 0.8.0-dev : iCalendar for Humans

Original repository (GitHub) - Bugtracker and issues (GitHub) - PyPi package (ics) - Documentation (Read The Docs).

Apache 2 License

Ics.py is a pythonic and easy iCalendar library. Its goals are to read and write ics data in a developer friendly way.

iCalendar is a widely-used and useful format but not user friendly. Ics.py is there to give you the ability of creating and reading this format without any knowledge of it.

It should be able to parse every calendar that respects the rfc5545 and maybe some more… It also outputs rfc compliant calendars.

iCalendar (file extension .ics) is used by Google Calendar, Apple Calendar, Android and many more.

Ics.py is available for Python>=3.6 and is Apache2 Licensed.

Quickstart

$ pip install ics
from ics import Calendar, Event
c = Calendar()
e = Event()
e.name = "My cool event"
e.begin = '2014-01-01 00:00:00'
c.events.add(e)
c.events
# [<Event 'My cool event' begin:2014-01-01 00:00:00 end:2014-01-01 00:00:01>]
with open('my.ics', 'w') as my_file:
    my_file.writelines(c)
# and it's done !

More examples are available in the documentation.

Documentation

All the documentation is hosted on readthedocs.org and is updated automatically at every commit.

Contribute

Contribution are welcome of course! For more information and how to setup, see contributing.

Links

Parse ALL the calendars!
Comments
  • Remove arrow, transition to attrs and add Timespan

    Remove arrow, transition to attrs and add Timespan

    This implementation collects all time-related attributes of an event - begin, end/duration and precision - in a single, isolated and easy to test class. It also targets the three possible cases for time values - timezone-aware datetimes, floating datetimes (which are currently unsupported, for details see further down) and all-day dates (which are currently pretty buggy). Additionally to not doing anything implicitly (neither any fancy value conversion nor fancy indirect property access), it viciously guards the validity of its internal state. The validity of each of the 4 values representing the event time is highly depending upon the other values. Allowing mutation opens up easy ways of breaking validity - so the implementation is actually immutable, with each modification creating a new object and requiring a full revalidation of all 4 values together. As the times shouldn't be modified that often, having the optimization of mutability shouldn't be strictly necessary. Additionally, moving the functionality to its own class makes testing easier and keeps this quite complicated functionality clean from other concerns. All this makes the timespan handling easier to implement correctly, but unfortunately not easier to use. So I also started modifying the Event class to handle the interfacing in an user-friendly way and hide the complexity of timespans.

    This is by far not completely integrated in the rest of the library, as I first wanted to see where this approach might lead us and now also wanted to collect feedback. See below on how we might continue from hereon.

    Where did Arrow go?

    I first started out with the realisation that floor('day') doesn't suffice for date values, as we need to get rid of timezone:

    morning_1 = arrow.Arrow(2020, 1, 19, 8, 0, tzinfo="+01:00")
    morning_3 = arrow.Arrow(2020, 1, 19, 8, 0, tzinfo="+03:00")
    print(morning_1, morning_1.floor("day"))
    # > 2020-01-19T08:00:00+01:00 2020-01-19T00:00:00+01:00
    print(morning_3, morning_3.floor("day"))
    # > 2020-01-19T08:00:00+03:00 2020-01-19T00:00:00+03:00
    print(morning_1.floor("day") == morning_3.floor("day"))
    # > False
    

    Unsetting the timezone does strange things, as the constructor always interpolates tzinfo=None to UTC:

    midnight_None = arrow.Arrow(2020, 1, 19)
    midnight_None.tzinfo = None
    print(midnight_None, midnight_None.clone(), midnight_None.floor("day"))
    # > 2020-01-19T00:00:00 2020-01-19T00:00:00+00:00 2020-01-19T00:00:00+00:00
    print(midnight_None == midnight_None.clone())
    # > False
    print(midnight_None == midnight_None.floor("day"))
    # > False
    

    Trying to use arrow for naive (i.e. floating) timestamps by keeping tzinfo set to None is thus very hard. So we would need another variable to keep track of whether the tzinfo is intentionally set or should actually be None. This would require a lot of special casing, e.g. when comparing a timestamp with timezone +3 with one with UTC, as we need to check whether UTC actually means floating.

    To summarize, I'm not quite happy with the automatic timezone mangling that arrow does. It might be useful to do things better when you don't worry about timezones, but here we have to actually get timezones right ourselves without something automagically mangling them. Python's built-in datetime might be annoying, because it is a lot harder to use right and tends to throw exceptions (e.g. when comparing timezone-aware datetimes with timezone-naive/floating datetimes). But in those special cases guessing right automatically is hard. Additionally, these exception point us at places where we might need to handle things explicitly - e.g. when mixing timezone-aware datetimes, floating datetimes and all-day dates that don't have a timezone.

    As a result, for me, the selling points of arrow no longer outweigh its deficits. Too many modules and types is not an argument here, as this should be a library and not some prototype code that you are typing into the interpreter shell. Doing conversions automatically and not properly handling naive timestamps is the root cause for the above problems. And all the other features could also be implemented on top of plain old datetimes - actually the Arrow class is only a thin wrapper around the datetime class, adding some functions but no further information (!). As a result, my timespan implementation only uses the plain, old, but reliable datetime class.

    Further steps

    So, I tried to do a timespan implementation based on datetime and tried to cover all edge-cases I could come up with. For those that I didn't think of, it should trow an exception so that we can think of the proper way of handling it once it comes up, instead of it vanishing through some magic conversion resulting in probably wrong results.

    This should somewhat follow the zen of python (see import this)

    Explicit is better than implicit.
    [...]
    Errors should never pass silently.
    [...]
    In the face of ambiguity, refuse the temptation to guess.
    

    And now finally make_all_day looks good - see the quite extensive test for this function. Additionally, this functionality would now allow floating times properly, as they are not that different from dates. Actually, it should fix all the issues referenced in https://github.com/C4ptainCrunch/ics.py/issues/155#issuecomment-502993642. If we want to go this way, we would probably need to make changes in a few other places and think about breakages in the public API. But, this would also allow us to finally properly conserve floating events and VTIMEZONES when parsing and later exporting an .ics file. What also still needs testing is handling of events with different begin and end time zone - e.g. plane flights. But I'm confident that those will also work reliably, given that we are able to define the right expectations and guarantees we have/want in these cases.

    @C4ptainCrunch what's your opinion on this? Should we try to continue on this way, potentially removing arrow support in many places for the sake of correctness? I'd love to finally see this working properly and I could try to get a complete version with this new functionality working, if you also think that this is the way to go.

    opened by N-Coder 21
  • ENH: add support for calendar name

    ENH: add support for calendar name

    Closes #307

    • Add NAME and X-WR-CALNAME support.
    • X-WR-CALNAME is converted to NAME and X-WR-CALNAME is added in extras.
    • Default name is used when the field is not present.

    (For the backstory, I talked about this with @stefanv)

    opened by tupui 14
  • Add a Github action to publish to PyPI

    Add a Github action to publish to PyPI

    I'd like to automate the release process as much as possible to i'm not a bottleneck (and computer usually make less mistakes than humans) so i'm trying to build a package on every commit for master and publish it on the test PyPI. Then on every tag, push it to the production PyPI. I've already added a token to publish to production in the github settings. @N-Coder you are the admin of the test PyPI package. Could you add a token under TEST_PYPI_API_TOKEN please ?

    opened by C4ptainCrunch 13
  • Bug in v5.0 (but cannot upgrade to v7.0 because of parsing speed problem)

    Bug in v5.0 (but cannot upgrade to v7.0 because of parsing speed problem)

    Hi. I am currently using v5.0 because of parsing speed issues in v6.0 et v7.0 (see: https://github.com/ics-py/ics-py/issues/244).

    The bug I show below was fixed in v6 and v7. Being stuck to v5, I need help to find a workaround in my case.

    Consider this ical file original.ics:

    BEGIN:VCALENDAR
    X-WR-CALNAME:Perso
    X-WR-TIMEZONE:Europe/Paris
    PRODID:-//Google Inc//Google Calendar 70.9054//EN
    VERSION:2.0
    CALSCALE:GREGORIAN
    METHOD:PUBLISH
    BEGIN:VEVENT
    DTSTART:20190522T060000Z
    DTEND:20190522T133000Z
    DTSTAMP:20220320T185509Z
    UID:[email protected]
    CREATED:20190520T091318Z
    DESCRIPTION:
    LAST-MODIFIED:20190527T181058Z
    LOCATION:IUT\, BC\, Salle Pierre Andanson
    SEQUENCE:2
    STATUS:CONFIRMED
    SUMMARY:Garde
    TRANSP:OPAQUE
    BEGIN:VALARM
    ACTION:NONE
    TRIGGER;VALUE=DURATION:-PT1H
    DESCRIPTION:ignore me
    END:VALARM
    END:VEVENT
    END:VCALENDAR
    
    1. I create a calendar from reading this file: no problem.
    2. I write the calendar to a new file faulty.ics.
    3. I create a calendar from faulty.ics file.
    from ics import Calendar
    with open('original.ics', 'r') as f:
        c = Calendar(imports=f.read())
    with open('faulty.ics', 'w') as f:
        f.writelines(c)
    with open('faulty.ics', 'r') as f:
        c = Calendar(imports=f.read())
    

    I get this error : ics.parse.ParseError: No ':' in line 'None'

    Actually, here is the content of faulty.ics file:

    BEGIN:VCALENDAR
    X-WR-CALNAME:Perso
    X-WR-TIMEZONE:Europe/Paris
    PRODID:-//Google Inc//Google Calendar 70.9054//EN
    VERSION:2.0
    CALSCALE:GREGORIAN
    METHOD:PUBLISH
    BEGIN:VEVENT
    CREATED:20190520T091318Z
    SEQUENCE:2
    DTSTAMP:20220320T185509Z
    LAST-MODIFIED:20190527T181058Z
    DTSTART:20190522T060000Z
    DTEND:20190522T133000Z
    SUMMARY:Garde
    LOCATION:IUT\, BC\, Salle Pierre Andanson
    TRANSP:OPAQUE
    UID:[email protected]
    None
    STATUS:CONFIRMED
    END:VEVENT
    END:VCALENDAR
    

    The problem is in the fourth line from the end.

    I cannot figure out the exact origin of the bug nor the way to work it around. Again, I cannot upgrade to v7.0.

    Thank you in advance.

    opened by vinraspa 12
  • ParseError if emojis/unicode in description/text

    ParseError if emojis/unicode in description/text

    I try to load a shared calendar from a Nextcloud instance via requests. One of the calendar entries has emojis in the description, ics throws an exception when it comes accross the first emoji:

    The error:

    tatsu.exceptions.FailedToken: (1:27) expecting '\r\n' :
    DESCRIPTION:Hallo zusammen😊\n\nEndlich Ist es soweit....🙃😎😁\n\n
                              ^
    CRLF
    contentline
    start
    
    During handling of the above exception, another exception occurred:
    
    File "/usr/lib/python3.7/site-packages/ics/grammar/parse.py", line 78, in parse
        raise ParseError()
    ics.grammar.parse.ParseError
    

    The section of the ical:

    BEGIN:VEVENT
    CREATED:20190422T210447
    DTSTAMP:20190422T210447
    LAST-MODIFIED:20190422T210447
    UID:NTG0P2GYEMBOTMH04Z4OP
    SUMMARY:Party bei <redacted>
    CLASS:PUBLIC
    DESCRIPTION:Hallo zusammen😊\n\nEndlich Ist es soweit....🙃😎😁\n\n
    STATUS:CONFIRMED
    DTSTART;TZID=Europe/Berlin:20190601T140000
    DTEND;TZID=Europe/Berlin:20190601T235500
    END:VEVENT
    
    bug 
    opened by Bouni 12
  • V0.7 is much slower to parse large calendar feed then V0.5

    V0.7 is much slower to parse large calendar feed then V0.5

    I have the following code:

        resp = requests.get(ical_feed_url)
        if resp.status_code != 200:
            logger.error('> Error retrieving iCal feed!')
            return None
    
        try:
            print(f'begin parse {datetime.datetime.now()}')
            cal = ics.Calendar(resp.text)
            print(f'end parse {datetime.datetime.now()}')
        except Exception as e:
            logger.error('> Error parsing iCal data ({})'.format(e))
            return None
    

    I recently tried upgrading from 0.5 to 0.7 but found that it was much slower, and eats a ton more CPU. See my print logs from a few minutes apart on the same feed, same computer.

    V0.7 timing:

    begin parse 2020-05-09 18:08:26.872346
    end parse 2020-05-09 18:10:20.411268
    

    V0.5 timing:

    begin parse 2020-05-09 18:12:34.763552
    end parse 2020-05-09 18:12:38.981032
    

    I am using python 3.6.8, Ubuntu 16.04.

    Due to privacy concerns I'm not going to include the ical feed, but it has about 15,000 events in it. I am happy to run some tests or try things out if i get pointed in the right direction.

    opened by cfhowes 11
  • invert the regex matching contentline values to also allow emojis

    invert the regex matching contentline values to also allow emojis

    contributed by @Azhrei: "Inverting the REs and selecting the characters I don't want vs. those that I do, not only does the list get shorter but the other Unicode characters are implicitly allowed."

    Fixes #206, fixes #211

    opened by N-Coder 11
  • Automatic support for DTSTAMP

    Automatic support for DTSTAMP

    Hello,

    Total novice here, I'm afraid.

    When creating an all day event, using a start time and then converting to all day event, I can successfully generate an ics file containing multiple such events.

    However, this file doesn't validate and causes some problems eg importing natively into android calendar.

    The validation issue is because there is no DTSTAMP property in the VEVENT

    Looking at the source code (again, be gentle please, novice) this seems to be set when (and only when) the event.created thingy is set.

    However, this is a MANDATORY entry for this type of event (all day, anniversary or basically any VEVENT).

    See here: Linky

    Example ics file without DTSTAMP

    PRODID:ics.py - http://git.io/lLljaA
    VERSION:2.0
    BEGIN:VEVENT
    DTSTART;VALUE=DATE:20191002
    SUMMARY:Lazy Bed Day
    TRANSP:OPAQUE
    UID:[email protected]
    END:VEVENT
    BEGIN:VEVENT
    DTSTART;VALUE=DATE:20191001
    SUMMARY:Busy Frantic Day
    TRANSP:OPAQUE
    UID:[email protected]
    END:VEVENT
    END:VCALENDAR
    

    Obvs it would be nice if this mandatory entry was included by default.

    Ta

    feature request 
    opened by madflier 11
  • Email action for alarms

    Email action for alarms

    @C4ptainCrunch Hi, sorry for opening yet another issue when the last one has not even been resolved yet. What I wanted to ask is if you could implement the Email action in your code, for the following snippet, when you get the time to:

       @classmethod
        def get_type_from_action(cls, action_type):
            # TODO: Implement EMAIL action
            if action_type == 'DISPLAY':
                return DisplayAlarm
            elif action_type == 'AUDIO':
                return AudioAlarm
    
            raise ValueError('Invalid alarm action')
    

    If it is going to take a lot of time implementing the new feature, what would be the temporary solution to this error? Thanks in advance.

    AlarmFactory.get_type_from_action(action_type.value) File "/home/pi/.local/lib/python3.5/site-packages/ics/alarm.py", line 36, in get_type_from_action raise ValueError('Invalid alarm action') ValueError: Invalid alarm action
    
    bug 
    opened by aceisace 11
  • "%F" is not a valid strftime format

    After calling "make_all_day" on an event, and attempting to show the events on the screen, ics calls a 'strftime("%F")'.

    Unfortunately, "%F" is not a valid strftime format. See below for details:

    >>> e.make_all_day()
    >>> c.events
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Python27\lib\site-packages\ics\component.py", line 83, in __repr__
        return self.__urepr__().encode('utf-8') if PY2 else self.__urepr__()
      File "C:\Python27\lib\site-packages\ics\event.py", line 205, in __urepr__
        return "<all-day Event {}{}>".format(name, self.begin.strftime("%F"))
      File "C:\Python27\lib\site-packages\arrow\arrow.py", line 791, in strftime
        return self._datetime.strftime(format)
    ValueError: Invalid format string
    
    bug 
    opened by esitarski 10
  • Restructure documentation

    Restructure documentation

    This PR is a first draft for issue #220. It contains the following changes:

    • Create subdirectories for the four types howtos, tutorials, explanation, and reference.
    • Separate/sort existing documentation into these sub dirs.
    • If necessary, adapt title, split files to better fit into the structure.

    Marked it as "draft" for the time being as it's not finished and only the skeleton for our future documentation. It's also to make sure the structure is good enough before I move on and add more content.

    Some changes may seem radical. I'm sure there are probably better ways how to structure it, but it's a start so we can discuss the pros and cons. I'm sure we can improve it together! :smiley:

    There are still a lot of work to do:

    • I haven't found a good place for the advanced.rst file. Probably it needs to be rewritten and can be integrated into a tutorial, I'm not sure... :thinking:
    • Speaking of tutorials, I haven't included one yet. If we have a clearer picture of if and how this will work, we can add them later.
    • There are a lot of files and sections which can (and should be!) extended. I assume, we don't have to do it with one pull request, so we can gradually move on, if you think this structure is useful.
    • The API contains a warning: autodoc: failed to import class 'parse.Container' from module 'ics'; the following exception was raised: No module named 'ics.parse' and Duplicate explicit target name: "github thread". I leave that to someone else to fix it. :wink:
    Screenshot (click me to show)

    ics py-doc

    @C4ptainCrunch @N-Coder So what do you think? Could that work as a start? Anything you like/dislike? Let me know! :+1:

    opened by tomschr 9
  • [Question for Support]

    [Question for Support] "ValueError: Begin must be before end"

    Hi all,

    I want to parse my (really large calendar file): with an (also really old) backup of this calender, parsing events in python is working flawlessly. With the actual version of my calender however I get this error:

    "ValueError: Begin must be before end"

    As the file is that large as it is and my backup differs that much from the current one, I am not able to replicate the error by viewing at the differences of the files.

    Can someone please point me to the right direction of this error?

    Is it a syntax one or maybe a content problem?

    Thank you very much.

    Here the log of my flask app running ics-py in the background:

    ` File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\flask\app.py", line 2548, in call

    return self.wsgi_app(environ, start_response)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\flask\app.py", line 2528, in wsgi_app
    
    response = self.handle_exception(e)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\flask\app.py", line 2525, in wsgi_app
    
    response = self.full_dispatch_request()
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\flask\app.py", line 1822, in full_dispatch_request
    
    rv = self.handle_user_exception(e)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\flask\app.py", line 1820, in full_dispatch_request
    
    rv = self.dispatch_request()
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\flask\app.py", line 1796, in dispatch_request
    
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\app.py", line 34, in root
    
    events_today = radicale_get_events_today()
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\sub_calendar.py", line 34, in radicale_get_events_today
    
    radicale_cal = Calendar(requests.get(radicale_cal_url).text)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\icalendar.py", line 69, in __init__
    
    self._populate(containers[0])  # Use first calendar
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\component.py", line 59, in _populate
    
    parser(self, lines)  # Send a list or empty list
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\parsers\icalendar_parser.py", line 71, in parse_vevent
    
    calendar.events = set(map(event_factory, lines))
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\parsers\icalendar_parser.py", line 69, in event_factory
    
    return Event._from_container(x, tz=calendar._timezones)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\component.py", line 31, in _from_container
    
    k._populate(container)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\component.py", line 62, in _populate
    
    parser(self, lines[0])  # Send the element
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\parsers\event_parser.py", line 26, in parse_dtstart
    
    event.begin = iso_to_arrow(line, tz_dict)
    
    File "C:\Users\RE\Documents\Share\Python\myLandingPage\venv\lib\site-packages\ics\event.py", line 157, in begin
    
    raise ValueError('Begin must be before end')
    
    ValueError: Begin must be before end
    

    `

    opened by Raemsna 1
  • ValueError: A VEVENT must have at most one CATEGORIES: How to figure out at which VEVENT reading fails?

    ValueError: A VEVENT must have at most one CATEGORIES: How to figure out at which VEVENT reading fails?

    I'm using ics-py through https://github.com/prometheus42/libreoffice-ical-importer/blob/master/src/ical2csv.py . When trying to convert a calendar exported from Thunderbird, I get following error:

    src/ical2csv.py ~/Dokumente/Privat.ics Writing to CSV file: /home/me/Dokumente/Privat.ics.csv Reading iCalendar file... Traceback (most recent call last): File "src/ical2csv.py", line 91, in convert_ical_file() File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/click/core.py", line 1130, in call return self.main(*args, **kwargs) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) File "src/ical2csv.py", line 66, in convert_ical_file write_csv_file(read_ical_file(icalendar_file), csv_file) File "src/ical2csv.py", line 24, in read_ical_file c = Calendar(calendar_file.read()) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/ics/icalendar.py", line 69, in init self._populate(containers[0]) # Use first calendar File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/ics/component.py", line 59, in _populate parser(self, lines) # Send a list or empty list File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/ics/parsers/icalendar_parser.py", line 71, in parse_vevent calendar.events = set(map(event_factory, lines)) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/ics/parsers/icalendar_parser.py", line 69, in event_factory return Event._from_container(x, tz=calendar._timezones) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/ics/component.py", line 31, in _from_container k._populate(container) File "/home/me/Downloads/programme/libreoffice-ical-importer/LO-ICAL/lib/python3.8/site-packages/ics/component.py", line 54, in _populate raise ValueError( ValueError: A VEVENT must have at most one CATEGORIES

    I checked the file, all events have at most one category. How can I figure out at which VEVENT the import / reading of the calendar fails? Why isn't this information output by default?

    StackOverflow 
    opened by Johann-Tree 1
  • collection of parse errors from iCal ics files

    collection of parse errors from iCal ics files

    Hi, coming back to importing 1000s of ics files from iCal (see #290), I had these 60 files that produced errors with ics v0.7, from which 55 don't parse with ics==0.7.2 (from pip), Python 3.10.4 on MacOS 10.14. I managed to extract and redact them here for a collection of test cases (see also #236): failed-redacted.zip I hope this is still interesting and relevant to you. Thanks!


    There are numerous

    sequence item 0: expected str instance, bool found
    A VCALENDAR must have at least one PRODID
    

    but also these errors:

    Expecting end of text 
    TRIGGER with no VALUE not recognized as DURATION or as DATE-TIME
    Could not match input '71039402-2147483642T0000' to any of the following formats: YYYY-MM-DDTHHmm, YYYY-M-DDTHHmm, YYYY-M-DTHHmm, YYYY/MM/DDTHHmm, YYYY/M/DDTHHmm, YYYY/M/DTHHmm, YYYY.MM.DDTHHmm, YYYY.M.DDTHHmm, YYYY.M.DTHHmm, YYYYMMDDTHHmm, YYYY-DDDDTHHmm, YYYYDDDDTHHmm, YYYY-MMTHHmm, YYYY/MMTHHmm, YYYY.MMTHHmm, YYYYTHHmm, WTHHmm.
    

    and

    SSTFTY20191231T052200.ics: Multiple calendars in one file are not supported by this method. Use ics.Calendar.parse_multiple()
    

    which is simply due to the file being empty =-)

    The full log:

    try 0 of 60: ./040000008200E00074C5B7101A82E008000000007067DA359592D601000000000000000010000000EFEF234147C9584EB744604A2FC68350.ics
    INFO:ics2caldav:Found 1 event in ./040000008200E00074C5B7101A82E008000000007067DA359592D601000000000000000010000000EFEF234147C9584EB744604A2FC68350.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./040000008200E00074C5B7101A82E008000000007067DA359592D601000000000000000010000000EFEF234147C9584EB744604A2FC68350.ics: sequence item 0: expected str instance, bool found
    try 1 of 60: ./05E4A836-2E44-4FC3-981E-04F6A9D448F9.ics
    INFO:ics2caldav:Found 1 event in ./05E4A836-2E44-4FC3-981E-04F6A9D448F9.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./05E4A836-2E44-4FC3-981E-04F6A9D448F9.ics: sequence item 0: expected str instance, bool found
    try 2 of 60: ./0684B1F7-E4C5-40D1-9D26-9086D137E6EB.ics
    can't import ./0684B1F7-E4C5-40D1-9D26-9086D137E6EB.ics: A VCALENDAR must have at least one PRODID
    try 3 of 60: ./08A35DC5-3B8C-4F6B-8763-6D8440774838.ics
    INFO:ics2caldav:Found 1 event in ./08A35DC5-3B8C-4F6B-8763-6D8440774838.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./08A35DC5-3B8C-4F6B-8763-6D8440774838.ics: sequence item 0: expected str instance, bool found
    try 4 of 60: ./08D8E349-6A28-4B20-AE7A-6FE814AC9D61.ics
    INFO:ics2caldav:Found 1 event in ./08D8E349-6A28-4B20-AE7A-6FE814AC9D61.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./08D8E349-6A28-4B20-AE7A-6FE814AC9D61.ics: sequence item 0: expected str instance, bool found
    try 5 of 60: ./0D68B14D-D695-46B8-BFA2-0D5D4DD26A07.ics
    INFO:ics2caldav:Found 1 event in ./0D68B14D-D695-46B8-BFA2-0D5D4DD26A07.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./0D68B14D-D695-46B8-BFA2-0D5D4DD26A07.ics: sequence item 0: expected str instance, bool found
    try 6 of 60: ./13CEEFBF-231C-45F8-A8C5-DC684DD9E74B.ics
    INFO:ics2caldav:Found 1 event in ./13CEEFBF-231C-45F8-A8C5-DC684DD9E74B.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    INFO:ics2caldav:done.
    try 7 of 60: ./172BF130-3B06-4FD8-B86F-03232058963E.ics
    INFO:ics2caldav:Found 1 event in ./172BF130-3B06-4FD8-B86F-03232058963E.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./172BF130-3B06-4FD8-B86F-03232058963E.ics: At line 25: TRIGGER with no VALUE not recognized as DURATION or as DATE-TIME
    try 8 of 60: ./1CCFDAB7-D1C3-4273-979C-3157A95D047C.ics
    INFO:ics2caldav:Found 1 event in ./1CCFDAB7-D1C3-4273-979C-3157A95D047C.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./1CCFDAB7-D1C3-4273-979C-3157A95D047C.ics: sequence item 0: expected str instance, bool found
    try 9 of 60: ./1DD27557-6481-4A50-B958-6ACBAF97776F.ics
    INFO:ics2caldav:Found 1 event in ./1DD27557-6481-4A50-B958-6ACBAF97776F.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    INFO:ics2caldav:done.
    try 10 of 60: ./28048FF1-783D-4AA3-AC26-EDCA57732C20.ics
    can't import ./28048FF1-783D-4AA3-AC26-EDCA57732C20.ics: A VCALENDAR must have at least one PRODID
    try 11 of 60: ./29F367B6-69B3-48B3-AA85-D7C2DA3B96F5.ics
    can't import ./29F367B6-69B3-48B3-AA85-D7C2DA3B96F5.ics: A VCALENDAR must have at least one PRODID
    try 12 of 60: ./2BA41550-6A97-4FB4-8DBA-3EE65C195987.ics
    INFO:ics2caldav:Found 1 event in ./2BA41550-6A97-4FB4-8DBA-3EE65C195987.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./2BA41550-6A97-4FB4-8DBA-3EE65C195987.ics: sequence item 0: expected str instance, bool found
    try 13 of 60: ./40748B86-F2EE-41FE-AEB4-B98BC05AD6FF.ics
    INFO:ics2caldav:Found 1 event in ./40748B86-F2EE-41FE-AEB4-B98BC05AD6FF.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./40748B86-F2EE-41FE-AEB4-B98BC05AD6FF.ics: sequence item 0: expected str instance, bool found
    try 14 of 60: ./[email protected]
    INFO:ics2caldav:Found 1 event in ./[email protected]
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./[email protected]: sequence item 0: expected str instance, bool found
    try 15 of 60: ./5220D659-D029-4510-8557-B95ED56DF64E.ics
    INFO:ics2caldav:Found 1 event in ./5220D659-D029-4510-8557-B95ED56DF64E.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./5220D659-D029-4510-8557-B95ED56DF64E.ics: sequence item 0: expected str instance, bool found
    try 16 of 60: ./54E33CA4-FE2F-4EEF-B8DA-720B7AC41A5B.ics
    can't import ./54E33CA4-FE2F-4EEF-B8DA-720B7AC41A5B.ics: A VCALENDAR must have at least one PRODID
    try 17 of 60: ./5F423589-B5E6-4375-8427-4A0CCDDF9A15.ics
    INFO:ics2caldav:Found 1 event in ./5F423589-B5E6-4375-8427-4A0CCDDF9A15.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./5F423589-B5E6-4375-8427-4A0CCDDF9A15.ics: sequence item 0: expected str instance, bool found
    try 18 of 60: ./5F4B5732-F392-4BD0-8F5E-919C153DA89B.ics
    INFO:ics2caldav:Found 1 event in ./5F4B5732-F392-4BD0-8F5E-919C153DA89B.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    INFO:ics2caldav:done.
    try 19 of 60: ./5FC8C860-D3D2-491C-B9E3-C48B96D8233E.ics
    can't import ./5FC8C860-D3D2-491C-B9E3-C48B96D8233E.ics: A VCALENDAR must have at least one PRODID
    try 20 of 60: ./[email protected]
    INFO:ics2caldav:Found 1 event in ./[email protected]
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./[email protected]: sequence item 0: expected str instance, bool found
    try 21 of 60: ./6B820F5B-5607-4F6E-B64D-D4697D022218.ics
    INFO:ics2caldav:Found 1 event in ./6B820F5B-5607-4F6E-B64D-D4697D022218.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./6B820F5B-5607-4F6E-B64D-D4697D022218.ics: sequence item 0: expected str instance, bool found
    try 22 of 60: ./700AEEFE-C1F9-11D9-9088-000A95B6556C.ics
    can't import ./700AEEFE-C1F9-11D9-9088-000A95B6556C.ics: A VCALENDAR must have at least one PRODID
    try 23 of 60: ./74706F77-E06D-46EC-9A43-FED74E4D9915.ics
    can't import ./74706F77-E06D-46EC-9A43-FED74E4D9915.ics: A VCALENDAR must have at least one PRODID
    try 24 of 60: ./77DC0AD3-28B8-4FDB-A923-230589DA1D54.ics
    INFO:ics2caldav:Found 1 event in ./77DC0AD3-28B8-4FDB-A923-230589DA1D54.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./77DC0AD3-28B8-4FDB-A923-230589DA1D54.ics: At line 23: TRIGGER with no VALUE not recognized as DURATION or as DATE-TIME
    try 25 of 60: ./7B0F90E4-6025-4CA2-9C4E-7830C8C31F45.ics
    INFO:ics2caldav:Found 1 event in ./7B0F90E4-6025-4CA2-9C4E-7830C8C31F45.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./7B0F90E4-6025-4CA2-9C4E-7830C8C31F45.ics: sequence item 0: expected str instance, bool found
    try 26 of 60: ./7C211635-E33D-4677-84A4-08BFCFC41315.ics
    INFO:ics2caldav:Found 1 event in ./7C211635-E33D-4677-84A4-08BFCFC41315.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./7C211635-E33D-4677-84A4-08BFCFC41315.ics: At line 23: TRIGGER with no VALUE not recognized as DURATION or as DATE-TIME
    try 27 of 60: ./81490F13-C1F9-11D9-9088-000A95B6556C.ics
    can't import ./81490F13-C1F9-11D9-9088-000A95B6556C.ics: A VCALENDAR must have at least one PRODID
    try 28 of 60: ./8DB75888-F83E-4945-A60B-9CAE15A6263B.ics
    INFO:ics2caldav:Found 1 event in ./8DB75888-F83E-4945-A60B-9CAE15A6263B.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./8DB75888-F83E-4945-A60B-9CAE15A6263B.ics: sequence item 0: expected str instance, bool found
    try 29 of 60: ./8F633CDB-0CF3-4E79-83D9-9AB1A06A5495.ics
    INFO:ics2caldav:Found 1 event in ./8F633CDB-0CF3-4E79-83D9-9AB1A06A5495.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./8F633CDB-0CF3-4E79-83D9-9AB1A06A5495.ics: sequence item 0: expected str instance, bool found
    try 30 of 60: ./93D2779A-7C4A-4BDC-9495-F94D0D990FC3.ics
    INFO:ics2caldav:Found 1 event in ./93D2779A-7C4A-4BDC-9495-F94D0D990FC3.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./93D2779A-7C4A-4BDC-9495-F94D0D990FC3.ics: sequence item 0: expected str instance, bool found
    try 31 of 60: ./95E283DE-C1F9-11D9-9088-000A95B6556C.ics
    can't import ./95E283DE-C1F9-11D9-9088-000A95B6556C.ics: A VCALENDAR must have at least one PRODID
    try 32 of 60: ./9AA4ADA9-192E-4464-AB29-0D3D7729C0A7.ics
    can't import ./9AA4ADA9-192E-4464-AB29-0D3D7729C0A7.ics: A VCALENDAR must have at least one PRODID
    try 33 of 60: ./9F5BDF81-E68C-4A06-BF72-0777C2E782EB.ics
    INFO:ics2caldav:Found 1 event in ./9F5BDF81-E68C-4A06-BF72-0777C2E782EB.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./9F5BDF81-E68C-4A06-BF72-0777C2E782EB.ics: sequence item 0: expected str instance, bool found
    try 34 of 60: ./A1F10D50-0B57-4E7E-9847-5F4C66D33BEA.ics
    INFO:ics2caldav:Found 1 event in ./A1F10D50-0B57-4E7E-9847-5F4C66D33BEA.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    INFO:ics2caldav:done.
    try 35 of 60: ./A967B916-BB4D-4BA9-A695-1E81A0764C6D.ics
    INFO:ics2caldav:Found 1 event in ./A967B916-BB4D-4BA9-A695-1E81A0764C6D.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./A967B916-BB4D-4BA9-A695-1E81A0764C6D.ics: sequence item 0: expected str instance, bool found
    try 36 of 60: ./B020C56B-992F-47C6-9F93-8D89A0C58A68.ics
    INFO:ics2caldav:Found 1 event in ./B020C56B-992F-47C6-9F93-8D89A0C58A68.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./B020C56B-992F-47C6-9F93-8D89A0C58A68.ics: sequence item 0: expected str instance, bool found
    try 37 of 60: ./B242B18A-2708-4287-B633-31F0C7C677B1.ics
    INFO:ics2caldav:Found 1 event in ./B242B18A-2708-4287-B633-31F0C7C677B1.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./B242B18A-2708-4287-B633-31F0C7C677B1.ics: sequence item 0: expected str instance, bool found
    try 38 of 60: ./B4476634-6DBC-4CA1-A479-36861974B8F6.ics
    INFO:ics2caldav:Found 1 event in ./B4476634-6DBC-4CA1-A479-36861974B8F6.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./B4476634-6DBC-4CA1-A479-36861974B8F6.ics: sequence item 0: expected str instance, bool found
    try 39 of 60: ./B572C289-F7E0-4FB2-A2C2-7FFFC35AA14C.ics
    INFO:ics2caldav:Found 1 event in ./B572C289-F7E0-4FB2-A2C2-7FFFC35AA14C.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./B572C289-F7E0-4FB2-A2C2-7FFFC35AA14C.ics: sequence item 0: expected str instance, bool found
    try 40 of 60: ./B91D3B8B-ABFB-464B-9E34-3DD16124BE84.ics
    INFO:ics2caldav:Found 1 event in ./B91D3B8B-ABFB-464B-9E34-3DD16124BE84.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./B91D3B8B-ABFB-464B-9E34-3DD16124BE84.ics: At line 27: TRIGGER with no VALUE not recognized as DURATION or as DATE-TIME
    try 41 of 60: ./C0AE8E73-95A1-4362-A498-A038C8AC60B0.ics
    INFO:ics2caldav:Found 1 event in ./C0AE8E73-95A1-4362-A498-A038C8AC60B0.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    INFO:ics2caldav:done.
    try 42 of 60: ./C409CEA4-F9A8-4B4D-88E7-6EBED054F9E1.ics
    INFO:ics2caldav:Found 1 event in ./C409CEA4-F9A8-4B4D-88E7-6EBED054F9E1.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./C409CEA4-F9A8-4B4D-88E7-6EBED054F9E1.ics: sequence item 0: expected str instance, bool found
    try 43 of 60: ./D09096E9-9F53-421E-81E0-C53E84D897E3.ics
    can't import ./D09096E9-9F53-421E-81E0-C53E84D897E3.ics: A VCALENDAR must have at least one PRODID
    try 44 of 60: ./D1618653-98A7-4108-8C7B-33181D1BE177.ics
    can't import ./D1618653-98A7-4108-8C7B-33181D1BE177.ics: Could not match input '71039402-2147483642T0000' to any of the following formats: YYYY-MM-DDTHHmm, YYYY-M-DDTHHmm, YYYY-M-DTHHmm, YYYY/MM/DDTHHmm, YYYY/M/DDTHHmm, YYYY/M/DTHHmm, YYYY.MM.DDTHHmm, YYYY.M.DDTHHmm, YYYY.M.DTHHmm, YYYYMMDDTHHmm, YYYY-DDDDTHHmm, YYYYDDDDTHHmm, YYYY-MMTHHmm, YYYY/MMTHHmm, YYYY.MMTHHmm, YYYYTHHmm, WTHHmm.
    try 45 of 60: ./D41BB115-D484-45ED-8882-6D465C5348ED.ics
    INFO:ics2caldav:Found 1 event in ./D41BB115-D484-45ED-8882-6D465C5348ED.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./D41BB115-D484-45ED-8882-6D465C5348ED.ics: sequence item 0: expected str instance, bool found
    try 46 of 60: ./D68C9C6C-3C61-4D15-AC4E-96D442DAE755.ics
    INFO:ics2caldav:Found 1 event in ./D68C9C6C-3C61-4D15-AC4E-96D442DAE755.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./D68C9C6C-3C61-4D15-AC4E-96D442DAE755.ics: sequence item 0: expected str instance, bool found
    try 47 of 60: ./D733A5B6-232F-4D56-8DCD-8E35EA0FE92E.ics
    INFO:ics2caldav:Found 1 event in ./D733A5B6-232F-4D56-8DCD-8E35EA0FE92E.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./D733A5B6-232F-4D56-8DCD-8E35EA0FE92E.ics: sequence item 0: expected str instance, bool found
    try 48 of 60: ./D83CCC2D-3945-4396-B371-4059FEAFF2A8.ics
    can't import ./D83CCC2D-3945-4396-B371-4059FEAFF2A8.ics: A VCALENDAR must have at least one PRODID
    try 49 of 60: ./DB3524BD-C1F9-11D9-9088-000A95B6556C.ics
    can't import ./DB3524BD-C1F9-11D9-9088-000A95B6556C.ics: A VCALENDAR must have at least one PRODID
    try 50 of 60: ./E2C142CD-55AD-425B-99C6-1572C1FC5D23.ics
    INFO:ics2caldav:Found 1 event in ./E2C142CD-55AD-425B-99C6-1572C1FC5D23.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./E2C142CD-55AD-425B-99C6-1572C1FC5D23.ics: sequence item 0: expected str instance, bool found
    try 51 of 60: ./E49E00C6-23AD-450F-948A-1BB73CC331E4.ics
    INFO:ics2caldav:Found 1 event in ./E49E00C6-23AD-450F-948A-1BB73CC331E4.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./E49E00C6-23AD-450F-948A-1BB73CC331E4.ics: At line 29: TRIGGER with no VALUE not recognized as DURATION or as DATE-TIME
    try 52 of 60: ./E6A3AEF2-4719-4EBB-84B8-638F6B084088.ics
    INFO:ics2caldav:Found 1 event in ./E6A3AEF2-4719-4EBB-84B8-638F6B084088.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./E6A3AEF2-4719-4EBB-84B8-638F6B084088.ics: sequence item 0: expected str instance, bool found
    try 53 of 60: ./E890109E-2B0F-45D8-9363-EC935EB9D980.ics
    INFO:ics2caldav:Found 1 event in ./E890109E-2B0F-45D8-9363-EC935EB9D980.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./E890109E-2B0F-45D8-9363-EC935EB9D980.ics: sequence item 0: expected str instance, bool found
    try 54 of 60: ./EA3567FA-AE8E-46A7-9FC3-8609121BDB4C.ics
    INFO:ics2caldav:Found 1 event in ./EA3567FA-AE8E-46A7-9FC3-8609121BDB4C.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./EA3567FA-AE8E-46A7-9FC3-8609121BDB4C.ics: sequence item 0: expected str instance, bool found
    try 55 of 60: ./EF24596A-CCE2-47AB-8147-B8BF9E633C73.ics
    INFO:ics2caldav:Found 1 event in ./EF24596A-CCE2-47AB-8147-B8BF9E633C73.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./EF24596A-CCE2-47AB-8147-B8BF9E633C73.ics: sequence item 0: expected str instance, bool found
    try 56 of 60: ./EF794EB1-D59B-40C4-9E10-FC3E272F16C0.ics
    INFO:ics2caldav:Found 1 event in ./EF794EB1-D59B-40C4-9E10-FC3E272F16C0.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./EF794EB1-D59B-40C4-9E10-FC3E272F16C0.ics: sequence item 0: expected str instance, bool found
    try 57 of 60: ./EFF47965-42AE-48B5-8FDB-4E536F667CA2.ics
    can't import ./EFF47965-42AE-48B5-8FDB-4E536F667CA2.ics: (1:707) Expecting end of text :
    DESCRIPTION:Bonjour\,\n\nNous avons donc convenu d'un rendez-vous le jeudi xx octobre à 10h avec xxxxxxx xxxx.\n\nVoici les directions pour aller place d'italie (bureau 59).\nhttp://www.di.ens.fr/~fbach/livret_accueil_visiteurs_externes_.pdf\n\nIl souhaiterait disposer d'un document quelques jours avant l'entretien pour pouvoir commencer à l'examiner. Je lui ai dit que nous étions toujours en phase de rédaction mais que nous lui enverrions une version au début de la semaine du rendez-vous (celle du 11 octobre donc).\n\nThierry\, penses-tu pouvoir m'envoyer une version dans le cours de la semaine prochaine ? Cela nous permettra de :\n\n- regrouper la partie "structuration multi-échelle" de "Methodes et moyens envisages\, etat de l'art" avec "articulation"\, que nous sommes en train de finaliser avec xxxxx.\n\n- commencer à formaliser la partie "objectifs".\n\nMerci à vous.\n\nIanis\n\n\n Le 30/09/2010 13:06\, Ianis Lallemand a écrit :\n> Bonjour\,\n>\n> xxxxxxx xxxx me propose que nous nous voyions le matin du 14 ou du 15 octobre. Y a-t-il une date qui vous arrange davantage ?\nok\n\nle 14 ca me va\n\n>\n> Son bureau est situé à l'INRIA\, près de la place d'Italie.\n>\n> Ianis\n\n\n-- \nxxxxxxx xxxxèxxx\n\n___________\n\nMAchine Learning and Information REtrieval Team\nLIP6 - Computer Science Lab\nUniversité Pierre et Marie Curie\n\n\n!!! Nouvelle adresse !!!\n\nAdress: xxx xxxxx\, Bureau xxx\n    4 Place Jussieu\n    75005\, Paris\nTel :     +33 x xx xx xx xx\nWeb:     http://www-connex.lip6.fr/~xxxxxxxx/\n\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ^
    start
    try 58 of 60: ./F7DCA9FB-68E1-4B33-A820-8D2ABEBA0AA1.ics
    INFO:ics2caldav:Found 1 event in ./F7DCA9FB-68E1-4B33-A820-8D2ABEBA0AA1.ics
    INFO:ics2caldav:Using https://nubo.ircam.fr:443/remote.php/dav/calendars/151f0ddc-1a03-102e-9946-ab434506958c/test/
    can't import ./F7DCA9FB-68E1-4B33-A820-8D2ABEBA0AA1.ics: sequence item 0: expected str instance, bool found
    try 59 of 60: ./SSTFTY20191231T052200.ics
    can't import ./SSTFTY20191231T052200.ics: Multiple calendars in one file are not supported by this method. Use ics.Calendar.parse_multiple()
    ---------finished 60 of 60
    
    -------- 55 of 60 failed:
     ['./040000008200E00074C5B7101A82E008000000007067DA359592D601000000000000000010000000EFEF234147C9584EB744604A2FC68350.ics', './05E4A836-2E44-4FC3-981E-04F6A9D448F9.ics', './0684B1F7-E4C5-40D1-9D26-9086D137E6EB.ics', './08A35DC5-3B8C-4F6B-8763-6D8440774838.ics', './08D8E349-6A28-4B20-AE7A-6FE814AC9D61.ics', './0D68B14D-D695-46B8-BFA2-0D5D4DD26A07.ics', './172BF130-3B06-4FD8-B86F-03232058963E.ics', './1CCFDAB7-D1C3-4273-979C-3157A95D047C.ics', './28048FF1-783D-4AA3-AC26-EDCA57732C20.ics', './29F367B6-69B3-48B3-AA85-D7C2DA3B96F5.ics', './2BA41550-6A97-4FB4-8DBA-3EE65C195987.ics', './40748B86-F2EE-41FE-AEB4-B98BC05AD6FF.ics', './[email protected]', './5220D659-D029-4510-8557-B95ED56DF64E.ics', './54E33CA4-FE2F-4EEF-B8DA-720B7AC41A5B.ics', './5F423589-B5E6-4375-8427-4A0CCDDF9A15.ics', './5FC8C860-D3D2-491C-B9E3-C48B96D8233E.ics', './[email protected]', './6B820F5B-5607-4F6E-B64D-D4697D022218.ics', './700AEEFE-C1F9-11D9-9088-000A95B6556C.ics', './74706F77-E06D-46EC-9A43-FED74E4D9915.ics', './77DC0AD3-28B8-4FDB-A923-230589DA1D54.ics', './7B0F90E4-6025-4CA2-9C4E-7830C8C31F45.ics', './7C211635-E33D-4677-84A4-08BFCFC41315.ics', './81490F13-C1F9-11D9-9088-000A95B6556C.ics', './8DB75888-F83E-4945-A60B-9CAE15A6263B.ics', './8F633CDB-0CF3-4E79-83D9-9AB1A06A5495.ics', './93D2779A-7C4A-4BDC-9495-F94D0D990FC3.ics', './95E283DE-C1F9-11D9-9088-000A95B6556C.ics', './9AA4ADA9-192E-4464-AB29-0D3D7729C0A7.ics', './9F5BDF81-E68C-4A06-BF72-0777C2E782EB.ics', './A967B916-BB4D-4BA9-A695-1E81A0764C6D.ics', './B020C56B-992F-47C6-9F93-8D89A0C58A68.ics', './B242B18A-2708-4287-B633-31F0C7C677B1.ics', './B4476634-6DBC-4CA1-A479-36861974B8F6.ics', './B572C289-F7E0-4FB2-A2C2-7FFFC35AA14C.ics', './B91D3B8B-ABFB-464B-9E34-3DD16124BE84.ics', './C409CEA4-F9A8-4B4D-88E7-6EBED054F9E1.ics', './D09096E9-9F53-421E-81E0-C53E84D897E3.ics', './D1618653-98A7-4108-8C7B-33181D1BE177.ics', './D41BB115-D484-45ED-8882-6D465C5348ED.ics', './D68C9C6C-3C61-4D15-AC4E-96D442DAE755.ics', './D733A5B6-232F-4D56-8DCD-8E35EA0FE92E.ics', './D83CCC2D-3945-4396-B371-4059FEAFF2A8.ics', './DB3524BD-C1F9-11D9-9088-000A95B6556C.ics', './E2C142CD-55AD-425B-99C6-1572C1FC5D23.ics', './E49E00C6-23AD-450F-948A-1BB73CC331E4.ics', './E6A3AEF2-4719-4EBB-84B8-638F6B084088.ics', './E890109E-2B0F-45D8-9363-EC935EB9D980.ics', './EA3567FA-AE8E-46A7-9FC3-8609121BDB4C.ics', './EF24596A-CCE2-47AB-8147-B8BF9E633C73.ics', './EF794EB1-D59B-40C4-9E10-FC3E272F16C0.ics', './EFF47965-42AE-48B5-8FDB-4E536F667CA2.ics', './F7DCA9FB-68E1-4B33-A820-8D2ABEBA0AA1.ics', './SSTFTY20191231T052200.ics']
    
    -------- 5 of 60 uploaded
    
    opened by diemoschwarz 7
Releases(v0.7.2)
  • v0.7.2(Jul 6, 2022)

  • v0.7.1(Jun 30, 2022)

    This release contains a few minor changes and introduces deprecations for features that will be removed in 0.8.

    Deprecation:

    • Add warnings about breaking changes in v0.8 to Calendar.str() and .iter().

    Minor changes:

    • Add a dependency on attrs.
    • Remove the upper bound on the version of arrow.
    • Backport optimizations for TatSu parser from 0.8

    Bug fix:

    • Fix "falsey" (bool(x) is False) alarm trigger (i.e. timedelta(0)) not being serialized #269
    Source code(tar.gz)
    Source code(zip)
  • v0.7(Feb 29, 2020)

    Special thanks to @N-Coder for making 0.7 happen!

    Breaking changes:

    • Remove useless day argument from Timeline.today()
    • Attendee and Organizer attributes are now classes and can not be set to str.

    Minor changes:

    • Add support for Python 3.8
    • Ensure VERSION is the first line of a VCALENDAR and PRODID is second.

    Bug fixes:

    • Fix regression in the support of emojis (and other unicode chars) while parsing. (Thanks @Azhrei)
    • Fix a bug preventing an EmailAlarm to be instantiated
    • Fix multiple bugs in Organizer and Attendees properties. (See #207, #209, #217, #218)
    Source code(tar.gz)
    Source code(zip)
  • v0.6(Feb 29, 2020)

    Major changes:

    • Drop support for Python 3.5. Python 3.7 is now distributed in both Ubuntu LTS and Debian stable, the PSF is providing only security fixes for 3.5. It's time to move on !
    • Add 竜 TatSu as a dependency. This enables us to have a real PEG parser and not a combination of regexes and string splitting.
    • The previously private ._unused is now renamed to public .extra and becomes documented.
    • The Alarms have been deeply refactored (see the docs for more detail) and many bugs have been fixed.

    Minor changes:

    • Add mypy
    • Add GEO (thanks @johnnoone !)
    • Calendar.parse_multiple() now accepts streams of multiple calendars.
    • Calendar() does not accept iterables to be parsed anymore (only a single string)
    • Add support for classification (#177, thanks @PascalBru !)
    • Support arrow up to <0.15
    • Cleanup the logic for component parsers/serializers: they are now in their own files and are registered via the Meta class

    Bug fixes:

    • Events no longer have the TRANSP property by default (Fixes #190)
    • Fix parsing of quoted values as well as escaped semi-columns (#185 and #193)
    Source code(tar.gz)
    Source code(zip)
  • v0.5(Jul 23, 2019)

    This is the first version to be Python 3 only.

    This release happens a bit more than a year after the previous one and was made to distribute latest changes to everyone and remove the confusion between master and PyPi.

    Please note that it may contain (lot of) bugs and not be fully polished. This is still alpha quality software!

    Highlights and breaking changes:

    • Drop support for Python 2, support Python from 3.5 to 3.8
    • Upgrade arrow to 0.11 and fix internal call to arrow to specify the string format (thanks @muffl0n, @e-c-d and @chauffer)

    Additions:

    • LAST-MODIFIED attribute support (thanks @Timic3)
    • Support for Organizers to Events (thanks @danieltellez and kayluhb)
    • Support for Attendees to Events (thanks @danieltellez and kayluhb)
    • Support for Event and Todo status (thanks @johnnoone)

    Bugfixes:

    • Fix all-day events lasting multiple days by using a DTEND with a date and not a datetime (thanks @raspbeguy)
    • Fix off by one error on the DTEND on all day events (issues #92 and #150)
    • Fix SEQUENCE in VTIMEZONE error
    • Fixed NONE type support for Alarms (thanks @zagnut007)

    Known issues:

    • There are known problems with all-day events. This GitHub issue summarizes them well: https://github.com/C4ptainCrunch/ics.py/issues/155. You can expect them to be fixed in 0.6 but not before.

    Misc:

    • Improve TRIGGER DURATION parsing logic (thanks @jessejoe)
    • Event equality now checks all fields (except uid)
    • Alarms in Event and Todo are now consistently lists and not a mix between set() and list()

    Thanks also to @t00n, @aureooms, @chauffer, @seants, @davidjb, @xaratustrah, @Philiptpp

    Source code(tar.gz)
    Source code(zip)
  • v0.4(May 18, 2018)

    Last version to support Python 2.7 and 3.3.

    This version is by far the one with the most contributors, thank you !

    Highlights: - Todo/VTODO support (thanks @tgamauf) - Add event arithmetics (thanks @guyzmo) - Support for alarms/VALARM (thanks @rkeilty) - Support for categories (thanks @perette)

    Misc: - Make the parser work with tabbed whitespace (thanks @mrmadcow) - Better error messages (thanks @guyzmo) - Support input with missing VERSION (thanks @prashnts) - Support for Time Transparency/TRANSP (thanks @GMLudo) - All day events not omit the timezone (thanks @Trii) - Multi-day events fixes (thanks @ConnyOnny) - Fix TZID drop when VTIMEZONE is empty (thanks @ConnyOnny) - Better test coverage (thanks @aureooms)

    Thank you also to @davidjb, @etnarek, @jammon

    Source code(tar.gz)
    Source code(zip)
    ics-0.4-py2.7.egg(22.48 KB)
    ics-0.4-py3.6.egg(52.47 KB)
    ics-0.4-py2.py3-none-any.whl(26.68 KB)
  • v0.3.1(May 18, 2018)

  • v0.3(May 18, 2018)

    • Events in an EventList() are now always sorted
    • Freeze the version of Arrow (they made backwards-incompatible changes)
    • Add a lot of tests
    • Lots of small bugfixes
    Source code(tar.gz)
    Source code(zip)
  • v0.1(May 18, 2018)

Owner
ics.py
Umbrella organization for ics.py related repositories
ics.py
A Pythonic client for the official https://data.gov.gr API.

pydatagovgr An unofficial Pythonic client for the official data.gov.gr API. Aims to be an easy, intuitive and out-of-the-box way to: find data publish

Ilias Antonopoulos 40 Nov 10, 2022
A Pythonic wrapper for the Wikipedia API

Wikipedia Wikipedia is a Python library that makes it easy to access and parse data from Wikipedia. Search Wikipedia, get article summaries, get data

Jonathan Goldsmith 2.5k Dec 28, 2022
The successor of GeoSnipe, a pythonic Minecraft username sniper based on AsyncIO.

OneSnipe The successor of GeoSnipe, a pythonic Minecraft username sniper based on AsyncIO. Documentation View Documentation Features • Mojang & Micros

null 1 Jan 14, 2022
The Main Pythonic Version Of Twig Using Nextcord

The Main Pythonic Version Of Twig Using Nextcord

null 8 Mar 21, 2022
Pythonic wrapper for the Aladhan prayer times API.

aladhan.py is a pythonic wrapper for the Aladhan prayer times API. Installation Python 3.6 or higher is required. To Install aladhan.py with pip: pip

HETHAT 8 Aug 17, 2022
Easy-apply-bot - A LinkedIn Easy Apply bot to help with my job search.

easy-apply-bot A LinkedIn Easy Apply bot to help with my job search. Getting Started First, clone the repository somewhere onto your computer, or down

Matthew Alunni 5 Dec 9, 2022
A fast, easy to set up telegram userbot running Python 3 which uses fork of the Telethon Library.

forked from friendly-telegram/friendly-telegram Friendly Telegram Userbot A fast, easy to set up telegram userbot running Python 3 which uses fork of

GeekTG 75 Jan 4, 2023
A modern, easy to use, feature-rich, and async ready API wrapper improved and revived from original discord.py.

A Python API wrapper that is improved and revived from the original discord.py

Orion 19 Nov 6, 2021
ChairBot is designed to be reliable, easy to use, and lightweight for every user, and easliy to code add-ons for ChairBot.

ChairBot is designed to be reliable, easy to use, and lightweight for every user, and easliy to code add-ons for ChairBot. Ready to see whats possible with ChairBot?

null 1 Nov 8, 2021
A simple and easy to use musicbot in python and it uses lavalink.

Lavalink-MusicBot A simple and easy to use musicbot in python and it uses lavalink. ✨ Features plays music in your discord server well thats it i gues

Afnan 1 Nov 29, 2021
A Python interface to AFL, allowing for easy injection of testcases and other functionality.

Fuzzer This module provides a Python wrapper for interacting with AFL (American Fuzzy Lop: http://lcamtuf.coredump.cx/afl/). It supports starting an A

Shellphish 614 Dec 26, 2022
A Simple, Easy to use and light-weight Pyrogram Userbot

Nexa Userbot A Simple, Easy to use and light-weight Pyrogram Userbot Deploy With Heroku With VPS (Local) Clone Nexa-Userbot repository git clone https

I'm Not A Bot #Left_TG 28 Nov 12, 2022
This is a very easy to use tool developed in python that will search for free courses from multiple sites including youtube and enroll in the ones in which it can.

Free-Course-Hunter-and-Enroller This is a very easy to use tool developed in python that will search for free courses from multiple sites including yo

Zain 12 Nov 12, 2022
Create Fast and easy image datasets using reddit

Reddit-Image-Scraper Reddit Reddit is an American Social news aggregation, web content rating, and discussion website. Reddit has been devided by topi

Wasin Silakong 4 Apr 27, 2022
Easy and simple, Telegram Bot to Show alert when some edits a message in Group

Edit-Message-Alert Just a simple bot to show alert when someone edits a message sent by them, Just 17 Lines of Code These codes are for those who incu

Nuhman Pk 6 Dec 15, 2021
Autodrive is designed to make it as easy as possible to interact with the Google Drive and Sheets APIs via Python

Autodrive Autodrive is designed to make it as easy as possible to interact with the Google Drive and Sheets APIs via Python. It is especially designed

Chris Larabee 1 Oct 2, 2021
A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python.

A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. Key Features Modern Pythonic API using async and await

Senpai Development 4 Nov 5, 2021
Check your bot status automatically using userbot, simply and easy

Status Checker Userbot check your bot status automatically using userbot, simply and easy. Mandatory Vars API_ID : Telegram API_ID, get it from my.tel

ALBY 6 Feb 20, 2022
An Advanced Python Playing Card Module that makes creating playing card games simple and easy!

playingcards.py An Advanced Python Playing Card Module that makes creating playing card games simple and easy! Features Easy to Understand Class Objec

Blake Potvin 5 Aug 30, 2022