/kai/controllers/tracebacks.py

https://bitbucket.org/bbangert/kai/ · Python · 67 lines · 56 code · 9 blank · 2 comment · 9 complexity · 4fff63e5a958a5bef16b66a01175a732 MD5 · raw file

  1. import logging
  2. from paste.script.util.uuid import uuid4
  3. from pylons import request, response, session, tmpl_context as c
  4. from pylons.controllers.util import abort, redirect
  5. from pylons.decorators import jsonify
  6. from kai.lib.base import BaseController, CMSObject, render
  7. from kai.lib.helpers import success_flash
  8. from kai.model import Comment, Human, Traceback
  9. log = logging.getLogger(__name__)
  10. class TracebacksController(BaseController, CMSObject):
  11. _cms_object = Traceback
  12. def __before__(self):
  13. c.active_tab = 'Tools'
  14. c.active_sub = 'Tracebacks'
  15. def index(self):
  16. start = request.GET.get('start', '1')
  17. startkey = request.GET.get('startkey')
  18. prevkey = request.GET.get('prevkey')
  19. if startkey:
  20. c.tracebacks = Traceback.by_time(self.db, descending=True, startkey=startkey, limit=11)
  21. elif prevkey:
  22. c.tracebacks = Traceback.by_time(self.db, startkey=prevkey, limit=11)
  23. c.reverse = True
  24. else:
  25. c.tracebacks = Traceback.by_time(self.db, descending=True, limit=11)
  26. c.start = start
  27. return render('/tracebacks/index.mako')
  28. @jsonify
  29. def create(self):
  30. """Create a new traceback in the system, pegged to the current
  31. user ID and session ID"""
  32. tb = Traceback.from_xml(request.body)
  33. tb.uuid = uuid4()
  34. tb.store(self.db)
  35. result = {}
  36. uuid = tb.uuid
  37. result['traceback'] = dict(link=tb.id, uuid=uuid)
  38. return result
  39. def reown(self, id):
  40. if 'uuid' not in request.GET:
  41. abort(500)
  42. tb = Traceback.load(self.db, id) or abort(404)
  43. session.save()
  44. if c.user:
  45. tb.displayname = c.user.displayname
  46. tb.human_id = c.user.id
  47. tb.email = c.user.email
  48. else:
  49. tb.session_id = session.id
  50. tb.uuid = None
  51. tb.store(self.db)
  52. return 'ok'
  53. def show(self, id):
  54. c.traceback = Traceback.load(self.db, id) or abort(404)
  55. if c.traceback.displayname:
  56. c.author = Human.load(self.db, c.traceback.human_id)
  57. c.is_owner = self._check_owner(c.traceback, c.user, check_session=True)
  58. return render('/tracebacks/show.mako')