El modificador de calendarios de la basura

Lo he hecho. Termina el domingo y he conseguido sacar, este fin de semana, algunos ratos para conformar algo más de dos horas de programación, y logrado llevar adelante, contra el reloj, una versión perfectamente funcional de mi última creación: el modificador de calendarios de la basura.

Escrito en python, y de utilidad limitada, el programa, de unas 60 líneas, toma el fichero icalendar en formato .ics, modifica los eventos convenientemente y genera otro fichero del mismo tipo con eventos que tienen lugar a las ocho de la tarde del día previo a la recogida de la basura para avisarme de que es el momento de sacar el contenedor o las bolsas amarillas o lo que sea que toque en esa ocasión. Me lo he pasado pipa y estoy súper orgulloso del resultado. Me he quedado intentando subirlo a GitHub, pero no me ha dado tiempo a configurar el Visual Studio Code. Por lo menos he podido instalar el famoso homebrew, que parece un gestor de paquetes para MacOS. A ver si me da tiempo en esta entrada para compartir aquí el código de mi creación.

Al margen de eso, fin de semana de mucho dolor de Big Crunch, crisis, que ya está dando paso al siguiente nivel de bienestar.

Mencionar también que me he currado una actualización del CV con una flamante carta de presentación en LaTeX para mi última solicitud de empleo en una empresa cercana en la que buscan a alguien que hable español para vender productos técnicos. Solicitud enviada, a la espera de una respuesta.

Gran premio de Brasil de Fórmula uno. Menudo recital de Hamilton que, con 25 posiciones de penalización, ha conseguido ganar la carrera. Qué pedazo de piloto. No se resiste a soltar el octavo campeonato. Quedan tres carreras, creo. La próxima en el nuevo gran premio de Catar.

Mencionar también que tuve la oportunidad de conversar telefónicamente con Manuel, comentarista actual de ESDLV y lector desde los albores, lo que fue algo muy grato. Es un enorme placer conocer a alguien que lleva, durante casi dos décadas, leyendo lo que publico. De alguna manera sentí que se cerraba un círculo muy grande. Seguimos en contacto. Gracias Manuel.

Y poco más. Media horita hoy de meditación muy agradable. Piernas cruzadas, sentado sobre el suelo. Acostumbrado a sentarme a sentir dolor, sintiendo ahora tan poco, meditar se está convirtiendo en un pasatiempo realmente placentero.

Última semana antes de regresar a España para seguir procesando asuntos relacionados con la muerte de mi padre. El martes dentista para la carnicería final, que no sé si aplazar porque… ¿con qué voy a masticar? En fin, veremos cómo me levanto mañana.

¿Qué se cuece por ahí? ¿A qué retos os enfrentáis? ¿Qué tal el fin de semana? ¿Alguien más ha vibrado con la carrera?

# Takes the Abfuhr ical calendar as input and rewrites the events so
# they are reminders, the day before, to take the specific trash type out.
# A new rewritten ical calendar is output.

from icalendar import Calendar, Event, vDatetime
from datetime import datetime, timedelta

# Open and read original calendar
g = open('original.ics','rb')
gcal = Calendar.from_ical(g.read())

# Set up new calendar object
new_cal = Calendar()
new_cal.add('prodid', '-//Modified Abfuhrkalender//')
new_cal.add('version', '1.0')
new_cal.add('X-WR-CALNAME', 'Abfuhraufgaben Javier')

# Main loop
for component in gcal.walk():
    if component.name == "VEVENT":
        # Print event details for debugging purposes
        print('Nombre evento:')
        print(component.get('summary'))
        print('Comienzo: ')
        print(component.get('dtstart').dt)
        print('Fin: ')
        print(component.get('dtend'))
        print('Fecha: ')
        print(component.get('dtstamp').dt)
        print('---')

        # Process event
        print('Comienzo procesado:')
        start = component.get('dtstart').dt
        # Set to the day before
        new_start = start - timedelta(hours=24)
        # Convert to string
        new_start = new_start.strftime('%Y-%m-%d')
        # Set time to 8PM that day before
        new_start_obj = datetime.strptime(new_start, '%Y-%m-%d')
        hour_obj = datetime.strptime('20', '%H') 
        new_start = new_start_obj + timedelta(hours=hour_obj.hour)
        print(new_start)
        # Duration of task is 30 minutes. Set end time.
        new_end = new_start + timedelta(minutes=30)
        print(new_end)
        # Set new event summary
        event_summary = component.get('summary')
        new_event_summary = event_summary.replace('Abfuhr:', 'Sacar')
        print(new_event_summary)

        print('\n')

        # Add new event to new calendar
        event = Event()
        event.add('summary', new_event_summary)
        event.add('dtstart', new_start)
        event.add('dtend', new_end)
        event.add('dtstamp', new_start)

        new_cal.add_component(event)
        print('Event added: ')
        print(event)

g.close()

# Save new calendar
f = open('new_trash_calendar.ics', 'wb')
f.write(new_cal.to_ical())
f.close()

Edito: Por cierto, me he encontrado el problema de que Google Calendar importa todos los eventos a mi calendario principal. Lo que yo quisiera, en lugar de eso, es que importara el calendario entero, de manera que pudiera elegir mostrarlo o no, e incluso darle un color determinado. Esto es lo que hago, por ejemplo, con un calendario que contiene los horarios de las carreras de la F1 ¿Alguien sabe cómo conseguir eso? Pensaba que podría bastar con darle un nombre al calendario pero no. Gracias.

Comentarios

2 respuestas a «El modificador de calendarios de la basura»

  1. Avatar de Manuel
    Manuel

    ¡Gracias a ti Javier! Fue una buena charla y espero que encontraras el HD!

    PS: lo de Google calendar me pasó y creo recordar que hay una manera de compartir tu calendario desde Google con una URL (en vez de importarlo, un poco cuando escoges el calendario de festividades del país en el que resides) de esa manera el Apple lo detecta como una fuente y puedes mostrarlo/ocultarlo. Sé que lo configuré así en mi antigua empresa y norecuerdo la opción concreta y si todavía es posible. Lo mismo te da una pista de por dónde tirar.

    1. Avatar de Javier

      No, no hemos encontrado el HD. Nos falta eso y un par de cajas de madera. Tememos que fuera todo en la misma caja de cartón, que ha desaparecido de alguna manera. A ver si desaparecen mis últimos problemas de la misma manera.

      Lo del calendario me parece que va por ahí, sí. Es la conclusión a la que he llegado revisando otros calendarios que tengo de ese modo en Google Calendar. Lo que no sé es cómo compartir el calendario desde ahí, pues lo que tengo es el fichero .ics. Pero gracias!

Deja una respuesta