OSDN Git Service

css
[pybbs/pybbs.git] / index.py
index f54a249..5117eb3 100755 (executable)
--- a/index.py
+++ b/index.py
@@ -1,20 +1,12 @@
 
-import tornado.wsgi
-import wsgiref.simple_server
 import os.path
 import tornado.auth
 import tornado.escape
-import tornado.httpserver
-import tornado.ioloop
-import tornado.options
 import tornado.web
-from tornado.options import define,options
 from tinydb import TinyDB,Query,where
 from tinydb.operations import delete
 from datetime import datetime
 
-define('port',default=8000,help='run on the given port.',type=int)
-
 class BaseHandler(tornado.web.RequestHandler):
     def get_current_user(self):
         user = self.get_secure_cookie('admin_user')
@@ -37,7 +29,7 @@ class IndexHandler(BaseHandler):
             else:
                 self.render('regist.htm',content='urlが見つかりません')
         i = params['count']      
-        na = self.get_cookie('username')
+        na = tornado.escape.url_unescape(self.get_cookie("username",u"誰かさん"))
         pos = self.application.gpos(dbname,page)
         table = self.application.db.table(dbname)
         start = (pos-1)*i
@@ -45,7 +37,7 @@ class IndexHandler(BaseHandler):
             start = len(table)-i
             if start < 0:
                 start = 0
-        rec = table.all()[start:start+i]
+        rec = sorted(table.all(),key=lambda x: x['number'])[start:start+i]
         if len(table) >= 10*i:
             self.render('modules/full.htm',position=pos,records=rec,data=params,db=dbname)  
         self.render('modules/index.htm',position=pos,records=rec,data=params,username=na,db=dbname)
@@ -68,13 +60,51 @@ class LogoutHandler(BaseHandler):
         
 class NaviHandler(tornado.web.RequestHandler):
     def get(self):
-        self.render('top.htm',coll=self.name())
+        self.render('top.htm',coll=sorted(self.name()),full=self.full)
         
     def name(self):
         for x in self.application.db.tables():
             if x != '_default':
                 yield x
+                
+    def full(self,dbname):
+        if dbname in self.application.db.tables():
+            i = 10*self.application.db.get(where('kinds') == 'conf')['count']
+            table = self.application.db.table(dbname)
+            if len(table) >= i:
+                return True
+        return False
+
+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)
+            if table.contains(where('number') == 1) == True:
+                dic = table.get(where('number') == 1)
+                return dic['title']
+            else:
+                return ''
+            
+    def update(self,dbname):
+        if dbname in self.application.db.tables():
+            table = self.application.db.table(dbname)
+            i = len(table)
+            if i == 0:
+                return ''
+            else:
+                rec = sorted(table.all(),key=lambda x: x['number'])
+                return rec[i-1]['date']
+        
 class RegistHandler(tornado.web.RequestHandler):
     def post(self,dbname):
         if self.application.collection(dbname) == False:
@@ -98,8 +128,6 @@ class RegistHandler(tornado.web.RequestHandler):
                 error = error + u'禁止ワード.'
                 break
         pw = self.get_argument('password')
-        if na == '':
-            na = u'誰かさん'
         if sub == '':
             sub = u'タイトルなし.'
         if i == 0:
@@ -110,12 +138,12 @@ class RegistHandler(tornado.web.RequestHandler):
         if len(article) == 0:
             no = 1
         else:
-            item = article.get(where('number') == len(article))
+            item = article.all()[len(article)-1]
             no = item['number']+1
         if error == '':
-            reg = {'number':no,'name':na,'title':sub,'comment':text,'password':pw,'date':1}#datetime.today()}
+            reg = {'number':no,'name':na,'title':sub,'comment':text,'password':pw,'date':datetime.now().strftime('%Y/%D:%M')}
             article.insert(reg)
-            self.set_cookie('username',na)
+            self.set_cookie('username',tornado.escape.url_escape(na))
             self.redirect('/'+dbname+'#article')
         else:
             self.render('regist.htm',content=error)
