diff options
author | CoprDistGit <infra@openeuler.org> | 2023-06-20 08:35:29 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-06-20 08:35:29 +0000 |
commit | b5129b60440d756d95d0355cc18c513443489bd9 (patch) | |
tree | 9cf0c236d7bce706e78c84573d4ad9afb730a9b5 | |
parent | 145c4600467265b53f2fc4a8cd292afbff8c99b5 (diff) |
automatic import of python-ionicalopeneuler20.03
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-ionical.spec | 1035 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 1037 insertions, 0 deletions
@@ -0,0 +1 @@ +/ionical-0.5.13.tar.gz diff --git a/python-ionical.spec b/python-ionical.spec new file mode 100644 index 0000000..29d24fe --- /dev/null +++ b/python-ionical.spec @@ -0,0 +1,1035 @@ +%global _empty_manifest_terminate_build 0 +Name: python-ionical +Version: 0.5.13 +Release: 1 +Summary: command line tool for tracking ical changes +License: MIT +URL: https://github.com/danyul/ionical +Source0: https://mirrors.aliyun.com/pypi/web/packages/9e/bb/7af9655ee53b70cbaf206851aa39d5982a0e294bb104d9a59b13e7661677/ionical-0.5.13.tar.gz +BuildArch: noarch + +Requires: python3-icalendar +Requires: python3-pytz +Requires: python3-recurring-ical-events +Requires: python3-toml +Requires: python3-black +Requires: python3-mypy +Requires: python3-flake8 +Requires: python3-flake8-import-order +Requires: python3-sphinx +Requires: python3-recommonmark +Requires: python3-pytest +Requires: python3-pytest + +%description + +# ionical: Keep an eye on ical! + + +- **ionical** is a command line tool for tracking schedule changes + in iCalendar feeds (downloadable .ics files): + - Download and compare sets of iCalendar files obtained on + different dates to generate changelogs of added/removed events. + - View current schedules, optionally filtered by start date + or event summary text. + - Classify events based on user-specified criteria + (e.g., categorize events whose start time falls between + range Xpm-Ypm as being "Workshift A" events, and those with + start times in a different range as "Workshift B" events). + - Export filtered events from calendars to CSV files, + using user-specified filter criteria (e.g., workshifts) + and user-specified formatting. +- Limitations: + - ionical only deals with iCalendar start times + and summary text fields, and ignores other fields. + This proves adequate for many simple use cases (e.g., it was + designed to track changes to employee schedules on + [Amion](https://amion.com/), and has worked well for that). For iCalendar management + involving additional fields or more complex use cases, you'll need to + look at other tools (or submit a pull request! :) ). + + + +## Installing via pip: +``` +$ pip install ionical +$ ionical +``` +- The first time you run ionical there will be no + ionical_config.toml file present, and you'll be + prompted to generate one (in the current directory). + Once it is created, you can add the names and URLs + for calendars you want to track/monitor, and specify + multilple other configuration options. + + +## Installing for development from GitHub: +``` +$ git clone https://github.com/danyul/ionical +$ cd ionical +$ python3 -m venv env +$ source env/bin/activate +$ pip install -e ".[dev]" +$ python -m ionical +``` +- If on Windows, replace: + - **'source env/bin/activate'** with **'.\env\Scripts\activate'** + - **'python3'** with **'python'** + + +## Command line usage ('ionical -h' output): +``` + + +Usage: ionical [-h] [-v] [-V] + [-f CONFIG_DIRECTORY] [-d ICS_DIR] + [-g] [-s] [-l [#_COMPARISONS]] [-c [CSV_FILE]] + [-i NAME [NAME ...]] + [-a DATE_OR_NUMBER] [-b DATE_OR_NUMBER] [-t TEXT [TEXT ...]] + +Keep an eye on ical! ionical is a CLI tool to track iCalendar changes. + +Help/About: + -h, --help Print help message, then exit. + -v, --verbose Increase the level of printed feeedback. + -V, --version Print version, then exit. + +File Locations: + Specify expected locations for config files and calendar downloads. + + -f CONFIG_DIRECTORY Directory where config file ionical_config.toml located. + This file will contain basic calendar information + (names, URLs for .ics files, and timezones) and allows + various additional configuration options. + See README file for an example, or run 'ionical' to + generate a sample config file which may then be edited. + (default: current directory) + + -d ICS_DIR Directory for downloading/accessing .ics files. + (default: current directory) + + +Actions: + One or more action options MUST be specified. + + -g, --get_today Download current .ics files and label them with today's + date. This will be done prior to other actions. + (If this is left unspecified, operations will only use + .ics files that have been previously downloaded.) + + -s, --show Display events from most recent ical file version for + each calendar. + + -l [#_COMPARISONS] Show changelogs comparing calendar versions from + multiple dates. Optionally, specify the number of + prior versions (per each calendar) for which to show + comparison changelogs. (If left unspecified, + #_COMPARISONS default is 2.) + + -c [CSV_FILE] Export calendar events to csv. + + +Calendar Filters: + Restrict all actions to a subset of calendars. + + -i NAME [NAME ...] Only operate on calendars with a specified NAME. + (If -i not specified, operate on every calendar + listed in ionical_config.toml.) + + +Event Filters: + Filter events shown in changelogs, schedule displays + + -a DATE_OR_NUMBER Only include events that start AFTER a specified date. + (I.e., exclude events starting before the date.) + Value must be EITHER a date in format YYYY-MM-DD, or + a positive integer representing # of days in the past + (If option unspecified, default behavior is to exclude + any events starting prior to 1 day ago.) + + -b DATE_OR_NUMBER Only include events that start BEFORE a specified date. + (I.e., exclude events starting on or after the date.) + Value must be EITHER a date in format YYYY-MM-DD, or + a positive integer representing # of days in the future. + (If option unspecified, default behavior is to + have no upper limit on event dates.) + + -t TEXT [TEXT ...] Only include events whose summary text includes words + that match at least one TEXT item. TEXT items can be + either a single word or phrases comprised of words and + spaces. If the latter, you must enclose TEXT within + quotation marks. + (If option not specified, no text filters are applied.) + +``` + + + +## ionical configuration file: +``` +# ionical_config.toml + +title = "ionical configuration file" +verbose = true + +# Note: All options that can be specified on the command line may +# alternatively be specified in this config file. For example, +# uncommenting 'get_today = true' (below) has the same effect as running +# 'ionical -g' (i.e., today's ics files will be downloaded). Likewise, +# uncommenting 'export_csv = ["CAL_1_NAME"]' is equivalent to running +# ionical using the argument/parameter '-i CAL_1_NAME'. +# +# Note: If configuration is specified both in this config file AND via +# a command line argument, the command line argument takes precedence, and +# the information from the config file is ignored. + +[actions] + # restrict_to = ["CAL_1_NAME"] + # get_today = true + # show_schedule = true + # show_changelog = true + # num_changelogs = 2 + # export_csv = true + +[filters] + # earliest = 2020-11-01 + # latest = 2022-06-30 + # summary_text = ["search text 1", "search text two"] + + +[calendars] + + [calendars.CAL1_NAME] + description = "CAL1_LONG_NAME" + url = "http://url_to_ics_download_for_CAL_1.ics" + tz = "US/Eastern" # or other timezone in pytz format, for CAL1 + + [calendars.CAL2_NAME] + description = "CAL2_LONG_NAME" + url = "http://url_to_ics_download_for_CAL_2.ics" + tz = "US/Mountain" # or other timezone in pytz format, for CAL2 + + +[event_classifications] + [event_classifications.by_start_time] + [event_classifications.by_start_time.example_time_category] + + Morning = [ + [5, 12], # Any event starting between 5am and 12pm + ] # is categorized as "Morning" + Afternoon = [ + [12, 16], # Any event starting between 12p and 4pm + ] # is categorized as "Afternoon" + Evening = [ + [16, 20], # Any event starting between 4pm and 8pm + ] # is categorized as "Evening" + Night = [ + [20, 24], # Any event that starts between 8pm + [ 0, 4], # and 4am is categorized as "Night" + ] + All-Day = "missing" # If no start time, categorize as "All-Day" + Other = "default" # All other events (in this case, only + # events starting between 4 and 5 am) will + # be categorized as "Unspecified". + + +[csv] + file = "ionical_export_default_csv_filename.csv" + include_empty_dates = false + grouping = "example_time_category" + order = ["Morning", "Afternoon"] + format = "My morning events: {0} \n My afternoon events: {1}" + text_if_not_present = "I AM AVAILABLE" + + [csv.substitutions] + "Secret spy meeting with Carl" = "Going to the zoo" + "Present shopping to suprise JoJo" = "Flossing the cat" + +# You can tweak the below to change display formatting +[formatting] + + [formatting.schedule_view] # For displaying schedules (-s option): + + date_fmt = "%a, %b %d %Y" + time_fmt = "at %I:%M%p" + time_replacements = {" 0" = " ", "(0" = "(", "AM" = "am", "PM" = "pm"} + time_group = "example_time_category" + time_group_fmt = "{:>} Time" + + event_summary = " {0:16} {1:10} ({2:<}) {3:30}" + + # Meanings for event_summary fields: + # 0: date (further formatted by date_fmt variable) + # 1: time (further formatted by time_fmt and/or time_replacements) + # 2: user_defined time grouping (further formatted by time_group_fmt) + # 3: event summary text + + + [formatting.changelog] # For displaying changelogs (-l option): + + date_fmt = "%a, %b %d %Y" + time_fmt = " %I%p" + time_replacements = {" 0" = " ", "(0" = "(", "AM" = "am", "PM" = "pm"} + + change_report = " {label:10}{name:18}{start_str:19} {summary:30} [comp vers:{compare_date}]\\n" + + # Meanings for change_report fields: + # label : "ADD" if an event has been added or "REMOVE" if removed + # (modifying a schedule's time or event summary will + # show up as a combination of a removal and an addition). + # name : The Full Name of a calendar. + # start_str : A string representing an event's start date and time. + # summary: : The event's summary text + # compare_date : The date of the second-most-recentics file for this + # calendar, against which the changelog is being compared. + + +``` + + - Timezones are in pytz format, e.g., "US/Eastern". + Listing of pytz timezones [can be found here](https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones). + - The calendar **NAME**: + - Serves as an ID when asking ionical (via -i option) + to restrict actions to a subset of calendars. + - Serves as the leftmost part of the filename for + downloaded ics files. + - Shouldn't have spaces or non-alphanumeric characters. + - The calendar **LONG NAME**: + - Is used for display purposes. + + +## Note on filename format for downloaded ics files: + + Downloaded .ics files have a filename format of + ABC123__20200314.ics, where "ABC123" is a name + identifier. (A reasonable name for a calendar + which tracks an employee's work schedule might + be a last name or an employee ID number.) Names + should contain only alphanumeric characters. + + "20200314" indicates that this particular version + of the calendar was downloaded on March 14, 2020. + + +# Libraries used + +- [icalendar](https://pypi.org/project/icalendar/) +- [pytz](https://pypi.org/project/pytz/) +- [recurring_ical_events](https://pypi.org/project/recurring-ical-events/) + (which, in turn, uses [python-dateutil](https://pypi.org/project/python-dateutil/)) +- [toml](https://pypi.org/project/toml/) + +# Related projects + +- [icalevents](https://github.com/irgangla/icalevents) +- [gcalcii](https://github.com/insanum/gcalcli) +- [vobject](https://pypi.org/project/vobject/) + + +# 0.1.0 +Initial release + +# 0.2.0 (12/8/2020) +- Substantial help message cleanup +- Changed/renamed multiple CLI options + +# 0.2.5 (12/9/2020) +- Google Calendar event viewing working + +# 0.3.0 +- Removed hacky csv functionality for now + + + +%package -n python3-ionical +Summary: command line tool for tracking ical changes +Provides: python-ionical +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-ionical + +# ionical: Keep an eye on ical! + + +- **ionical** is a command line tool for tracking schedule changes + in iCalendar feeds (downloadable .ics files): + - Download and compare sets of iCalendar files obtained on + different dates to generate changelogs of added/removed events. + - View current schedules, optionally filtered by start date + or event summary text. + - Classify events based on user-specified criteria + (e.g., categorize events whose start time falls between + range Xpm-Ypm as being "Workshift A" events, and those with + start times in a different range as "Workshift B" events). + - Export filtered events from calendars to CSV files, + using user-specified filter criteria (e.g., workshifts) + and user-specified formatting. +- Limitations: + - ionical only deals with iCalendar start times + and summary text fields, and ignores other fields. + This proves adequate for many simple use cases (e.g., it was + designed to track changes to employee schedules on + [Amion](https://amion.com/), and has worked well for that). For iCalendar management + involving additional fields or more complex use cases, you'll need to + look at other tools (or submit a pull request! :) ). + + + +## Installing via pip: +``` +$ pip install ionical +$ ionical +``` +- The first time you run ionical there will be no + ionical_config.toml file present, and you'll be + prompted to generate one (in the current directory). + Once it is created, you can add the names and URLs + for calendars you want to track/monitor, and specify + multilple other configuration options. + + +## Installing for development from GitHub: +``` +$ git clone https://github.com/danyul/ionical +$ cd ionical +$ python3 -m venv env +$ source env/bin/activate +$ pip install -e ".[dev]" +$ python -m ionical +``` +- If on Windows, replace: + - **'source env/bin/activate'** with **'.\env\Scripts\activate'** + - **'python3'** with **'python'** + + +## Command line usage ('ionical -h' output): +``` + + +Usage: ionical [-h] [-v] [-V] + [-f CONFIG_DIRECTORY] [-d ICS_DIR] + [-g] [-s] [-l [#_COMPARISONS]] [-c [CSV_FILE]] + [-i NAME [NAME ...]] + [-a DATE_OR_NUMBER] [-b DATE_OR_NUMBER] [-t TEXT [TEXT ...]] + +Keep an eye on ical! ionical is a CLI tool to track iCalendar changes. + +Help/About: + -h, --help Print help message, then exit. + -v, --verbose Increase the level of printed feeedback. + -V, --version Print version, then exit. + +File Locations: + Specify expected locations for config files and calendar downloads. + + -f CONFIG_DIRECTORY Directory where config file ionical_config.toml located. + This file will contain basic calendar information + (names, URLs for .ics files, and timezones) and allows + various additional configuration options. + See README file for an example, or run 'ionical' to + generate a sample config file which may then be edited. + (default: current directory) + + -d ICS_DIR Directory for downloading/accessing .ics files. + (default: current directory) + + +Actions: + One or more action options MUST be specified. + + -g, --get_today Download current .ics files and label them with today's + date. This will be done prior to other actions. + (If this is left unspecified, operations will only use + .ics files that have been previously downloaded.) + + -s, --show Display events from most recent ical file version for + each calendar. + + -l [#_COMPARISONS] Show changelogs comparing calendar versions from + multiple dates. Optionally, specify the number of + prior versions (per each calendar) for which to show + comparison changelogs. (If left unspecified, + #_COMPARISONS default is 2.) + + -c [CSV_FILE] Export calendar events to csv. + + +Calendar Filters: + Restrict all actions to a subset of calendars. + + -i NAME [NAME ...] Only operate on calendars with a specified NAME. + (If -i not specified, operate on every calendar + listed in ionical_config.toml.) + + +Event Filters: + Filter events shown in changelogs, schedule displays + + -a DATE_OR_NUMBER Only include events that start AFTER a specified date. + (I.e., exclude events starting before the date.) + Value must be EITHER a date in format YYYY-MM-DD, or + a positive integer representing # of days in the past + (If option unspecified, default behavior is to exclude + any events starting prior to 1 day ago.) + + -b DATE_OR_NUMBER Only include events that start BEFORE a specified date. + (I.e., exclude events starting on or after the date.) + Value must be EITHER a date in format YYYY-MM-DD, or + a positive integer representing # of days in the future. + (If option unspecified, default behavior is to + have no upper limit on event dates.) + + -t TEXT [TEXT ...] Only include events whose summary text includes words + that match at least one TEXT item. TEXT items can be + either a single word or phrases comprised of words and + spaces. If the latter, you must enclose TEXT within + quotation marks. + (If option not specified, no text filters are applied.) + +``` + + + +## ionical configuration file: +``` +# ionical_config.toml + +title = "ionical configuration file" +verbose = true + +# Note: All options that can be specified on the command line may +# alternatively be specified in this config file. For example, +# uncommenting 'get_today = true' (below) has the same effect as running +# 'ionical -g' (i.e., today's ics files will be downloaded). Likewise, +# uncommenting 'export_csv = ["CAL_1_NAME"]' is equivalent to running +# ionical using the argument/parameter '-i CAL_1_NAME'. +# +# Note: If configuration is specified both in this config file AND via +# a command line argument, the command line argument takes precedence, and +# the information from the config file is ignored. + +[actions] + # restrict_to = ["CAL_1_NAME"] + # get_today = true + # show_schedule = true + # show_changelog = true + # num_changelogs = 2 + # export_csv = true + +[filters] + # earliest = 2020-11-01 + # latest = 2022-06-30 + # summary_text = ["search text 1", "search text two"] + + +[calendars] + + [calendars.CAL1_NAME] + description = "CAL1_LONG_NAME" + url = "http://url_to_ics_download_for_CAL_1.ics" + tz = "US/Eastern" # or other timezone in pytz format, for CAL1 + + [calendars.CAL2_NAME] + description = "CAL2_LONG_NAME" + url = "http://url_to_ics_download_for_CAL_2.ics" + tz = "US/Mountain" # or other timezone in pytz format, for CAL2 + + +[event_classifications] + [event_classifications.by_start_time] + [event_classifications.by_start_time.example_time_category] + + Morning = [ + [5, 12], # Any event starting between 5am and 12pm + ] # is categorized as "Morning" + Afternoon = [ + [12, 16], # Any event starting between 12p and 4pm + ] # is categorized as "Afternoon" + Evening = [ + [16, 20], # Any event starting between 4pm and 8pm + ] # is categorized as "Evening" + Night = [ + [20, 24], # Any event that starts between 8pm + [ 0, 4], # and 4am is categorized as "Night" + ] + All-Day = "missing" # If no start time, categorize as "All-Day" + Other = "default" # All other events (in this case, only + # events starting between 4 and 5 am) will + # be categorized as "Unspecified". + + +[csv] + file = "ionical_export_default_csv_filename.csv" + include_empty_dates = false + grouping = "example_time_category" + order = ["Morning", "Afternoon"] + format = "My morning events: {0} \n My afternoon events: {1}" + text_if_not_present = "I AM AVAILABLE" + + [csv.substitutions] + "Secret spy meeting with Carl" = "Going to the zoo" + "Present shopping to suprise JoJo" = "Flossing the cat" + +# You can tweak the below to change display formatting +[formatting] + + [formatting.schedule_view] # For displaying schedules (-s option): + + date_fmt = "%a, %b %d %Y" + time_fmt = "at %I:%M%p" + time_replacements = {" 0" = " ", "(0" = "(", "AM" = "am", "PM" = "pm"} + time_group = "example_time_category" + time_group_fmt = "{:>} Time" + + event_summary = " {0:16} {1:10} ({2:<}) {3:30}" + + # Meanings for event_summary fields: + # 0: date (further formatted by date_fmt variable) + # 1: time (further formatted by time_fmt and/or time_replacements) + # 2: user_defined time grouping (further formatted by time_group_fmt) + # 3: event summary text + + + [formatting.changelog] # For displaying changelogs (-l option): + + date_fmt = "%a, %b %d %Y" + time_fmt = " %I%p" + time_replacements = {" 0" = " ", "(0" = "(", "AM" = "am", "PM" = "pm"} + + change_report = " {label:10}{name:18}{start_str:19} {summary:30} [comp vers:{compare_date}]\\n" + + # Meanings for change_report fields: + # label : "ADD" if an event has been added or "REMOVE" if removed + # (modifying a schedule's time or event summary will + # show up as a combination of a removal and an addition). + # name : The Full Name of a calendar. + # start_str : A string representing an event's start date and time. + # summary: : The event's summary text + # compare_date : The date of the second-most-recentics file for this + # calendar, against which the changelog is being compared. + + +``` + + - Timezones are in pytz format, e.g., "US/Eastern". + Listing of pytz timezones [can be found here](https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones). + - The calendar **NAME**: + - Serves as an ID when asking ionical (via -i option) + to restrict actions to a subset of calendars. + - Serves as the leftmost part of the filename for + downloaded ics files. + - Shouldn't have spaces or non-alphanumeric characters. + - The calendar **LONG NAME**: + - Is used for display purposes. + + +## Note on filename format for downloaded ics files: + + Downloaded .ics files have a filename format of + ABC123__20200314.ics, where "ABC123" is a name + identifier. (A reasonable name for a calendar + which tracks an employee's work schedule might + be a last name or an employee ID number.) Names + should contain only alphanumeric characters. + + "20200314" indicates that this particular version + of the calendar was downloaded on March 14, 2020. + + +# Libraries used + +- [icalendar](https://pypi.org/project/icalendar/) +- [pytz](https://pypi.org/project/pytz/) +- [recurring_ical_events](https://pypi.org/project/recurring-ical-events/) + (which, in turn, uses [python-dateutil](https://pypi.org/project/python-dateutil/)) +- [toml](https://pypi.org/project/toml/) + +# Related projects + +- [icalevents](https://github.com/irgangla/icalevents) +- [gcalcii](https://github.com/insanum/gcalcli) +- [vobject](https://pypi.org/project/vobject/) + + +# 0.1.0 +Initial release + +# 0.2.0 (12/8/2020) +- Substantial help message cleanup +- Changed/renamed multiple CLI options + +# 0.2.5 (12/9/2020) +- Google Calendar event viewing working + +# 0.3.0 +- Removed hacky csv functionality for now + + + +%package help +Summary: Development documents and examples for ionical +Provides: python3-ionical-doc +%description help + +# ionical: Keep an eye on ical! + + +- **ionical** is a command line tool for tracking schedule changes + in iCalendar feeds (downloadable .ics files): + - Download and compare sets of iCalendar files obtained on + different dates to generate changelogs of added/removed events. + - View current schedules, optionally filtered by start date + or event summary text. + - Classify events based on user-specified criteria + (e.g., categorize events whose start time falls between + range Xpm-Ypm as being "Workshift A" events, and those with + start times in a different range as "Workshift B" events). + - Export filtered events from calendars to CSV files, + using user-specified filter criteria (e.g., workshifts) + and user-specified formatting. +- Limitations: + - ionical only deals with iCalendar start times + and summary text fields, and ignores other fields. + This proves adequate for many simple use cases (e.g., it was + designed to track changes to employee schedules on + [Amion](https://amion.com/), and has worked well for that). For iCalendar management + involving additional fields or more complex use cases, you'll need to + look at other tools (or submit a pull request! :) ). + + + +## Installing via pip: +``` +$ pip install ionical +$ ionical +``` +- The first time you run ionical there will be no + ionical_config.toml file present, and you'll be + prompted to generate one (in the current directory). + Once it is created, you can add the names and URLs + for calendars you want to track/monitor, and specify + multilple other configuration options. + + +## Installing for development from GitHub: +``` +$ git clone https://github.com/danyul/ionical +$ cd ionical +$ python3 -m venv env +$ source env/bin/activate +$ pip install -e ".[dev]" +$ python -m ionical +``` +- If on Windows, replace: + - **'source env/bin/activate'** with **'.\env\Scripts\activate'** + - **'python3'** with **'python'** + + +## Command line usage ('ionical -h' output): +``` + + +Usage: ionical [-h] [-v] [-V] + [-f CONFIG_DIRECTORY] [-d ICS_DIR] + [-g] [-s] [-l [#_COMPARISONS]] [-c [CSV_FILE]] + [-i NAME [NAME ...]] + [-a DATE_OR_NUMBER] [-b DATE_OR_NUMBER] [-t TEXT [TEXT ...]] + +Keep an eye on ical! ionical is a CLI tool to track iCalendar changes. + +Help/About: + -h, --help Print help message, then exit. + -v, --verbose Increase the level of printed feeedback. + -V, --version Print version, then exit. + +File Locations: + Specify expected locations for config files and calendar downloads. + + -f CONFIG_DIRECTORY Directory where config file ionical_config.toml located. + This file will contain basic calendar information + (names, URLs for .ics files, and timezones) and allows + various additional configuration options. + See README file for an example, or run 'ionical' to + generate a sample config file which may then be edited. + (default: current directory) + + -d ICS_DIR Directory for downloading/accessing .ics files. + (default: current directory) + + +Actions: + One or more action options MUST be specified. + + -g, --get_today Download current .ics files and label them with today's + date. This will be done prior to other actions. + (If this is left unspecified, operations will only use + .ics files that have been previously downloaded.) + + -s, --show Display events from most recent ical file version for + each calendar. + + -l [#_COMPARISONS] Show changelogs comparing calendar versions from + multiple dates. Optionally, specify the number of + prior versions (per each calendar) for which to show + comparison changelogs. (If left unspecified, + #_COMPARISONS default is 2.) + + -c [CSV_FILE] Export calendar events to csv. + + +Calendar Filters: + Restrict all actions to a subset of calendars. + + -i NAME [NAME ...] Only operate on calendars with a specified NAME. + (If -i not specified, operate on every calendar + listed in ionical_config.toml.) + + +Event Filters: + Filter events shown in changelogs, schedule displays + + -a DATE_OR_NUMBER Only include events that start AFTER a specified date. + (I.e., exclude events starting before the date.) + Value must be EITHER a date in format YYYY-MM-DD, or + a positive integer representing # of days in the past + (If option unspecified, default behavior is to exclude + any events starting prior to 1 day ago.) + + -b DATE_OR_NUMBER Only include events that start BEFORE a specified date. + (I.e., exclude events starting on or after the date.) + Value must be EITHER a date in format YYYY-MM-DD, or + a positive integer representing # of days in the future. + (If option unspecified, default behavior is to + have no upper limit on event dates.) + + -t TEXT [TEXT ...] Only include events whose summary text includes words + that match at least one TEXT item. TEXT items can be + either a single word or phrases comprised of words and + spaces. If the latter, you must enclose TEXT within + quotation marks. + (If option not specified, no text filters are applied.) + +``` + + + +## ionical configuration file: +``` +# ionical_config.toml + +title = "ionical configuration file" +verbose = true + +# Note: All options that can be specified on the command line may +# alternatively be specified in this config file. For example, +# uncommenting 'get_today = true' (below) has the same effect as running +# 'ionical -g' (i.e., today's ics files will be downloaded). Likewise, +# uncommenting 'export_csv = ["CAL_1_NAME"]' is equivalent to running +# ionical using the argument/parameter '-i CAL_1_NAME'. +# +# Note: If configuration is specified both in this config file AND via +# a command line argument, the command line argument takes precedence, and +# the information from the config file is ignored. + +[actions] + # restrict_to = ["CAL_1_NAME"] + # get_today = true + # show_schedule = true + # show_changelog = true + # num_changelogs = 2 + # export_csv = true + +[filters] + # earliest = 2020-11-01 + # latest = 2022-06-30 + # summary_text = ["search text 1", "search text two"] + + +[calendars] + + [calendars.CAL1_NAME] + description = "CAL1_LONG_NAME" + url = "http://url_to_ics_download_for_CAL_1.ics" + tz = "US/Eastern" # or other timezone in pytz format, for CAL1 + + [calendars.CAL2_NAME] + description = "CAL2_LONG_NAME" + url = "http://url_to_ics_download_for_CAL_2.ics" + tz = "US/Mountain" # or other timezone in pytz format, for CAL2 + + +[event_classifications] + [event_classifications.by_start_time] + [event_classifications.by_start_time.example_time_category] + + Morning = [ + [5, 12], # Any event starting between 5am and 12pm + ] # is categorized as "Morning" + Afternoon = [ + [12, 16], # Any event starting between 12p and 4pm + ] # is categorized as "Afternoon" + Evening = [ + [16, 20], # Any event starting between 4pm and 8pm + ] # is categorized as "Evening" + Night = [ + [20, 24], # Any event that starts between 8pm + [ 0, 4], # and 4am is categorized as "Night" + ] + All-Day = "missing" # If no start time, categorize as "All-Day" + Other = "default" # All other events (in this case, only + # events starting between 4 and 5 am) will + # be categorized as "Unspecified". + + +[csv] + file = "ionical_export_default_csv_filename.csv" + include_empty_dates = false + grouping = "example_time_category" + order = ["Morning", "Afternoon"] + format = "My morning events: {0} \n My afternoon events: {1}" + text_if_not_present = "I AM AVAILABLE" + + [csv.substitutions] + "Secret spy meeting with Carl" = "Going to the zoo" + "Present shopping to suprise JoJo" = "Flossing the cat" + +# You can tweak the below to change display formatting +[formatting] + + [formatting.schedule_view] # For displaying schedules (-s option): + + date_fmt = "%a, %b %d %Y" + time_fmt = "at %I:%M%p" + time_replacements = {" 0" = " ", "(0" = "(", "AM" = "am", "PM" = "pm"} + time_group = "example_time_category" + time_group_fmt = "{:>} Time" + + event_summary = " {0:16} {1:10} ({2:<}) {3:30}" + + # Meanings for event_summary fields: + # 0: date (further formatted by date_fmt variable) + # 1: time (further formatted by time_fmt and/or time_replacements) + # 2: user_defined time grouping (further formatted by time_group_fmt) + # 3: event summary text + + + [formatting.changelog] # For displaying changelogs (-l option): + + date_fmt = "%a, %b %d %Y" + time_fmt = " %I%p" + time_replacements = {" 0" = " ", "(0" = "(", "AM" = "am", "PM" = "pm"} + + change_report = " {label:10}{name:18}{start_str:19} {summary:30} [comp vers:{compare_date}]\\n" + + # Meanings for change_report fields: + # label : "ADD" if an event has been added or "REMOVE" if removed + # (modifying a schedule's time or event summary will + # show up as a combination of a removal and an addition). + # name : The Full Name of a calendar. + # start_str : A string representing an event's start date and time. + # summary: : The event's summary text + # compare_date : The date of the second-most-recentics file for this + # calendar, against which the changelog is being compared. + + +``` + + - Timezones are in pytz format, e.g., "US/Eastern". + Listing of pytz timezones [can be found here](https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones). + - The calendar **NAME**: + - Serves as an ID when asking ionical (via -i option) + to restrict actions to a subset of calendars. + - Serves as the leftmost part of the filename for + downloaded ics files. + - Shouldn't have spaces or non-alphanumeric characters. + - The calendar **LONG NAME**: + - Is used for display purposes. + + +## Note on filename format for downloaded ics files: + + Downloaded .ics files have a filename format of + ABC123__20200314.ics, where "ABC123" is a name + identifier. (A reasonable name for a calendar + which tracks an employee's work schedule might + be a last name or an employee ID number.) Names + should contain only alphanumeric characters. + + "20200314" indicates that this particular version + of the calendar was downloaded on March 14, 2020. + + +# Libraries used + +- [icalendar](https://pypi.org/project/icalendar/) +- [pytz](https://pypi.org/project/pytz/) +- [recurring_ical_events](https://pypi.org/project/recurring-ical-events/) + (which, in turn, uses [python-dateutil](https://pypi.org/project/python-dateutil/)) +- [toml](https://pypi.org/project/toml/) + +# Related projects + +- [icalevents](https://github.com/irgangla/icalevents) +- [gcalcii](https://github.com/insanum/gcalcli) +- [vobject](https://pypi.org/project/vobject/) + + +# 0.1.0 +Initial release + +# 0.2.0 (12/8/2020) +- Substantial help message cleanup +- Changed/renamed multiple CLI options + +# 0.2.5 (12/9/2020) +- Google Calendar event viewing working + +# 0.3.0 +- Removed hacky csv functionality for now + + + +%prep +%autosetup -n ionical-0.5.13 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-ionical -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.5.13-1 +- Package Spec generated @@ -0,0 +1 @@ +b4f3189bb8cb60475bce281b2e167bfe ionical-0.5.13.tar.gz |