CoolFace
Apppublic

lscsc/Process_dash_pub

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
utils.py135 linesDownload Raw Back to backup
1"""2유틸리티 함수 모음3"""4 5import os6import pandas as pd7import streamlit as st8from datetime import datetime9import logging10 11# 로깅 설정12logging.basicConfig(13    level=logging.INFO,14    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',15    handlers=[16        logging.FileHandler('app.log'),17        logging.StreamHandler()18    ]19)20 21logger = logging.getLogger(__name__)22 23def setup_page():24    """페이지 기본 설정"""25    st.set_page_config(26        page_title="유리 장섬유 생산공정 품질관리 시스템",27        page_icon="🏭",28        layout="wide",29        initial_sidebar_state="expanded"30    )31    32    # 커스텀 CSS 적용33    st.markdown("""34        <style>35        .process-box {36            background-color: #f8f9fa;37            padding: 15px;38            border-radius: 8px;39            margin-bottom: 15px;40            border-left: 4px solid #4285F4;41        }42        43        .issue-box {44            background-color: #fff3e0;45            padding: 15px;46            border-radius: 8px;47            margin-bottom: 15px;48            border-left: 4px solid #ff9800;49        }50        51        .defect-box {52            background-color: #f8f9fa;53            padding: 15px;54            border-radius: 8px;55            margin-bottom: 15px;56            border: 1px solid #e0e0e0;57        }58        59        .stButton>button {60            width: 100%;61        }62        63        .css-1d391kg {64            padding-top: 1rem;65        }66        </style>67    """, unsafe_allow_html=True)68 69def initialize_session_state():70    """세션 상태 초기화"""71    if 'password_correct' not in st.session_state:72        st.session_state.password_correct = False73    74    if 'data_loaded' not in st.session_state:75        st.session_state.data_loaded = False76    77    if 'data_dict' not in st.session_state:78        st.session_state.data_dict = {}79    80    if 'last_data_refresh' not in st.session_state:81        st.session_state.last_data_refresh = None82    83    if 'tab_selection' not in st.session_state:84        st.session_state.tab_selection = "공정 현황"85 86def check_password():87    """비밀번호 확인"""88    if st.session_state.password_correct:89        return True90    91    st.markdown("""92        <style>93        .password-container {94            max-width: 400px;95            margin: 0 auto;96            padding: 20px;97            background-color: #f8f9fa;98            border-radius: 10px;99            box-shadow: 0 2px 4px rgba(0,0,0,0.1);100        }101        </style>102    """, unsafe_allow_html=True)103    104    with st.form("password_form"):105        st.markdown("""106            <div class="password-container">107                <h3>로그인</h3>108                <p>시스템에 접근하려면 비밀번호를 입력하세요.</p>109            </div>110        """, unsafe_allow_html=True)111        112        password = st.text_input("비밀번호", type="password")113        submit = st.form_submit_button("확인")114    115    if submit:116        if password == "1234":  # 실제 운영 시에는 보안된 방식으로 변경117            st.session_state.password_correct = True118            return True119        else:120            st.error("비밀번호가 올바르지 않습니다.")121            return False122    123    return False124 125def safe_read_excel(filepath):126    """안전한 Excel 파일 읽기"""127    try:128        if os.path.exists(filepath):129            return pd.read_excel(filepath)130        else:131            logger.warning(f"파일을 찾을 수 없습니다: {filepath}")132            return pd.DataFrame()133    except Exception as e:134        logger.error(f"파일 읽기 오류 ({filepath}): {str(e)}")135        return pd.DataFrame()