utils module

פונקציות עזר כלליות לבוט שומר קבצי קוד General Utility Functions for Code Keeper Bot

class utils.CodeErrorLogger[מקור]

Bases: object

מערכת לוגים ייעודית לשגיאות עיבוד קוד

__init__()[מקור]
log_code_processing_error(user_id, error_type, error_message, context=None)[מקור]

רישום שגיאות עיבוד קוד

Return type:

None

פרמטרים:
log_code_activity(user_id, activity_type, details=None)[מקור]

רישום פעילות עיבוד קוד

Return type:

None

פרמטרים:
log_validation_failure(user_id, code_length, error_reason)[מקור]

רישום כשל באימות קוד

פרמטרים:
  • user_id (int)

  • code_length (int)

  • error_reason (str)

log_sanitization_success(user_id, original_length, cleaned_length)[מקור]

רישום הצלחה בסניטציה

פרמטרים:
  • user_id (int)

  • original_length (int)

  • cleaned_length (int)

class utils.TimeUtils[מקור]

Bases: object

כלים לעבודה עם זמן ותאריכים

static format_relative_time(dt)[מקור]

פורמט זמן יחסי (לפני 5 דקות, אתמול וכו«)

Return type:

str

פרמטרים:

dt (datetime)

static parse_date_string(date_str)[מקור]

פרסור מחרוזת תאריך לאובייקט datetime

Return type:

Optional[datetime]

פרמטרים:

date_str (str)

static get_time_ranges(period)[מקור]

קבלת טווח זמנים לפי תקופה

Return type:

Tuple[datetime, datetime]

פרמטרים:

period (str)

class utils.TextUtils[מקור]

Bases: object

כלים לעבודה עם טקסט

static truncate_text(text, max_length=100, suffix='...')[מקור]

קיצור טקסט עם סיומת

Return type:

str

פרמטרים:
static escape_markdown(text, version=2)[מקור]

הגנה על תווים מיוחדים ב-Markdown

Return type:

str

פרמטרים:
static clean_filename(filename)[מקור]

ניקוי שם קובץ מתווים לא חוקיים

Return type:

str

פרמטרים:

filename (str)

static extract_hashtags(text)[מקור]

חילוץ תגיות מטקסט

Return type:

List[str]

פרמטרים:

text (str)

static highlight_text(text, query, tag='**')[מקור]

הדגשת מילות חיפוש בטקסט

Return type:

str

פרמטרים:
static format_file_size(size_bytes)[מקור]

פורמט גודל קובץ (bytes -> KB/MB/GB)

Return type:

str

פרמטרים:

size_bytes (int)

static pluralize_hebrew(count, singular, plural)[מקור]

צורת רבים עבריות

Return type:

str

פרמטרים:
class utils.SecurityUtils[מקור]

Bases: object

כלים אמינות ובטיחות

static generate_secure_token(length=32)[מקור]

יצירת טוקן מאובטח

Return type:

str

פרמטרים:

length (int)

static hash_content(content, algorithm='sha256')[מקור]

יצירת hash לתוכן

Return type:

str

פרמטרים:
  • content (str)

  • algorithm (str)

static validate_user_input(text, max_length=10000, forbidden_patterns=None)[מקור]

בדיקת קלט משתמש

Return type:

bool

פרמטרים:
  • text (str)

  • max_length (int)

  • forbidden_patterns (List[str] | None)

static sanitize_code(code)[מקור]

ניקוי קוד מתוכן מסוכן (בסיסי)

Return type:

str

פרמטרים:

code (str)

class utils.TelegramUtils[מקור]

Bases: object

כלים לעבודה עם Telegram

async static send_typing_action(update, context)[מקור]

שליחת אקשן »כותב…«

פרמטרים:
  • update (telegram.Update)

  • context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async static send_document_action(update, context)[מקור]

שליחת אקשן »שולח מסמך…«

פרמטרים:
  • update (telegram.Update)

  • context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async static safe_answer(query, text=None, show_alert=False, cache_time=None)[מקור]

מענה בטוח ל-CallbackQuery: מתעלם משגיאות »Query is too old«/«query_id_invalid«.

Return type:

None

פרמטרים:
  • text (str | None)

  • show_alert (bool)

  • cache_time (int | None)

static get_user_mention(user)[מקור]

קבלת מנשן למשתמש

Return type:

str

פרמטרים:

user (telegram.User)

