|
|
@@ -2,12 +2,12 @@ import datetime
|
|
|
import io
|
|
|
import os
|
|
|
from enum import Enum
|
|
|
+from urllib.parse import urlparse
|
|
|
from uuid import uuid4
|
|
|
|
|
|
import pandas as pd
|
|
|
import requests
|
|
|
|
|
|
-
|
|
|
planning_gid = "1001381542"
|
|
|
creneau_gid = "1884137958"
|
|
|
benevole_gid = "82247394"
|
|
|
@@ -57,6 +57,23 @@ def split_csv_row(raw_data: str, separator: str = ",", escape: str = '"') -> lis
|
|
|
return arr
|
|
|
|
|
|
|
|
|
+class InvalidUrlError(Exception):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+def extract_doc_uid(url: str) -> str:
|
|
|
+ res = urlparse(url)
|
|
|
+ if res.netloc != "docs.google.com":
|
|
|
+ raise InvalidUrlError("Invalid netloc")
|
|
|
+ if not res.path.startswith("/spreadsheets/d/"):
|
|
|
+ raise InvalidUrlError("Invalid path")
|
|
|
+ doc_id = res.path.split("/")[3]
|
|
|
+ l_doc_id = len(doc_id)
|
|
|
+ if l_doc_id < 32 and 50 > l_doc_id:
|
|
|
+ raise InvalidUrlError("Invalid path")
|
|
|
+ return doc_id
|
|
|
+
|
|
|
+
|
|
|
def build_sheet_url(doc_id, sheet_id):
|
|
|
return f"https://docs.google.com/spreadsheets/d/{doc_id}/export?format=csv&gid={sheet_id}"
|
|
|
|
|
|
@@ -93,16 +110,18 @@ def getPlanningDataFrame(csv_filename, starting_date, skip_column=3):
|
|
|
|
|
|
def getDate(day: str) -> datetime.datetime:
|
|
|
s = day.lower()
|
|
|
- if s.startswith("jeudi"):
|
|
|
- return starting_date
|
|
|
+ if s.startswith("mercredi"):
|
|
|
+ return starting_date + datetime.timedelta(days=-3)
|
|
|
+ elif s.startswith("jeudi"):
|
|
|
+ return starting_date + datetime.timedelta(days=-2)
|
|
|
elif s.startswith("vendredi"):
|
|
|
- return starting_date + datetime.timedelta(days=1)
|
|
|
+ return starting_date + datetime.timedelta(days=-1)
|
|
|
elif s.startswith("samedi"):
|
|
|
- return starting_date + datetime.timedelta(days=2)
|
|
|
+ return starting_date
|
|
|
elif s.startswith("dimanche"):
|
|
|
- return starting_date + datetime.timedelta(days=3)
|
|
|
+ return starting_date + datetime.timedelta(days=1)
|
|
|
elif s.startswith("lundi"):
|
|
|
- return starting_date + datetime.timedelta(days=4)
|
|
|
+ return starting_date + datetime.timedelta(days=2)
|
|
|
raise KeyError("This day is not valid : " + s)
|
|
|
|
|
|
def getTime(time_str: str) -> datetime.timedelta:
|
|
|
@@ -173,7 +192,7 @@ def getPlanningDataFrame(csv_filename, starting_date, skip_column=3):
|
|
|
return pd.DataFrame.from_dict(list_creneau)
|
|
|
|
|
|
|
|
|
-def parseGsheet(doc_uuid="1Ueuw8VVAmnx5k_t8tjHwLIuYwQJrKcwNbibbaqWRWAs"):
|
|
|
+def parseGsheet(doc_uuid: str, saturday_date: datetime.datetime):
|
|
|
suffix = "_2023"
|
|
|
fname_planning = f"./planning{suffix}.csv"
|
|
|
fname_creneau = f"./creneau{suffix}.csv"
|
|
|
@@ -186,7 +205,7 @@ def parseGsheet(doc_uuid="1Ueuw8VVAmnx5k_t8tjHwLIuYwQJrKcwNbibbaqWRWAs"):
|
|
|
df_contact["key"] = df_contact["Prénom"] + " " + df_contact.Nom.str.slice(0, 1)
|
|
|
|
|
|
df_creneau = getCreneauDataFrame(fname_creneau)
|
|
|
- df_planning = getPlanningDataFrame(fname_planning, datetime.datetime(2023, 9, 14))
|
|
|
+ df_planning = getPlanningDataFrame(fname_planning, saturday_date)
|
|
|
|
|
|
os.remove(fname_planning)
|
|
|
os.remove(fname_creneau)
|