Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
.. image:: https://img.shields.io/pypi/v/calendar-view.svg :target: https://pypi.org/project/calendar-view/ :alt: PyPi Package Version
.. image:: https://img.shields.io/pypi/dm/calendar-view.svg :target: https://pypistats.org/packages/calendar-view :alt: PyPi Package Monthly Download
.. image:: https://img.shields.io/pypi/l/calendar-view.svg :target: https://opensource.org/licenses/MIT :alt: MIT License
The library provides a graphical view of the calendar. View, title and events can be easily configured.
The output in *.png
file.
Install the package using PyPI:
.. code-block:: bash
pip install calendar-view
or directly from the repository:
.. code-block:: bash
pip install git+https://github.com/sakhnevych/calendar-view.git
Configuration for all views can be done using the CalendarConfig
class.
.. csv-table:: :header: "Parameter", "Type", "Description" :widths: 17, 10, 73
lang
, str, "Language, which is used for the name of the weekday. Supported values: en, ru, ua, es, pt. Default value: en"
title
, str, "Title of the view. Can be empty"
dates
, str, "The range of the days to show. Default value: 'Mo - Su'"
days
, int, "If dates
does not exist, the number of days to display can be configured starting from Monday. For example, '4' means dates='Mo - Th'
"
hours
, str, "Hour range to display"
mode
, str, "Mode will override some parameters. Available modes:
- 'week' - show the current week
- 'day_hours' - show hours range '8:00 - 22:00'
- 'working_hours' - show hours range '8:00 - 19:00'
- 'auto' - modes 'week' + 'day_hours'"
show_date
, bool, "Defines if the date has to be shown. Format: 'dd.mm'
or 'dd.mm.YYYY'
if show_year=True
. Default value: True"
show_year
, bool, "Defines if the year has to be added to the date format. Omitted if show_date=False
. Default value: False"
legend
, bool, "If False
- draw the name of the event inside the block. If True
- draw the name in the legend. If not defined, will be chosen automatically."
title_vertical_align
, str, "The vertical align of the title and noted in the calendar event: top
| center
| bottom
. Default value: center"
Example:
.. code-block:: python
config = CalendarConfig(
lang='en',
title='Yoga Class Schedule',
dates='Mo - Fr',
hours='8 - 22',
mode=None,
show_date=True,
show_year=False,
legend=True,
)
# you can validate your config
validate_config(config)
.. csv-table:: :header: "Parameter", "Type", "Description" :widths: 20, 10, 70
title
, str, "The title of the event."
notes
, str, "The notes that will be printed below the title"
day
, str / date / datetime, "The day of the event. Can be set using any of 3 different types. Can't be defined together with day_of_week
"
day_of_week
, int, "The range of the days to show. Can't be defined together with day
"
start
, str / time / datetime, "Start of the event. Can be set using any of 3 different types. The string has format HH:mm or HH."
end
, str / time / datetime, "End of the event. Can be set using any of 3 different types. The string has format HH:mm or HH."
The date can be defined using the next rules.
Allowed year range: [1900, 2100]
Any delimiter from the list can be used:
-
.
/
Allowed formats:
YYYY.mm.dd
dd.mm.YYYY
dd.mm.YY
- will use 20th century
dd.mm
- for the current year
As an example, let's look for example at the same data in all formats (assume, that the current year is 2022):
You can change styles by setting the required parameter. See the full list of parameters in the file:
style.py <https://github.com/sakhnevych/calendar-view/blob/master/calendar_view/config/style.py>
_
Example:
.. code-block:: python
from calendar_view.config import style
style.hour_height = 80
style.event_notes_color = '#7F7F7F'
Most basic and simplest usage. Doesn't have a configuration.
Code:
.. code-block:: python
from calendar_view.calendar import Calendar
from calendar_view.core.event import EventStyles
calendar = Calendar.build()
calendar.add_event(day_of_week=0, start='08:00', end='17:00', style=EventStyles.GRAY)
calendar.add_event(day_of_week=5, start='09:00', end='12:00', style=EventStyles.RED)
calendar.add_event(day_of_week=5, start='10:00', end='13:00', style=EventStyles.BLUE)
calendar.add_event(day_of_week=6, start='15:00', end='18:00')
calendar.save("simple_view.png")
Output:
.. image:: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/simple_view.png :target: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/simple_view.png :width: 600 px :align: center
View for one script. Configuration objects and events with specific dates are used.
Code:
.. code-block:: python
from calendar_view.calendar import Calendar
from calendar_view.core import data
from calendar_view.core.event import Event
config = data.CalendarConfig(
lang='en',
title='Sprint 23',
dates='2019-09-23 - 2019-09-27',
show_year=True,
mode='working_hours',
legend=False,
)
events = [
Event('Planning', day='2019-09-23', start='11:00', end='13:00'),
Event('Demo', day='2019-09-27', start='15:00', end='16:00'),
Event('Retrospective', day='2019-09-27', start='17:00', end='18:00'),
]
data.validate_config(config)
data.validate_events(events, config)
calendar = Calendar.build(config)
calendar.add_events(events)
calendar.save("sprint_23.png")
Output:
.. image:: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/sprint_23.png :target: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/sprint_23.png :width: 600 px :align: center
If the name of the event is too long, it can be printed in the legend.
Code:
.. code-block:: python
from calendar_view.core import data
from calendar_view.core.config import CalendarConfig
from calendar_view.calendar import Calendar
from calendar_view.core.event import Event
config = CalendarConfig(
lang='en',
title='Yoga Class Schedule',
dates='Mo - Su',
hours='8 - 22',
show_date=False,
legend=True,
)
events = [
Event(day_of_week=0, start='11:00', end='12:30', title='Ashtanga, 90 mins, with Gina', style=EventStyles.GRAY),
Event(day_of_week=1, start='18:00', end='19:15', title='HOT Core Yoga, 75 mins, with David', style=EventStyles.RED),
Event(day_of_week=2, start='09:00', end='10:00', title='Meditation - Yoga Nidra, 60 mins, with Heena', style=EventStyles.BLUE),
Event(day_of_week=2, start='19:00', end='20:15', title='Hatha Yoga, 75 mins, with Jo', style=EventStyles.GREEN),
Event(day_of_week=3, start='19:00', end='20:00', title='Pilates, 60 mins, with Erika', style=EventStyles.GRAY),
Event(day_of_week=4, start='18:30', end='20:00', title='Kundalini Yoga, 90 mins, with Dan', style=EventStyles.RED),
Event(day_of_week=5, start='10:00', end='11:15', title='Hatha Yoga, 75 mins, with Amelia', style=EventStyles.GREEN),
Event(day_of_week=6, start='10:00', end='11:15', title='Yoga Open, 75 mins, with Klaudia', style=EventStyles.BLUE),
Event(day_of_week=6, start='14:00', end='15:15', title='Hatha Yoga, 75 mins, with Vick', style=EventStyles.GREEN)
]
data.validate_config(config)
data.validate_events(events, config)
calendar = Calendar.build(config)
calendar.add_events(events)
calendar.save("yoga_class.png")
Output:
.. image:: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/yoga_class.png :target: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/yoga_class.png :width: 600 px :align: center
Add the note to the event. The text is fit to the width. Change the vertical align and the style of the image.
Code:
.. code-block:: python
from calendar_view.calendar import Calendar
from calendar_view.config import style
from calendar_view.core import data
from calendar_view.core.event import Event
style.hour_height = 80
style.event_notes_color = '#7F7F7F'
config = data.CalendarConfig(
lang='en',
title='Massage. Antonio',
dates='2022-06-20 - 2022-06-24',
show_year=True,
mode='working_hours',
title_vertical_align='top'
)
events = [
Event(day='2022-06-20', start='11:00', end='12:00', title='Jesse Tyson'),
Event(day='2022-06-20', start='12:30', end='14:00', title='Karry', notes='No music'),
Event(day='2022-06-20', start='15:00', end='17:00', title='Taylor Davis',
notes='Ask about the shin that hurts last time.'),
Event(day='2022-06-20', start='17:30', end='18:30', title='Jose Hope'),
Event(day='2022-06-22', start='10:00', end='12:00', title='Annabell Moore',
notes='A therapist for her mother:\n+4487498375 Nick Adams'),
Event(day='2022-06-22', start='12:30', end='14:00', title='Carlos Cassidy'),
Event(day='2022-06-22', start='15:00', end='17:00', title='Joe'),
Event(day='2022-06-22', start='17:30', end='18:30', title='Jose Hope'),
Event(day='2022-06-23', start='10:00', end='11:00', title='Elena Miller'),
Event(day='2022-06-23', start='11:30', end='13:30', title='Karry', notes='No music'),
Event(day='2022-06-23', start='15:00', end='16:30', title='Mia Williams'),
Event(day='2022-06-23', start='17:00', end='18:00', title='Xander'),
]
calendar = Calendar.build(config)
calendar.add_events(events)
calendar.save("massage.png")
Output:
.. image:: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/massage.png :target: https://raw.githubusercontent.com/sakhnevych/calendar-view/master/docs/massage.png :width: 600 px :align: center
calendar-view is licensed under a MIT license. Please see the file <LICENSE>
_ for details.
FAQs
Library provides a graphical view of the calendar.
We found that calendar-view demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.