static split_long_message(text, max_length=4096)[מקור]

חלוקת הודעה ארוכה לחלקים

Return type:

List[str]

פרמטרים:
async static safe_edit_message_text(query, text, reply_markup=None, parse_mode=None)[מקור]

עריכת טקסט הודעה בבטיחות: מתעלם משגיאת »Message is not modified«.

תומך גם במימושי בדיקות שבהם edit_message_text היא פונקציה סינכרונית שמחזירה None (לא awaitable), וגם במימושים אסינכרוניים רגילים.

Return type:

None

פרמטרים:
  • text (str)

  • parse_mode (str | None)

async static safe_edit_message_reply_markup(query, reply_markup=None)[מקור]

עריכת מקלדת הודעה בבטיחות: מתעלם משגיאת »Message is not modified«.

Return type:

None

static extract_message_text_preserve_markdown(message, *, reconstruct_from_entities=True)[מקור]

שחזור טקסט ההודעה תוך ניסיון להחזיר את מה שהמשתמש התכוון מבחינת תווי Markdown.

עקרונות:

  • ברירת מחדל: נשתמש ב-text/caption (התוכן הגולמי כפי שנשלח לשרת לאחר עיבוד Markdown). זאת כדי לא לשמור מחרוזת ”מרונדרת“ (למשל *_name_*), שאינה משקפת קלט משתמש.

  • במידה ו-reconstruct_from_entities=True ויש ישויות עיצוב (bold/italic), ננסה לשחזר תווי Markdown שהיוו כנראה את מקור העיצוב ע“י הוספת תחיליות/סיומות סביב הטקסט שסומן. מיפוי פשוט: bold"__", italic"_". שאר ישויות נשמרות כפי שהן.

  • אם יש כיתוב (caption), נשתמש במקבילות caption_entities.

Return type:

str

פרמטרים:
class utils.CallbackQueryGuard[מקור]

Bases: object

Guard גורף ללחיצות כפולות על כפתורי CallbackQuery.

מבוסס על טביעת אצבע של המשתמש/הודעה/הנתון (callback_data) כדי לחסום את אותה פעולה בחלון זמן קצר, בלי לחסום פעולות שונות.

DEFAULT_WINDOW_SECONDS: float = 1.2
static should_block(update, context, window_seconds=None)[מקור]

בודק האם יש לחסום את העדכון כלחיצה כפולה.

אם זו אותה טביעת אצבע בתוך חלון הזמן – נחסום; אחרת נסמן ונאפשר.

Return type:

bool

פרמטרים:
  • update (telegram.Update)

  • context (telegram.ext.ContextTypes.DEFAULT_TYPE)

  • window_seconds (float | None)

async static should_block_async(update, context, window_seconds=None)[מקור]

בודק בצורה אטומית (עם נעילה) אם לחסום לחיצה כפולה של אותו משתמש.

חסימה מבוססת חלון זמן פר-משתמש ועל אותה טביעת אצבע (משתמש/צ׳אט/הודעה/הנתון), כדי למנוע כפילויות אמיתיות בלי לחסום לחיצות שונות ברצף מהיר (UX).

Return type:

bool

פרמטרים:
  • update (telegram.Update)

  • context (telegram.ext.ContextTypes.DEFAULT_TYPE)

  • window_seconds (float | None)

class utils.AsyncUtils[מקור]

Bases: object

כלים לעבודה אסינכרונית

async static run_with_timeout(coro, timeout=30.0)[מקור]

הרצת פונקציה אסינכרונית עם timeout

פרמטרים:

timeout (float)

async static batch_process(items, process_func, batch_size=10, delay=0.1)[מקור]

עיבוד פריטים בקבוצות

Return type:

List[Any]

פרמטרים:
class utils.PerformanceUtils[מקור]

Bases: object

כלים למדידת ביצועים

static timing_decorator(func)[מקור]

דקורטור למדידת זמן ביצוע

static measure_time(operation_name)[מקור]

מדידת זמן עם context manager

פרמטרים:

operation_name (str)

class utils.ValidationUtils[מקור]

Bases: object

כלים לוולידציה

static is_valid_filename(filename)[מקור]

בדיקת תקינות שם קובץ

Return type:

bool

פרמטרים:

filename (str)

static is_safe_code(code, programming_language)[מקור]

בדיקה בסיסית של בטיחות קוד

Return type:

