OSDN Git Service

age local test version
[pybbs/pybbs.git] / index.py
index db18789..7a0a28d 100755 (executable)
--- a/index.py
+++ b/index.py
@@ -4,8 +4,9 @@ import shutil,copy
 import tornado.auth
 import tornado.escape
 import tornado.web
+import tornado.wsgi
+import wsgiref.simple_server
 from tinydb import TinyDB,Query,where
-from tinydb.storages import MemoryStorage
 from tinydb.operations import delete
 from datetime import datetime
 
@@ -81,33 +82,38 @@ class NaviHandler(tornado.web.RequestHandler):
 
 class TitleHandler(NaviHandler):
     def get(self):
-        self.render('title.htm',coll=self.name(),full=self.full,
-                    count=self.count,title=self.title,update=self.update)            
-
-    def count(self,dbname):
-        if dbname in self.application.db.tables():
-            return len(self.application.db.table(dbname))
-        else:
-            return ''
-
-    def title(self,dbname):
-        if dbname in self.application.db.tables():
-            table = self.application.db.table(dbname)
+        rec = sorted(self.title(),key=lambda x: x['date2'])
+        self.render('title.htm',coll=rec,full=self.full)  
+        
+    def title(self):
+        for x in self.name():
+            item = {}
+            item['name'] = x
+            table = self.application.db.table(x)
+            i = len(table)
+            item['count'] = i            
             if table.contains(where('number') == 1) == True:
-                dic = table.get(where('number') == 1)
-                return dic['title']
+                s = table.get(where('number') == 1)['title']
             else:
-                return ''
-            
-    def update(self,dbname):
-        if dbname in self.application.db.tables():
-            table = self.application.db.table(dbname)
-            i = len(table)
+                s = ''
+            item['title'] = s   
             if i == 0:
-                return ''
+                item['date'] = ''
+                item['date2'] = 0
             else:
-                rec = sorted(table.all(),key=lambda x: x['number'])
-                return rec[i-1]['date']
+                rec = sorted(table.all(),key=lambda k: k['number'])
+                s = rec[i-1]['date']
+                item['date'] = s
+                i = datetime.strptime(s,'%Y/%m/%d %H:%M')
+                year = datetime.now().year-i.year
+                if year == 0:
+                    j = 800
+                elif year == 1:
+                    j = 400
+                else:
+                    j = 0
+                item['date2'] = j+31*(i.month-1)+i.day
+            yield item
         
 class RegistHandler(tornado.web.RequestHandler):
     def post(self,dbname):
@@ -129,7 +135,7 @@ class RegistHandler(tornado.web.RequestHandler):
                 break
         for line in com.splitlines(True):
             for word in words:
-                if word in line:
+                if word in line.lower():
                     error = error + u'タグ違反.('+word+')'       
             i += len(line)
             text = text+'<p>'+self.link(line)+'<br></p>'
@@ -147,9 +153,9 @@ class RegistHandler(tornado.web.RequestHandler):
             item = sorted(article.all(),key=lambda x: x['number'])[len(article)-1]
             no = item['number']+1
         if error == '':
-            reg = {'number':no,'name':na,'title':sub,'comment':text,'raw':com,'password':pw,'date':datetime.now().strftime('%Y/%m/%d %H:%M')}
+            s = datetime.now()
+            reg = {'number':no,'name':na,'title':sub,'comment':text,'raw':com,'password':pw,'date':s.strftime('%Y/%m/%d %H:%M')}
             article.insert(reg)
-            restart()
             self.set_cookie('username',tornado.escape.url_escape(na))
             self.redirect('/'+dbname+'#article')
         else:
@@ -203,8 +209,6 @@ class AdminHandler(BaseHandler):
             start = len(table)-i
             if start < 0:
                 start = 0
-        restart()
-        self.application.db = TinyDB(st.json)
         self.render('modules/admin.htm',position=pos,records=rec[start:start+i],mente=check,password=mente['password'],db=dbname)
 
 class AdminConfHandler(BaseHandler):
@@ -230,7 +234,6 @@ class AdminConfHandler(BaseHandler):
             table = self.application.db.table(dbname)
             for x in self.get_arguments('item'):
                 table.remove(where('number') == int(x))
-        restart()
         self.redirect('/'+dbname+'/admin/0/')
         
     def store(self):
@@ -247,17 +250,18 @@ class AdminConfHandler(BaseHandler):
                 if x in bak.tables():
                     table = database.table(x)
                     table.insert_multiple(bak.table(x).all())
-        restart()
           
 class UserHandler(tornado.web.RequestHandler):
     def post(self,dbname):
