if res:
return bytes(res.content)
- def _update_lastseen(self, uuid):
- self.db.execute("UPDATE nopaste SET time_lastseen = NOW(), views = views + 1 \
- WHERE uuid = %s", uuid)
-
def cleanup(self):
"""
Removes all expired pastes and removes any unneeded blobs
def account(self):
return None
+ # Viewed?
+
+ def viewed(self):
+ """
+ Call this when this paste has been viewed/downloaded/etc.
+ """
+ self.db.execute("""
+ UPDATE
+ nopaste
+ SET
+ last_accessed_at = CURRENT_TIMESTAMP,
+ views = views + 1
+ WHERE
+ id = %s
+ """, self.id,
+ )
+
class Service(tornado.tcpserver.TCPServer):
def __init__(self, config, **kwargs):
class RawHandler(base.AnalyticsMixin, base.BaseHandler):
def get(self, uid):
- entry = self.backend.nopaste.get(uid)
- if not entry:
- raise tornado.web.HTTPError(404)
+ with self.db.transaction():
+ entry = self.backend.nopaste.get(uid)
+ if not entry:
+ raise tornado.web.HTTPError(404)
+
+ # This has received a view
+ entry.viewed()
# Set the filename
self.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry.subject)
class ViewHandler(base.AnalyticsMixin, base.BaseHandler):
def get(self, uid):
- entry = self.backend.nopaste.get(uid)
- if not entry:
- raise tornado.web.HTTPError(404)
+ with self.db.transaction():
+ entry = self.backend.nopaste.get(uid)
+ if not entry:
+ raise tornado.web.HTTPError(404)
+
+ # This has received a view
+ entry.viewed()
# Fetch the content if the output should be displayed
if entry.mimetype.startswith("text/"):