@@ -128,7 +156,7 @@ class AdminHandler(BaseHandler):
         if self.application.collection(dbname) == False:
             self.render('regist.htm',content='urlが見つかりません')
         table = self.application.db.table(dbname) 
-        rec = table.all()                   
+        rec = sorted(table.all(),key=lambda x: x['number'])                   
         mente = self.application.db.get(where('kinds') == 'conf')
         if mente['mentenance'] == True:
             check = 'checked=checked'
@@ -152,7 +180,7 @@ class AdminConfHandler(BaseHandler):
                 self.application.db.update({'mentenance':mente,'password':word},where('kinds') == 'conf')     
         elif func == 'del':
             table = self.application.db.table(dbname)
-            for x in self.get_argument('item','0'):
+            for x in self.get_arguments('item'):
                 table.remove(where('number') == int(x))
         self.redirect('/'+dbname+'/admin/0/')
           
@@ -169,33 +197,25 @@ class UserHandler(tornado.web.RequestHandler):
       
 class SearchHandler(tornado.web.RequestHandler):       
     def post(self,dbname):
-        self.word = self.get_argument('word1')
-        self.radiobox = self.get_argument('filter')
-        self.set_cookie('search',self.word)
-        table = self.application.db.table(dbname)
-        self.render('modules/search.htm',records=self.mylist(table.all()),word1=self.word,db=dbname)
+        word = self.get_argument('word1')
+        radiobox = self.get_argument('filter')
+        self.set_cookie('search',word)
+        table = self.application.db.table(dbname)            
+        self.render('modules/search.htm',records=table.search(where(radiobox).matches(word)),word1=word,db=dbname)
     
     def get(self,dbname):
         word = self.get_cookie('search')
         self.render('modules/search.htm',records={},word1=word,db=dbname)
         
-    def mylist(self,rec):
-        for searchrec in rec:       
-            if self.radiobox == 'name':
-                if searchrec['name'].find(self.word) == True:
-                    yield searchrec
-            else:
-                if searchrec['comment'].find(self.word) == True:
-                    yield searchrec
-        
 class FooterModule(tornado.web.UIModule):
     def render(self,number,url,link):
         return self.render_string('modules/footer.htm',index=number,url=url,link=link)
     
-class Applications(tornado.web.Application):    
+class Application(tornado.web.Application):    
     def __init__(self):
         self.db = TinyDB('static/db/db.json')
-        handlers = [(r'/',NaviHandler),(r'/login',LoginHandler),(r'/logout',LogoutHandler),(r'/([a-zA-Z0-9_]+)',IndexHandler),(r'/([a-zA-Z0-9_]+)/([0-9]+)/',IndexHandler),
+        handlers = [(r'/',NaviHandler),(r'/login',LoginHandler),(r'/logout',LogoutHandler),(r'/title',TitleHandler),
+                    (r'/([a-zA-Z0-9_]+)',IndexHandler),(r'/([a-zA-Z0-9_]+)/([0-9]+)/',IndexHandler),
                     (r'/([a-zA-Z0-9_]+)/admin/([0-9]+)/',AdminHandler),(r'/([a-zA-Z0-9_]+)/admin/([a-z]+)/',AdminConfHandler),(r'/([a-zA-Z0-9_]+)/userdel',UserHandler),
                     (r'/([a-zA-Z0-9_]+)/search',SearchHandler),(r'/([a-zA-Z0-9_]+)/regist',RegistHandler)]
         settings = {'template_path':os.path.join(os.path.dirname(__file__),'pybbs'),
@@ -224,9 +244,5 @@ class Applications(tornado.web.Application):
         else:
             return False
         
-if __name__ == '__main__':
-    tornado.options.parse_command_line()
-    wsgi_app = tornado.wsgi.WSGIAdapter(Applications())
-    server = wsgiref.simple_server.make_server('',9157,wsgi_app)
-    server.serve_forever()
+app = Application()