-        num = int(self.get_argument('number'))
-        pas = self.get_argument('password')
-        table = self.application.db.table(dbname)
-        qwr = Query()
-        obj = table.get(qwr.number == num)
-        if obj and(obj['password'] == pas):
-            table.remove(qwr.number == num)
+        num = self.get_argument('number')
+        if num.isdigit() == True:
+            num = int(num)
+            pas = self.get_argument('password')
+            table = self.application.db.table(dbname)
+            qwr = Query()
+            obj = table.get(qwr.number == num)
+            if obj and(obj['password'] == pas):
+                table.remove(qwr.number == num)
         self.redirect('/'+dbname)
       
 class SearchHandler(tornado.web.RequestHandler):       
@@ -265,47 +269,43 @@ class SearchHandler(tornado.web.RequestHandler):
         self.word = tornado.escape.url_unescape(self.get_argument('word1'))
         self.radiobox = self.get_argument('filter')
         self.set_cookie('search',tornado.escape.url_escape(self.word))         
-        rec = self.search(dbname)
+        rec = sorted(self.search(dbname),key=lambda x: x['number'])
         self.render('modules/search.htm',records=rec,word1=self.word,db=dbname)
     
     def get(self,dbname):
         if self.application.collection(dbname) == False:
             raise tornado.web.HTTPError(404)
             return
-        word = self.get_cookie('search')
+        word = self.get_cookie('search','')
+        word = tornado.escape.url_unescape(word)
         self.render('modules/search.htm',records=[],word1=word,db=dbname)
         
-    def search(self,name):
-        table = self.application.db.table(name)    
+    def search(self,dbname):
+        table = self.application.db.table(dbname)    
         element = self.word.split()
         if len(element) == 0:
             element = ['']
         while len(element) < 3:
             element.append(element[0])
         if self.radiobox == 'comment':
-            query = (Query()[self.radiobox].search(element[0])) | (Query()[self.radiobox].search(element[1])) | (Query()[self.radiobox].search(element[2]))
+            query = (Query().raw.search(element[0])) | (Query().raw.search(element[1])) | (Query().raw.search(element[2]))
         else:
-            query = (Query()[self.radiobox] == element[0]) | (Query()[self.radiobox] == element[1]) | (Query()[self.radiobox] == element[2])
-        if self.radiobox == 'comment':
-            rec = []
-            mem = TinyDB(storage=MemoryStorage)            
+            query = (Query().name == element[0]) | (Query().name == element[1]) | (Query().name == element[2])
+        if self.radiobox == 'comment':    
             for x in table.search(query):
-                result = ''
+                com = ''
                 for text in x['raw'].splitlines(True):                  
                     for word in self.word.split():                        
                         if text.find(word) > -1:
-                            result = result+'<p style=background-color:yellow>'+text+'<br></p>'  
+                            com = com +'<p style=background-color:yellow>'+text+'<br></p>'  
                             break                          
                     else:
-                        result = result+'<p>'+text+'<br></p>'
-                i = mem.insert(x)
-                mem.update({'comment':result},eids=[i])   
-                rec = sorted(mem.all(),key=lambda x: x['number'])
-            mem.close()
-            return rec        
+                        com = com+'<p>'+text+'<br></p>'
+                x['comment'] = com
+                yield x       
         else:
-            rec = table.search(query)
-            return sorted(rec,key=lambda x: x['number'])   
+            for x in table.search(query):
+                yield x
                                         
 class FooterModule(tornado.web.UIModule):
     def render(self,number,url,link):
@@ -323,7 +323,7 @@ class Application(tornado.web.Application):
                         'ui_modules':{'Footer':FooterModule},
                         'cookie_secret':'bZJc2sWbQLKos6GkHn/VB9oXwQt8SOROkRvJ5/xJ89E=',
                         'xsrf_cookies':True,
-                        'debug':True,
+                        #'debug':True,
                         'login_url':'/login'
                         }
         tornado.web.Application.__init__(self,handlers,**settings)
@@ -338,9 +338,8 @@ class Application(tornado.web.Application):
         return pos
     
     def collection(self,name):
-        for x in self.db.tables():
-            if x == name:
-                return True
+        if name in self.db.tables():
+            return True
         else:
             return False
 
@@ -349,9 +348,7 @@ class static():
     bak = 'static/db/bak.json'
 
 st = static()
-app = Application()
-
-def restart():
-    pass
-    #app.db.close()
-    #app.db = TinyDB(st.json)    
+app = tornado.wsgi.WSGIAdapter(Application())
+if __name__ == '__main__':
+    server = wsgiref.simple_server.make_server('',8888,app)
+    server.serve_forever()