فهرست منبع

https://github.com/openNAMU/openNAMU/issues/1481

잉여개발기 (SPDV) 2 سال پیش
والد
کامیت
e09531ce76
5فایلهای تغییر یافته به همراه51 افزوده شده و 29 حذف شده
  1. 35 25
      app.py
  2. 1 0
      lang/en-US.json
  3. 2 1
      lang/ko-KR.json
  4. 12 2
      route/main_setting_main.py
  5. 1 1
      version.json

+ 35 - 25
app.py

@@ -43,16 +43,10 @@ with get_db_connect() as conn:
 
     if data_db_set['type'] == 'mysql':
         try:
-            curs.execute(db_change(
-                'create database ' + data_db_set['name'] + ' ' + \
-                'default character set utf8mb4'
-            ))
+            curs.execute(db_change('create database ' + data_db_set['name'] + ' default character set utf8mb4'))
         except:
             try:
-                curs.execute(db_change(
-                    'alter database ' + data_db_set['name'] + ' ' + \
-                    'character set utf8mb4'
-                ))
+                curs.execute(db_change('alter database ' + data_db_set['name'] + ' character set utf8mb4'))
             except:
                 pass
 
@@ -66,7 +60,6 @@ with get_db_connect() as conn:
 
                 try:
                     curs.execute(db_change('select ' + create + ' from ' + create_table + ' limit 1'))
-
                     db_pass = 1
                 except:
                     pass
@@ -74,7 +67,6 @@ with get_db_connect() as conn:
                 if db_pass == 0:
                     try:
                         curs.execute(db_change('create table ' + create_table + '(test longtext default (""))'))
-
                         db_pass = 1
                     except Exception as e:
                         # print(e)
@@ -83,7 +75,6 @@ with get_db_connect() as conn:
                 if db_pass == 0:
                     try:
                         curs.execute(db_change('create table ' + create_table + '(test longtext default "")'))
-
                         db_pass = 1
                     except Exception as e:
                         # print(e)
@@ -92,7 +83,6 @@ with get_db_connect() as conn:
                 if db_pass == 0:
                     try:
                         curs.execute(db_change('create table ' + create_table + '(test longtext)'))
-
                         db_pass = 1
                     except Exception as e:
                         # print(e)
@@ -101,7 +91,6 @@ with get_db_connect() as conn:
                 if db_pass == 0:
                     try:
                         curs.execute(db_change("alter table " + create_table + " add column " + create + " longtext default ('')"))
-
                         db_pass = 1
                     except Exception as e:
                         # print(e)
@@ -110,7 +99,6 @@ with get_db_connect() as conn:
                 if db_pass == 0:
                     try:
                         curs.execute(db_change("alter table " + create_table + " add column " + create + " longtext default ''"))
-
                         db_pass = 1
                     except Exception as e:
                         # print(e)
@@ -119,7 +107,6 @@ with get_db_connect() as conn:
                 if db_pass == 0:
                     try:
                         curs.execute(db_change("alter table " + create_table + " add column " + create + " longtext"))
-
                         db_pass = 1
                     except Exception as e:
                         # print(e)
@@ -216,37 +203,60 @@ with get_db_connect() as conn:
 
     # Init-DB_care
     if data_db_set['type'] == 'sqlite':
-        def back_up(back_time, back_up_where):
+        def back_up(back_time, back_up_where, back_up_count = 0):
             try:
+                if back_up_count != 0:
+                    file_dir = os.path.split(back_up_where)[0]
+                    file_dir = '.' if file_dir == '' else file_dir
+                    
+                    file_name = os.path.split(back_up_where)[1]
+                    file_name = re.sub(r'\.db$', '_[0-9]{14}.db', file_name)
+
+                    backup_file = [for_a for for_a in os.listdir(file_dir) if re.search('^' + file_name + '$', for_a)]
+                    backup_file = sorted(backup_file)
+                    
+                    if len(backup_file) >= back_up_count:
+                        remove_dir = os.path.join(file_dir, backup_file[0])
+                        os.remove(remove_dir)
+                        print('Back up : Remove (' + remove_dir + ')')
+
+                now_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
+                new_file_name = re.sub(r'\.db$', '_' + now_time + '.db', back_up_where)
                 shutil.copyfile(
                     data_db_set['name'] + '.db', 
-                    back_up_where.replace('%t', datetime.datetime.now().strftime('%Y-%m-%d_%H.%M.%S'))
+                    new_file_name
                 )
 
-                print('Back up : OK')
-            except:
+                print('Back up : OK (' + new_file_name + ')')
+            except Exception as e:
                 print('Back up : Error')
