Esempio n. 1
0
 def get(self):
     try:
         # パスの解析
         name =  self.request.path.split('/')[2]
         (key, type) = name.split('.')
         key = db.Key(key)
         output_encoding = [images.PNG, images.JPEG][['png', 'jpg'].index(type)]
         # カウンターの取得
         counter = Counter.get(key)
         if not counter:
             responses.display_error(self, 404)
             return
         # アクセス履歴情報の取得
         record = {
             'referer'     : self.request.headers.get('Referer'),
             'user_agent'  : self.request.headers.get('User-Agent'),
             'remote_addr' : self.request.remote_addr,
             }
         # カウントのインクリメント
         result = db.run_in_transaction(self.increment_count, counter.key(), record)
         count = Counter.get(result).count
         logging.debug(count)
         # 新しいカウントを桁毎に区切る
         digits = []
         while count / 10 != 0:
             digits.append(count % 10)
             count /= 10
         digits.append(count)
         # 使用する画像データの読み込み
         image_data = {}
         for number_image in NumberImage.all().ancestor(key).filter('number in', digits):
             image_data[number_image.number] = number_image.data
         # 合成するデータの決定
         image_list = []
         offset = 0
         for i in reversed(digits):
             image_list.append((image_data[i], offset, 0, 1.0, images.TOP_LEFT))
             offset += 64
         # 合成して出力
         image = images.composite(image_list, offset, 128, output_encoding=output_encoding)
         if output_encoding == images.PNG:
             self.response.headers['Content-Type'] = 'image/png'
         elif output_encoding == images.JPEG:
             self.response.headers['Content-Type'] = 'image/jpeg'
         self.response.out.write(image)
     except ValueError, error:
         logging.error('invalid path')
         responses.display_error(self, 404)
Esempio n. 2
0
 def get(self):
     """
     ancestorへのkeyとnumから画像を引き当てて表示する
     """
     try:
         key = db.Key(self.request.get('key'))
         num = int(self.request.get('num'))
         results = NumberImage.all().ancestor(key).filter('number = ', num)
         if results.count() != 1:
             responses.display_error(self, 404)
             return
         self.response.headers['Content-Type'] = "image/png"
         self.response.out.write(results[0].data)
     except Exception, exception:
         logging.error(str(exception))
         responses.display_error(self, 404)
Esempio n. 3
0
 def get(self):
     try:
         user = users.get_current_user()
         # requestのkeyに対応するCounterを取得
         counter = Counter.get(db.Key(encoded=self.request.get("key")))
         # 現在のユーザーと関連づけられていなければ403エラー
         if counter == None or user != counter.user:
             responses.display_error(self, 403)
             return
         template_values = {
             "user": user,
             "user_url": users.create_logout_url("/"),
             "counter": counter,
             "records": AccessRecord.all().ancestor(counter).order("-count"),
         }
         path = os.path.join(os.path.dirname(__file__), os.pardir, "templates", "record.html")
         self.response.out.write(template.render(path, template_values))
     # requestのkeyが正しくない場合
     except BadKeyError, error:
         logging.error(str(error))
         responses.display_error(self, 400)
Esempio n. 4
0
 def get(self):
     try:
         user = users.get_current_user()
         # requestのkeyに対応するCounterを取得
         counter = Counter.get(db.Key(encoded = self.request.get('key')))
         # 現在のユーザーと関連づけられていなければ403エラー
         if counter == None or user != counter.user:
             responses.display_error(self, 403)
             return
         template_values = {
             'user'     : user,
             'user_url' : users.create_logout_url('/'),
             'counter'  : counter,
             'loop'     : range(10),
             }
         path = os.path.join(os.path.dirname(__file__), os.pardir, 'templates', 'config.html')
         self.response.out.write(template.render(path, template_values))
     # requestのkeyが正しくない場合
     except BadKeyError, error:
         logging.error(str(error))
         responses.display_error(self, 400)
Esempio n. 5
0
 def post(self):
     """
     requestからkeyを受け取り、対応するCounterのentityを削除する
     """
     try:
         # 削除する対象を取得
         counter = Counter.get(db.Key(encoded = self.request.get('key')))
         # 現在のユーザーと関連づけられていなければ403エラー
         if counter == None or counter.user != users.get_current_user():
             responses.display_error(self, 403)
             return
         # 関連画像、アクセス履歴ともに一括削除
         for image in counter.image:
             NumberImage.get(image).delete()
         for record in AccessRecord.all().ancestor(counter):
             record.delete()
         counter.delete()
         self.redirect('/')
     # requestのkeyが正しくない場合
     except BadKeyError, error:
         logging.error(str(error))
         responses.display_error(self, 400)
Esempio n. 6
0
 def get(self):
     responses.display_error(self, 404)
Esempio n. 7
0
 def get(self):
     """
     GETは404とする
     """
     responses.display_error(self, 404)