change session_end & add delete_photo & add print_qrcode

Brightcells vor 9 Jahren
Ursprung
Commit
978d0b8386
3 geänderte Dateien mit 95 neuen Zeilen und 10 gelöschten Zeilen
  1. 2 1
      .gitignore
  2. 9 0
      README.md
  3. 84 9
      main.py

+ 2 - 1
.gitignore

@@ -1,3 +1,4 @@
1 1
 .idea/
2 2
 .DS_Store
3
-minipai2.db
3
+minipai2.db
4
+minipai2.log

+ 9 - 0
README.md

@@ -0,0 +1,9 @@
1
+## Start
2
+* Default Port
3
+```
4
+nohup python main.py &>minipai2.log &
5
+```
6
+* Define Port
7
+```
8
+nohup python main.py --port=8002 &>minipai2.log &
9
+```

+ 84 - 9
main.py

@@ -1,5 +1,6 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+import errno
3 4
 import glob
4 5
 import os
5 6
 import sqlite3
@@ -17,7 +18,7 @@ options.parse_command_line()
17 18
 
18 19
 ROOT_PATH = '/tmp/minipai2'
19 20
 
20
-# 创建数据表语句
21
+# Create Table SQL
21 22
 CREATE_TABLE_STMT = """
22 23
     CREATE TABLE IF NOT EXISTS photoinfo (
23 24
     id integer primary key,
@@ -25,13 +26,15 @@ CREATE_TABLE_STMT = """
25 26
     session varchar(20),
26 27
     name varchar(13)
27 28
 );"""
28
-# 创建索引语句
29
+# Create Index SQL
29 30
 CREATE_INDEX1 = 'CREATE INDEX IF NOT EXISTS idx_lensman ON photoinfo (lensman);'
30 31
 CREATE_INDEX2 = 'CREATE INDEX IF NOT EXISTS idx_session ON photoinfo (session);'
31
-# 插入数据语句
32
-INSERT_RECORD_STMT = 'INSERT INTO photoinfo VALUES (NULL, ?, ?, ?)'
33
-# 查询数据语句
34
-SELECT_RECORD_STMT = 'SELECT MAX(name) FROM photoinfo WHERE lensman = ? and session = ?'
32
+# Insert Record SQL
33
+INSERT_RECORD_STMT = 'INSERT INTO photoinfo VALUES (NULL, ?, ?, ?);'
34
+# Delete Record SQL
35
+DELETE_RECORD_STMT = 'DELETE FROM photoinfo WHERE lensman = ? and session = ? and name = ?;'
36
+# Query Max(name) SQL
37
+SELECT_RECORD_STMT = 'SELECT MAX(name) FROM photoinfo WHERE lensman = ? and session = ?;'
35 38
 
36 39
 
37 40
 conn = sqlite3.connect('minipai2.db')
@@ -43,14 +46,35 @@ cur.execute(CREATE_INDEX2)
43 46
 conn.commit()
44 47
 
45 48
 
49
+# FILE OPERATE
50
+def silent_makdirs(path):
51
+    try:
52
+        os.makedirs(path)
53
+    except OSError as e:
54
+        if e.errno != errno.EEXIST:
55
+            raise
56
+
57
+
58
+def silent_remove(path):
59
+    try:
60
+        os.remove(path)
61
+    except OSError as e:
62
+        if e.errno != errno.ENOENT:
63
+            raise
64
+
65
+
66
+def get_session_root(lensman, session):
67
+    return '{}/{}'.format(ROOT_PATH, session)
68
+
69
+
46 70
 def get_session_dir(lensman, session):
47
-    return '{}/{}/{}'.format(ROOT_PATH, session, 'origin'), '{}/{}/{}'.format(ROOT_PATH, session, 'thumbnail')
71
+    session_root = get_session_root(lensman, session)
72
+    return '{}/{}'.format(session_root, 'origin'), '{}/{}'.format(session_root, 'thumbnail')
48 73
 
49 74
 
50 75
 def create_session_dir(lensman, session):
51 76
     for path in get_session_dir(lensman, session):
52
-        if not os.path.exists(path):
53
-            os.makedirs(path)
77
+        silent_makdirs(path)
54 78
 
55 79
 
56 80
 def get_last_timestamp(lensman, session):
@@ -64,6 +88,11 @@ def insert_session_file(lensman, session, name):
64 88
     conn.commit()
65 89
 
66 90
 
91
+def delete_session_file(lensman, session, name):
92
+    cur.execute(DELETE_RECORD_STMT, (lensman, session, name))
93
+    conn.commit()
94
+
95
+
67 96
 def get_new_files(lensman, session, maxt):
68 97
     _, thumb = get_session_dir(lensman, session)
69 98
     files = glob.iglob('{}/*'.format(thumb))
@@ -90,7 +119,10 @@ class SessionStartHandler(RequestHandler):
90 119
     def post(self):
91 120
         lensman = self.get_argument('lensman', '')
92 121
         session = self.get_argument('session', '')
122
+
93 123
         create_session_dir(lensman, session)
124
+        os.chmod(get_session_root(lensman, session), 0777)
125
+
94 126
         self.write({
95 127
             'status': 200,
96 128
         })
@@ -100,6 +132,9 @@ class SessionEndHandler(RequestHandler):
100 132
     def post(self):
101 133
         lensman = self.get_argument('lensman', '')
102 134
         session = self.get_argument('session', '')
135
+
136
+        os.chmod(get_session_root(lensman, session), 0700)
137
+
103 138
         self.write({
104 139
             'status': 200,
105 140
         })
@@ -138,12 +173,52 @@ class FetchOriginHandler(RequestHandler):
138 173
         })
139 174
 
140 175
 
176
+class DeletePhotoHandler(RequestHandler):
177
+    def post(self):
178
+        lensman = self.get_argument('lensman', '')
179
+        session = self.get_argument('session', '')
180
+
181
+        id_ = self.get_argument('id', '')
182
+        name = self.get_argument('name', '')
183
+        path = self.get_argument('path', '')
184
+
185
+        # Delete Record from Sqlite3
186
+        delete_session_file(lensman, session, id_)
187
+
188
+        # Delete Photo from Disk
189
+        origin, thumb = get_session_dir(lensman, session)
190
+        # Delete Thumbnail
191
+        silent_remove('{}/{}'.format(thumb, name))
192
+        # Delete Origin
193
+        silent_remove('{}/{}'.format(origin, name))
194
+
195
+        self.write({
196
+            'status': 200,
197
+        })
198
+
199
+
200
+class PrintQRCodeHandler(RequestHandler):
201
+    def post(self):
202
+        lensman = self.get_argument('lensman', '')
203
+        session = self.get_argument('session', '')
204
+
205
+        # Call ``C`` to Connect Printer
206
+        # Param
207
+        #   :: session
208
+
209
+        self.write({
210
+            'status': 200,
211
+        })
212
+
213
+
141 214
 handlers = [
142 215
     (r'/', HelloHandler),
143 216
     (r'/session_start', SessionStartHandler),
144 217
     (r'/session_end', SessionEndHandler),
145 218
     (r'/fetch_thumbnail', FetchThumbnailHandler),
146 219
     (r'/fetch_origin', FetchOriginHandler),
220
+    (r'/delete_photo', DeletePhotoHandler),
221
+    (r'/print_qrcode', PrintQRCodeHandler),
147 222
     (r'/static/(.*)', StaticFileHandler, {'path': ROOT_PATH}),
148 223
 ]
149 224