PageRenderTime 26ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/indico/MaKaC/services/implementation/upcoming.py

https://github.com/davidmorrison/indico
Python | 104 lines | 70 code | 34 blank | 0 comment | 8 complexity | 75113f83a5af3b4c303a85fc07ca27d4 MD5 | raw file
  1. import datetime
  2. from MaKaC.services.implementation.base import ParameterManager, AdminService
  3. from MaKaC.services.interface.rpc.common import ServiceError
  4. from MaKaC import conference
  5. from MaKaC.common.fossilize import fossilize
  6. from MaKaC.fossils.modules import IObservedObjectFossil
  7. from indico.modules import ModuleHolder
  8. class ConfigUpcomingEventsBase(AdminService):
  9. def _checkParams(self):
  10. AdminService._checkParams(self)
  11. self._pm = ParameterManager(self._params)
  12. def _getAnswer(self):
  13. upcomingModule = ModuleHolder().getById("upcoming_events")
  14. return self._getResult(upcomingModule)
  15. class ChangeCacheTTL(ConfigUpcomingEventsBase):
  16. def _checkParams(self):
  17. ConfigUpcomingEventsBase._checkParams(self)
  18. self._newTTL = self._pm.extract("value", pType=int, allowEmpty=True)
  19. def _getResult(self, module):
  20. if self._newTTL:
  21. module.setCacheTTL(datetime.timedelta(minutes=self._newTTL))
  22. return module.getCacheTTL().seconds/60
  23. class ChangeNumberUpcomingItems(ConfigUpcomingEventsBase):
  24. def _checkParams(self):
  25. ConfigUpcomingEventsBase._checkParams(self)
  26. self._newNumberItems = self._pm.extract("value", pType=int, allowEmpty=True)
  27. def _getResult(self, module):
  28. if self._newNumberItems:
  29. module.setNumberItems(self._newNumberItems)
  30. return module.getNumberItems()
  31. class GetEventCategoryList(ConfigUpcomingEventsBase):
  32. def _getResult(self, module):
  33. return fossilize(module.getObjectList(), IObservedObjectFossil);
  34. class ObservedObjectBase(ConfigUpcomingEventsBase):
  35. def _checkParams(self):
  36. ConfigUpcomingEventsBase._checkParams(self)
  37. self._objType = self._pm.extract("type", pType=str, allowEmpty=False)
  38. self._objId = self._pm.extract("id", pType=str, allowEmpty=False)
  39. if self._objType == 'event':
  40. try:
  41. self._obj = conference.ConferenceHolder().getById(self._objId)
  42. except:
  43. raise ServiceError("ERR-O0", "Event '%s' does not exist" % self._objId)
  44. elif self._objType == 'category':
  45. try:
  46. self._obj = conference.CategoryManager().getById(self._objId)
  47. except:
  48. raise ServiceError("ERR-O1", "Category '%s' does not exist" % self._objId)
  49. else:
  50. raise ServiceError("ERR-O2", "Unknown type!")
  51. class AddObservedObject(ObservedObjectBase):
  52. def _checkParams(self):
  53. ObservedObjectBase._checkParams(self)
  54. self._objWeight = self._pm.extract("weight", pType=float, allowEmpty=False)
  55. self._objDelta = self._pm.extract("delta", pType=int, allowEmpty=False)
  56. def _getResult(self, module):
  57. if module.hasObject(self._obj):
  58. raise ServiceError("ERR-O3", "Object is already in the list!")
  59. module.addObject(self._obj, self._objWeight, datetime.timedelta(days=self._objDelta))
  60. return fossilize(module.getObjectList()[-1], IObservedObjectFossil);
  61. class RemoveObservedObject(ObservedObjectBase):
  62. def _getResult(self, module):
  63. module.removeObject(self._obj)
  64. methodMap = {
  65. "admin.changeCacheTTL": ChangeCacheTTL,
  66. "admin.changeNumberItems": ChangeNumberUpcomingItems,
  67. "admin.getEventCategoryList": GetEventCategoryList,
  68. "admin.addObservedObject": AddObservedObject,
  69. "admin.removeObservedObject": RemoveObservedObject
  70. }