Première version fonctionnelle qui gère les événements récurrents.
Fix #7
This commit is contained in:
		@@ -10,10 +10,11 @@ from selenium import webdriver
 | 
			
		||||
from selenium.webdriver.chrome.service import Service
 | 
			
		||||
from selenium.webdriver.chrome.options import Options
 | 
			
		||||
import icalendar
 | 
			
		||||
from icalendar import vDatetime
 | 
			
		||||
from datetime import datetime, date
 | 
			
		||||
import json
 | 
			
		||||
from bs4 import BeautifulSoup
 | 
			
		||||
 | 
			
		||||
import pickle
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Downloader(ABC):
 | 
			
		||||
@@ -77,7 +78,7 @@ class Extractor(ABC):
 | 
			
		||||
    def clear_events(self):
 | 
			
		||||
        self.events = []
 | 
			
		||||
 | 
			
		||||
    def add_event(self, title, category, start_day, location, description, tags, uuid, url_human=None, start_time=None, end_day=None, end_time=None, last_modified=None, published=False):
 | 
			
		||||
    def add_event(self, title, category, start_day, location, description, tags, uuid, recurrences=None, url_human=None, start_time=None, end_day=None, end_time=None, last_modified=None, published=False):
 | 
			
		||||
        if title is None:
 | 
			
		||||
            print("ERROR: cannot import an event without name")
 | 
			
		||||
            return
 | 
			
		||||
@@ -107,6 +108,9 @@ class Extractor(ABC):
 | 
			
		||||
        if last_modified is not None:
 | 
			
		||||
            event["last_modified"] = last_modified
 | 
			
		||||
 | 
			
		||||
        if recurrences is not None:
 | 
			
		||||
            event["recurrences"] = recurrences
 | 
			
		||||
 | 
			
		||||
        self.events.append(event)
 | 
			
		||||
 | 
			
		||||
    def default_value_if_exists(self, default_values, key):
 | 
			
		||||
@@ -191,11 +195,25 @@ class ICALExtractor(Extractor):
 | 
			
		||||
 | 
			
		||||
            last_modified = self.get_item_from_vevent(event, "LAST-MODIFIED", raw = True)
 | 
			
		||||
 | 
			
		||||
            rrule = self.get_item_from_vevent(event, "RRULE", raw = True)
 | 
			
		||||
            if rrule is not None:
 | 
			
		||||
                print("Recurrent event not yet supported", rrule)
 | 
			
		||||
            recurrence_entries = {}
 | 
			
		||||
            for e in ["RRULE", "EXRULE", "EXDATE", "RDATE"]:
 | 
			
		||||
                i = self.get_item_from_vevent(event, e, raw = True)
 | 
			
		||||
                if i is not None:
 | 
			
		||||
                    recurrence_entries[e] = i
 | 
			
		||||
 | 
			
		||||
            self.add_event(title, category, start_day, location, description, tags, uuid=event_url, url_human=url_human, start_time=start_time, end_day=end_day, end_time=end_time, last_modified=last_modified, published=published)
 | 
			
		||||
            if start_day is not None and len(recurrence_entries) != 0:
 | 
			
		||||
                recurrences = ""
 | 
			
		||||
 | 
			
		||||
                for k, r in recurrence_entries.items():
 | 
			
		||||
                    if isinstance(r, list):
 | 
			
		||||
                        recurrences += "\n".join([k + ":" + e.to_ical().decode() for e in r]) + "\n"
 | 
			
		||||
                    else:
 | 
			
		||||
                        recurrences += k + ":" + r.to_ical().decode() + "\n"
 | 
			
		||||
            else:
 | 
			
		||||
                recurrences = None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            self.add_event(title, category, start_day, location, description, tags, recurrences=recurrences, uuid=event_url, url_human=url_human, start_time=start_time, end_day=end_day, end_time=end_time, last_modified=last_modified, published=published)
 | 
			
		||||
 | 
			
		||||
        return self.get_structure()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user