realize some api

Brightcells %!s(int64=9) %!d(string=hace) años
padre
commit
fe2492c3bf
Se han modificado 2 ficheros con 132 adiciones y 3 borrados
  1. 3 1
      .gitignore
  2. 129 2
      main.py

+ 3 - 1
.gitignore

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

+ 129 - 2
main.py

@@ -1,9 +1,13 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+import glob
4
+import os
5
+import sqlite3
6
+
3 7
 from tornado.httpserver import HTTPServer
4 8
 from tornado.ioloop import IOLoop
5 9
 from tornado.options import define, options
6
-from tornado.web import Application, RequestHandler
10
+from tornado.web import Application, RequestHandler, StaticFileHandler
7 11
 
8 12
 
9 13
 define('host', default='127.0.0.1', help='run on the given host', type=str)
@@ -11,13 +15,136 @@ define('port', default=8001, help='run on the given port', type=int)
11 15
 options.parse_command_line()
12 16
 
13 17
 
18
+ROOT_PATH = '/tmp/minipai2'
19
+
20
+# 创建数据表语句
21
+CREATE_TABLE_STMT = """
22
+    CREATE TABLE IF NOT EXISTS photoinfo (
23
+    id integer primary key,
24
+    lensman varchar(20),
25
+    session varchar(20),
26
+    name varchar(13)
27
+);"""
28
+# 创建索引语句
29
+CREATE_INDEX1 = 'CREATE INDEX IF NOT EXISTS idx_lensman ON photoinfo (lensman);'
30
+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 = ?'
35
+
36
+
37
+conn = sqlite3.connect('minipai2.db')
38
+cur = conn.cursor()
39
+# 执行语句
40
+cur.execute(CREATE_TABLE_STMT)
41
+cur.execute(CREATE_INDEX1)
42
+cur.execute(CREATE_INDEX2)
43
+conn.commit()
44
+
45
+
46
+def get_session_dir(lensman, session):
47
+    return '{}/{}/{}'.format(ROOT_PATH, session, 'origin'), '{}/{}/{}'.format(ROOT_PATH, session, 'thumbnail')
48
+
49
+
50
+def create_session_dir(lensman, session):
51
+    for path in get_session_dir(lensman, session):
52
+        if not os.path.exists(path):
53
+            os.makedirs(path)
54
+
55
+
56
+def get_last_timestamp(lensman, session):
57
+    cur.execute(SELECT_RECORD_STMT, (lensman, session))
58
+    result = cur.fetchall()
59
+    return int(result[0][0] or 0)
60
+
61
+
62
+def insert_session_file(lensman, session, name):
63
+    cur.execute(INSERT_RECORD_STMT, (lensman, session, name))
64
+    conn.commit()
65
+
66
+
67
+def get_new_files(lensman, session, maxt):
68
+    _, thumb = get_session_dir(lensman, session)
69
+    files = glob.iglob('{}/*'.format(thumb))
70
+    news = []
71
+    for file in files:
72
+        filename = file.split('/')[-1]
73
+        name = filename.split('.')[0]
74
+        if int(name) > maxt:
75
+            insert_session_file(lensman, session, name)
76
+            news.append({
77
+                'id': name,
78
+                'name': filename,
79
+                'path': file.strip(ROOT_PATH),
80
+            })
81
+    return news
82
+
83
+
14 84
 class HelloHandler(RequestHandler):
15 85
     def get(self):
16 86
         self.write('Hello Tornado')
17 87
 
18 88
 
89
+class SessionStartHandler(RequestHandler):
90
+    def post(self):
91
+        lensman = self.get_argument('lensman', '')
92
+        session = self.get_argument('session', '')
93
+        create_session_dir(lensman, session)
94
+        self.write({
95
+            'status': 200,
96
+        })
97
+
98
+
99
+class SessionEndHandler(RequestHandler):
100
+    def post(self):
101
+        lensman = self.get_argument('lensman', '')
102
+        session = self.get_argument('session', '')
103
+        self.write({
104
+            'status': 200,
105
+        })
106
+
107
+
108
+class FetchThumbnailHandler(RequestHandler):
109
+    def post(self):
110
+        lensman = self.get_argument('lensman', '')
111
+        session = self.get_argument('session', '')
112
+
113
+        maxt = get_last_timestamp(lensman, session)
114
+        files = get_new_files(lensman, session, maxt)
115
+
116
+        self.write({
117
+            'status': 200,
118
+            'data': {
119
+                'files': files
120
+            }
121
+        })
122
+
123
+
124
+class FetchOriginHandler(RequestHandler):
125
+    def post(self):
126
+        lensman = self.get_argument('lensman', '')
127
+        session = self.get_argument('session', '')
128
+
129
+        name = self.get_argument('name', '')
130
+
131
+        origin, _ = get_session_dir(lensman, session)
132
+
133
+        self.write({
134
+            'status': 200,
135
+            'data': {
136
+                'origin': '{}/{}'.format(origin, name).strip(ROOT_PATH)
137
+            }
138
+        })
139
+
140
+
19 141
 handlers = [
20
-    (r'/', HelloHandler)
142
+    (r'/', HelloHandler),
143
+    (r'/session_start', SessionStartHandler),
144
+    (r'/session_end', SessionEndHandler),
145
+    (r'/fetch_thumbnail', FetchThumbnailHandler),
146
+    (r'/fetch_origin', FetchOriginHandler),
147
+    (r'/static/(.*)', StaticFileHandler, {'path': ROOT_PATH}),
21 148
 ]
22 149
 
23 150