+                print(e)
 
             threading.Timer(
                 60 * 60 * back_time, 
                 back_up,
-                [back_time, back_up_where]
+                [back_time, back_up_where, back_up_count]
             ).start()
 
         curs.execute(db_change('select data from other where name = "back_up"'))
         back_time = curs.fetchall()
         back_time = float(number_check(back_time[0][0], True)) if back_time and back_time[0][0] != '' else 0
+
+        curs.execute(db_change('select data from other where name = "backup_count"'))
+        back_up_count = curs.fetchall()
+        back_up_count = int(number_check(back_up_count[0][0])) if back_up_count and back_up_count[0][0] != '' else 0
+
         if back_time != 0:
             curs.execute(db_change('select data from other where name = "backup_where"'))
             back_up_where = curs.fetchall()
-            if back_up_where and back_up_where[0][0] != '':
-                back_up_where = back_up_where[0][0]
-            else:
-                back_up_where = 'back_' + data_db_set['name'] + '.db'
+            back_up_where = back_up_where[0][0] if back_up_where and back_up_where[0][0] != '' else data_db_set['name'] + '.db'
 
             print('Back up state : ' + str(back_time) + ' hours')
+            print('Back up directory : ' + back_up_where)
+            if back_up_count != 0:
+                print('Back up max number : ' + str(back_up_count))
 
-            back_up(back_time, back_up_where)
+            back_up(back_time, back_up_where, back_up_count)
         else:
             print('Back up state : Turn off')
 

+ 1 - 0
lang/en-US.json

@@ -615,6 +615,7 @@
             "main_css_warning" : "If you have a problem using this, use the emergency tool.",
             "not_support_skin_warning" : "It does not work on skins that do not support this feature.",
             "old_page_warning" : "This page is out of date.",
+            "backup_warning" : "Warning. Files with the same name may be erased.",
         "_comment_" : "Challenge",
             "challenge_title_register" : "Hello, World!",
             "challenge_info_register" : "Sign up",

+ 2 - 1
lang/ko-KR.json

@@ -576,5 +576,6 @@
     "remove_blind_thread": "숨겨진 토론 보이지 않기",
     "trace": "추적",
     "view_history": "문서 열람 추적 사용",
-    "start_with_search" : "첫 글자부터 검색"
+    "start_with_search" : "첫 글자부터 검색",
+    "backup_warning" : "경고. 동일한 이름의 파일이 있는 경우 지워질 수 있습니다."
 }

+ 12 - 2
route/main_setting_main.py

@@ -41,7 +41,8 @@ def main_setting_main(db_set):
             37 : ['move_with_redirect', ''],
             38 : ['slow_thread', ''],
             39 : ['edit_timeout', '5'],
-            40 : ['document_content_max_length', '']
+            40 : ['document_content_max_length', ''],
+            41 : ['backup_count', '']
         }
 
         if flask.request.method == 'POST':
@@ -209,7 +210,11 @@ def main_setting_main(db_set):
                         <select name="update">''' + branch_div + '''</select>
 
                         <span ''' + sqlite_only + '''>
-                            <h3>''' + load_lang('sqlite_only') + '''</h3>
+                            <h3>''' + load_lang('backup') + ''' (''' + load_lang('sqlite_only') + ''')</h3>
+                            <span>''' + load_lang('backup_warning') + ''' (EX : data_YYYYMMDDHHMMSS.db)</span>
+                            <hr class="main_hr">
+                            <hr class="main_hr">
+                            
                             <span>''' + load_lang('backup_interval') + '''</span> (''' + load_lang('hour') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''') (''' + load_lang('restart_required') + ''')
                             <hr class="main_hr">
                             <input name="back_up" value="''' + html.escape(d_list[9]) + '''">
@@ -219,6 +224,11 @@ def main_setting_main(db_set):
                             <hr class="main_hr">
                             <input name="backup_where" value="''' + html.escape(d_list[21]) + '''">
                             <hr class="main_hr">
+
+                            <span>''' + load_lang('backup_count') + '''</span> (''' + load_lang('default') + ''' : ''' + load_lang('empty') + ''') (''' + load_lang('restart_required') + ''')
+                            <hr class="main_hr">
+                            <input name="backup_count" value="''' + html.escape(d_list[41]) + '''">
+                            <hr class="main_hr">
                         </span>
 
                         <h2>''' + load_lang('edit_set') + '''</h2>

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.6-RC5-dev45",
+        "r_ver" : "v3.4.6-RC5-dev46",
         "c_ver" : "3500373",
         "s_ver" : "3500112"
     }