Tuple[bool, List[str]]

פרמטרים:
  • code (str)

  • programming_language (str)

class utils.FileUtils[מקור]

Bases: object

כלים לעבודה עם קבצים

async static download_file(url, max_size=10485760)[מקור]

הורדת קובץ מ-URL

Return type:

Optional[bytes]

פרמטרים:
static get_file_extension(filename)[מקור]

קבלת סיומת קובץ

Return type:

str

פרמטרים:

filename (str)

static get_mime_type(filename)[מקור]

קבלת MIME type של קובץ

Return type:

str

פרמטרים:

filename (str)

async static create_temp_file(content, suffix='')[מקור]

יצירת קובץ זמני

Return type:

str

פרמטרים:
class utils.ConfigUtils[מקור]

Bases: object

כלים לקונפיגורציה

static load_json_config(file_path, default=None)[מקור]

טעינת קונפיגורציה מקובץ JSON

Return type:

Dict[str, Any]

פרמטרים:
static save_json_config(file_path, config)[מקור]

שמירת קונפיגורציה לקובץ JSON

Return type:

bool

פרמטרים:
class utils.CacheUtils[מקור]

Bases: object

כלים לקאש זמני

classmethod set(key, value, ttl=300)[מקור]

שמירה בקאש עם TTL (שניות)

פרמטרים:
classmethod get(key, default=None)[מקור]

קבלה מהקאש

Return type:

Any

פרמטרים:
classmethod delete(key)[מקור]

מחיקה מהקאש

פרמטרים:

key (str)

classmethod clear()[מקור]

ניקוי כל הקאש

utils.get_memory_usage()[מקור]

קבלת נתוני זיכרון

Return type:

Dict[str, Any]

utils.setup_logging(level='INFO', log_file=None)[מקור]

הגדרת לוגים

Return type:

Logger

פרמטרים:
  • level (str)

  • log_file (str | None)

utils.generate_summary_stats(files_data)[מקור]

יצירת סיכום סטטיסטיקות

Return type:

Dict[str, Any]

פרמטרים:

files_data (List[Dict[str, Any]])

utils.detect_language_from_filename(filename)[מקור]

זיהוי שפת תכנות לפי סיומת הקובץ (Filename-only). נסה קודם את הדטקטור הדומייני כדי לשמור אחידות, ונפילה למיפוי מקומי לתאימות.

Return type:

str

פרמטרים:

filename (str)

utils.get_language_emoji(language)[מקור]

מחזיר אימוג’י מתאים לשפת התכנות

Return type:

str

פרמטרים:

language (str)

class utils.SensitiveDataFilter(name='')[מקור]

Bases: Filter

מסנן שמטשטש טוקנים ונתונים רגישים בלוגים.

filter(record)[מקור]

Determine if the specified record is to be logged.

Returns True if the record should be logged, or False otherwise. If deemed appropriate, the record may be modified in-place.

Return type:

bool

פרמטרים:

record (LogRecord)

utils.install_sensitive_filter()[מקור]

התקנת המסנן על כל ה-handlers הקיימים.

utils.normalize_code(text, *, strip_bom=True, normalize_newlines=True, replace_nbsp=True, replace_all_space_separators=True, remove_zero_width=True, remove_directional_marks=True, trim_trailing_whitespace=True, remove_other_format_chars=True, remove_escaped_format_escapes=True, remove_variation_selectors=False)[מקור]

נרמול קוד לפני שמירה.

פעולות עיקריות:

  • הסרת BOM בתחילת הטקסט

  • המרת CRLF/CR ל-LF

  • החלפת רווחים לא-שוברים (NBSP/NNBSP) לרווח רגיל

  • הסרת תווי רוחב-אפס וסימוני כיוון (LRM/RLM/LRE/RLE/PDF/RLO/LRO/LRI/RLI/FSI/PDI)

  • הסרת תווי בקרה (Cc) פרט ל-t, n, r

  • הסרת רווחי סוף שורה

Return type:

str

פרמטרים:
  • text (str)

  • strip_bom (bool)

  • normalize_newlines (bool)

  • replace_nbsp (bool)

  • replace_all_space_separators (bool)

  • remove_zero_width (bool)

  • remove_directional_marks (bool)

  • trim_trailing_whitespace (bool)

  • remove_other_format_chars (bool)

  • remove_escaped_format_escapes (bool)

  • remove_variation_selectors (bool)