PYTHONOMANIA
273 subscribers
195 photos
3 videos
1 file
616 links
Откройте для себя мир Python в PYTHONOMANIA!

Идеально подходит как для начинающих, так и для опытных разработчиков. Присоединяйтесь к нам, чтобы достичь совершенства в Python!

Сайт: https://pythonomania.github.io/
Download Telegram
📱Calgebra.

Calgebra — это алгебра множеств для календарей в Python: позволяет комбинировать временные интервалы (|, &, -, ~) и эффективно запрашивать свободные/занятые слоты во временных диапазонах .

❓Зачем это нужно:

🔘Поиск общих свободных окон команды для митингов.

🔘Анализ занятости (кто перегружен, какие слоты пустуют).

🔘Построение «правил времени» для ботов и автоматизации (рабочие часы, исключения, recurring‑паттерны).

🔹Как это выглядит в коде:

from calgebra import day_of_week, time_of_day, at_tz, pprint, hours, HOUR
from itertools import islice

tz = "US/Pacific"
at = at_tz(tz)

# Календари команды (Google / .ics / свои источники)
alice, bob, charlie = ...

# Будни и рабочие часы
weekend = day_of_week(["saturday", "sunday"], tz=tz)
weekdays = ~weekend
workhours = time_of_day(start=9*HOUR, duration=8*HOUR, tz=tz)
business_hours = weekdays & workhours

# Кто когда занят
team_busy = alice | bob | charlie

# Свободные слоты в рабочее время, минимум на 2 часа
free_slots = (business_hours - team_busy) & (hours >= 2)

pprint(islice(free_slots[at("2025-01-01"):at("2025-02-01")], 5), tz=tz)
# 2025-01-06 14:00:00 -> 17:00:00
# 2025-01-08 09:00:00 -> 12:00:00
# ...


🔻Ключевые особенности:

🔘Операции множеств для времени: объединение (|), пересечение (&), разность (-), дополнение (~) над календарными интервалами.

🔘Конструкции «поверх дат»: day_of_week(), time_of_day(), recurring() в стиле RFC 5545 (как в iCalendar).

🔘Фильтрация интервалов: hours >= 2, summary == "standup", кастомные свойства событий.

🔘Отложенное выполнение запросов: вы описываете правила и комбинации, а фактический расчёт происходит при слайсинге по диапазону дат (timeline[start:end]).

🔘Интеграция с реальными календарями:

✔️Google Calendar: чтение и запись через calgebra.gcsa.

✔️iCalendar (.ics): загрузка/сохранение стандартных RFC 5545 файлов.

🔧Установка:

pip install calgebra
# с поддержкой Google Calendar
pip install calgebra[google-calendar]
# с поддержкой iCalendar (.ics)
pip install calgebra[ical]


#Calgebra #Python #Calendar #Scheduling #GoogleCalendar #ICS #SetAlgebra #Automation #OpenSource

📱Ссылка на репозиторий:
https://github.com/ashenfad/calgebra
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍3🔥3
📱Icalendar.

Icalendar
- это библиотека для Python, предназначенная для парсинга, генерации и редактирования файлов формата iCalendar (.ics), полностью совместимая со стандартом RFC 5545.

С ее помощью можно создавать, анализировать и модифицировать события, встречи и задачи в коде, а затем экспортировать их для работы с любыми календарными сервисами (Google Calendar, Apple Calendar, Outlook и др.).

🔹Ключевые возможности:

🔘Стандарт RFC 5545: Полная поддержка спецификации iCalendar для создания и чтения объектов календаря.

🔘Поддержка часовых поясов: Корректно обрабатывает таймзоны с помощью zoneinfo (из стандартной библиотеки Python), dateutil.tz и pytz.

🔘Ядро экосистемы: На базе icalendar построены десятки других инструментов, таких как caldav (клиент CalDAV по RFC 4791), iCalEvents (расчет повторяющихся событий) и x-wr-timezone.

🔻Быстрый старт:

Установка из PyPI:

pip install icalendar


Пример создания календаря с событием:

from icalendar import Calendar, Event
from datetime import datetime

cal = Calendar()
event = Event()

event.add('summary', 'Созвон по проекту')
event.add('dtstart', datetime(2026, 8, 10, 10, 0, 0))
event.add('dtend', datetime(2026, 8, 10, 11, 0, 0))

cal.add_component(event)

# Экспорт в файл .ics
with open('meeting.ics', 'wb') as f:
f.write(cal.to_ical())


Проект распространяется под лицензией BSD (2-Clause) и доступен на GitHub.

#Python #iCalendar #RFC5545 #CalDAV #Calendar #DevTools #OpenSource #Backend

📱Ссылка на репозиторий:
https://github.com/collective/icalendar
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍33🔥2