File size: 2,575 Bytes
3452823
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Borsa Uygulaması için Hata Yönetimi Yardımcı Modülü
Bu modül, uygulamada oluşabilecek hataları yönetmek için fonksiyonlar içerir.
"""

import streamlit as st
import logging
from functools import wraps
import traceback
import sys
from config import ERROR_MESSAGES

# Hata ayıklama için logger oluşturalım
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(sys.stdout)
    ]
)

logger = logging.getLogger("borsa_app")

def log_exception(e, context=""):
    """Hata logunu kaydeder ve hata stack trace'ini döndürür."""
    error_message = f"{context}: {str(e)}" if context else str(e)
    logger.error(error_message)
    logger.error(traceback.format_exc())
    return traceback.format_exc()

def handle_api_error(func):
    """API çağrıları sırasında oluşabilecek hataları yakalamak için decorator."""
    @wraps(func)
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            error_message = ERROR_MESSAGES.get("api_error", "Veri çekilirken bir hata oluştu.")
            log_exception(e, f"API Error in {func.__name__}")
            st.error(error_message)
            return None
    return wrapper

def handle_analysis_error(func):
    """Analiz sırasında oluşabilecek hataları yakalamak için decorator."""
    @wraps(func)
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            error_message = ERROR_MESSAGES.get("analysis_error", "Analiz sırasında bir hata oluştu.")
            log_exception(e, f"Analysis Error in {func.__name__}")
            st.error(error_message)
            return None
    return wrapper

def show_error_message(error_type, additional_info=""):
    """Yapılandırılmış hata mesajlarını gösterir."""
    message = ERROR_MESSAGES.get(error_type, "Bir hata oluştu.")
    if additional_info:
        message += f" Detay: {additional_info}"
    st.error(message)

def try_except_block(error_type="analysis_error"):
    """İşlev için try-except bloğu oluşturan bir decorator."""
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except Exception as e:
                show_error_message(error_type)
                log_exception(e, f"Error in {func.__name__}")
                return None
        return wrapper
    return decorator