File size: 2,781 Bytes
0c96a32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""
utils.py
SkyOS Google Utilities

Gemeinsame Hilfsfunktionen für alle Google-Module.

Autor: Sky Meilin
Projekt: SkyOS Full Core
"""

from __future__ import annotations

import logging
import re
from datetime import datetime
from pathlib import Path
from typing import Any

logger = logging.getLogger("SkyOS.GoogleUtils")


# -------------------------------------------------
# Datum & Zeit
# -------------------------------------------------

def iso_now() -> str:
    """Aktuelle UTC-Zeit im ISO-8601-Format."""
    return datetime.utcnow().replace(microsecond=0).isoformat() + "Z"


def format_datetime(dt: datetime) -> str:
    """Konvertiert datetime in ISO-8601."""
    return dt.isoformat()


# -------------------------------------------------
# Dateinamen
# -------------------------------------------------

def sanitize_filename(filename: str) -> str:
    """Entfernt ungültige Zeichen aus Dateinamen."""

    filename = re.sub(r'[<>:"/\\|?*]', "_", filename)
    filename = filename.strip()

    return filename


def file_extension(path: str) -> str:
    """Gibt die Dateiendung zurück."""

    return Path(path).suffix.lower()


# -------------------------------------------------
# Google IDs
# -------------------------------------------------

def is_google_id(value: str) -> bool:
    """
    Einfache Prüfung, ob ein String
    wie eine Google-ID aussieht.
    """

    return (
        isinstance(value, str)
        and len(value) > 20
    )


# -------------------------------------------------
# API Antworten
# -------------------------------------------------

def success(data: Any = None, message: str = "OK") -> dict:
    """Standardisierte Erfolgsausgabe."""

    return {
        "success": True,
        "message": message,
        "data": data,
    }


def error(message: str, exception: Exception | None = None) -> dict:
    """Standardisierte Fehlerausgabe."""

    logger.error(message)

    return {
        "success": False,
        "message": message,
        "error": str(exception) if exception else None,
    }


# -------------------------------------------------
# Logging
# -------------------------------------------------

def log_api_call(service: str, action: str):

    logger.info(
        "[%s] %s",
        service.upper(),
        action,
    )


# -------------------------------------------------
# MIME Types
# -------------------------------------------------

GOOGLE_MIME_TYPES = {

    "document":
        "application/vnd.google-apps.document",

    "spreadsheet":
        "application/vnd.google-apps.spreadsheet",

    "folder":
        "application/vnd.google-apps.folder",

    "presentation":
        "application/vnd.google-apps.presentation",

    "drawing":
        "application/vnd.google-apps.drawing",
}