cPoi(dZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZddlmZddlmZddlmZddlmZGddeZd S) z` Project Config Editor Dialog Allows creating and editing project configurations for versioning ) QDialog QVBoxLayout QHBoxLayout QFormLayout QGroupBox QLineEdit QCheckBox QPushButton QTextEditQDialogButtonBox QFileDialog QMessageBoxQLabel)Qt)logger)Path)DatabasecLeZdZdZd dedeffd ZdZdZdZ d Z d Z xZ S) ProjectConfigDialogz2Dialog for creating/editing project configurationsNdb project_idcBt|||_||_|du|_||jrdnd|dd||jr|dSdS)NzEdit Project ConfigzNew Project Configii) super__init__rris_editsetWindowTitlesetMinimumSize _setup_ui_load_project_data)selfparentrr __class__s 0C:\PYTHON\Scheduler\gui\project_config_dialog.pyrzProjectConfigDialog.__init__s    $"-  T\[11G[\\\ C%%%  < &  # # % % % % % & &c| t|}|dtd}t|}t |_|jd|d|jt |_|jd|d|j| |td}t|}td}| d |d |t}t |_ |j d | |j td }|j|j| ||d |t} t |_|jd| |jtd } | j|j| | |d| t)d|_|jd|d |j| |td} t| } td} | | t/|_|jd|jd| |jtd}| d | || | td}| d|d| |t7t6jjt6jjz}|j|j |j!|j"| |dS)zSetup dialog UIzProject Informationz"e.g., Scheduler, MyApp, WebScraperzProject Name *:zOptional descriptionz Description:z Project PathszSSource: Local development path Server: Base path on server (e.g., \\SERVER\PYTHON\)zcolor: #666; font-size: 10px;ze.g., C:\PYTHON\MyProjectz Browse...zSource Path *:z&e.g., \\SERVER\PYTHON\ or C:\Projects\zServer Base Path *:zEnable this project configTzExclusion PatternszFFiles and directories to exclude from versions (one pattern per line):zExamples: venv/ # Exclude venv directory __pycache__/ # Exclude Python cache *.log # Exclude log files *.db # Exclude database files *.pyc # Exclude compiled Python .git/ # Exclude git repositoryzYUse folder/ for directories, *.ext for file patterns. Lines starting with # are comments.uHow it works:
Upload Version: Syncs source to server and creates ZIP snapshot
Versions are stored: {Server Base Path}/{Project Name}_versions/
Active code is at: {Server Base Path}/{Project Name}/z[color: #444; font-size: 10px; background-color: #f5f5f5; padding: 10px; border-radius: 5px;N)#r setSpacingrrr name_editsetPlaceholderTextaddRowdescription_edit addWidgetr setStyleSheetr source_editr clickedconnect_browse_source server_edit_browse_serverr enabled_check setCheckedr exclusions_editsetMaximumHeight setWordWrapr StandardButtonSaveCancelaccepted _save_projectrejectedreject)r layout basic_group basic_layout paths_group paths_layout info_label source_layoutbrowse_source_btn server_layoutbrowse_server_btnexclusions_groupexclusions_layoutexclusions_labelexclusions_help info_section button_boxs r#rzProjectConfigDialog._setup_ui%sT""" 566 ";// " ))*NOOO-t~>>> )  001GHHHND,ABBB%%% 00 ";//  G     !@AAAB +++$ $;; ++,IJJJ 0111' 44!))$*=>>> 1222,m<<<$ $;; ++,Z[[[ 0111' 44!))$*=>>> 12221=AAA&'CDD %%d+++B 2333%%%%%9::'(899! T   ##$4555({{ // 7    --c222##D$8999 g   %%&EFFF##O444)*** O  ""$A B B B  &&&&&&&  + 0  + 2 3   ##D$6777##DK000$$$$$r$c |j|j}|s5tj|dd|jd|dS|j|d|j|dpd|j |d|j |d |j |d pd|j t|d dS#t $rO}t#jd |tj|dd ||Yd}~dSd}~wwxYw)zLoad existing project dataErrorzProject z not foundNname descriptionr' source_pathserver_base_pathexclude_patternsenabledzError loading project data: zFailed to load project: )rget_project_configrrcriticalrAr*setTextr-r0r4r8 setPlainTextr6r7bool Exceptionrerror)r projectes r#rz&ProjectConfigDialog._load_project_datas g00AAG $T74Zt4Z4Z4Z[[[  N " "76? 3 3 3  ! ) )'-*@*FB G G G   $ $W]%; < < <   $ $W-?%@ A A A  - -g6H.I.OR P P P   ) )$wy/A*B*B C C C C C    L;;; < < <  w0N10N0N O O O KKMMMMMMMMM s AD+CD++ F5AE??Fc|j}tj|d|r|nd}|r|j|dSdS)zBrowse for source directoryzSelect Source Directoryr'N)r0textr getExistingDirectoryr\r current_pathpaths r#r3z"ProjectConfigDialog._browse_sourcesk',,.. /  %( 0LLb    +   $ $T * * * * * + +r$c|j}tj|d|r|nd}|r|j|dSdS)z Browse for server base directoryzSelect Server Base Directoryr'N)r4rdr rer\rfs r#r5z"ProjectConfigDialog._browse_serversk',,.. /  *( 0LLb    +   $ $T * * * * * + +r$c  j j}j} s1t jddjdS|s1t jddjdS|s1t jddjdSt| sSt j dd|dt j j t j j z}|t j j krdSjr@jjjd krjj}t' fd |Dr5t jd d d jdSjpd}j}j} jrYjj |||||t5jd dt jdd dnTj |||||}t5jd d|t jdd ddS#t>$r;} t5j d| t j!dd| Yd} ~ dSd} ~ wwxYw)z'Validate and save project configurationzValidation ErrorzProject name is requiredNzSource path is requiredzServer base path is requiredzPath Not FoundzSource path does not exist: z Continue anyway?rTc3RK|]!}|dko|djkV"dS)rTidN)r).0prTr s r# z4ProjectConfigDialog._save_project..s<VV1V9$C4DO)CVVVVVVr$zDuplicate NamezA project named 'z1' already exists. Please choose a different name.)rrTrUrVrWrXrYzUpdated project config ''Successz Project 'z' updated successfully)rTrVrWrUrXrYzCreated project config 'z ' with ID z' created successfullyzError saving project config: rSzFailed to save project: )"r*rdstripr0r4rwarningsetFocusrexistsquestionr;YesNorrrZrget_all_project_configsanyr-r8 toPlainTextr6 isCheckedupdate_project_configrinfo informationcreate_project_configacceptr_r`r[) r rVrWreplyexistingrUrXrYrrbrTs ` @r#r?z!ProjectConfigDialog._save_projects~""$$**,,&++--3355 +002288::   &8:T U U U N # # % % % F   &8:S T T T   % % ' ' ' F   &8:X Y Y Y   % % ' ' ' FK  '')) ( Q QQQ*.1K1NN E  2666| t~22448R8RSWSb8c8cdj8kkkw6688HVVVVVXVVVVV #$____ '')))+002288::Bd /;;==CCEE$..00 P| c--# + +%5%5#. >t>>>???'i9aT9a9a9abbbb"W:: +%5 +%5# ;  StSSzSSTTT'i9aT9a9a9abbb KKMMMMM P P P L<<< = = =  w0N10N0N O O O O O O O O O Ps4CM>> O0N>>O)N) __name__ __module__ __qualname____doc__rintrrrr3r5r? __classcell__)r"s@r#rrs<<&&8&&&&&&& m%m%m%^, + + + + + +RPRPRPRPRPRPRPr$rN)rPyQt6.QtWidgetsrrrrrrr r r r r rr PyQt6.QtCorerlogururpathlibr core.databaserrr$r#rs7  """"""@P@P@P@P@P'@P@P@P@P@Pr$