Guest User

Untitled

a guest
Jun 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. import importlib
  2. import os
  3.  
  4. from django.conf import settings
  5.  
  6. from mobile.sniffer.chain import ChainedSniffer
  7.  
  8. class TemplateDirSwitcher(object):
  9. """
  10. Template Switching Middleware. Switches template dirs by using preset conditions
  11. and device families according to the devices capabilities. Returns the device
  12. object in the request object and resets the TEMPLATE_DIRS attr in the project
  13. settings.
  14. """
  15. def process_request(self, request):
  16. device_families = importlib.import_module(getattr(settings, 'DEVICE_FAMILIES', 'templateswitcher.device_families'))
  17. device_obj = getattr(request, 'device', None)
  18.  
  19. if not device_obj:
  20. # set the device switcher library according to the settings - defaults to wurfl
  21. device_switch_libs = getattr(settings, 'DEVICE_SWITCH_LIB', ['WurlfSniffer'])
  22. da_api = getattr(settings, 'DEVICE_ATLAS_API_FILE', None)
  23.  
  24. # import requied device library classes
  25. if 'ApexVertexSniffer' in device_switch_libs:
  26. from mobile.sniffer.apexvertex.sniffer import ApexVertexSniffer
  27. if 'WAPProfileSniffer' in device_switch_libs:
  28. from mobile.sniffer.wapprofile.sniffer import WAPProfileSniffer
  29. if 'DeviceAtlasSniffer' in device_switch_libs:
  30. if not os.path.exists(da_api):
  31. raise Exception('DEVICE_ATLAS_API_FILE must be in your setting and contain a valid path to use Device Atlas.')
  32. from mobile.sniffer.deviceatlas.sniffer import DeviceAtlasSniffer
  33. if 'WurlfSniffer' in device_switch_libs:
  34. from mobile.sniffer.wurlf.sniffer import WurlfSniffer
  35.  
  36. chained_libs = []
  37. for device_lib in device_switch_libs:
  38. chained_libs.append(eval(device_lib)())
  39.  
  40. # instantiate the sniffer and device object
  41. sniffer = ChainedSniffer(chained_libs)
  42. device_object = sniffer.sniff(request)
  43. template_set = device_families.get_device_family(device_object)
  44.  
  45. # copy the device object to the request object
  46. request.device = device_object
  47.  
  48. # switch the template dir for the given device
  49. settings.TEMPLATE_DIRS = (
  50. settings.DEVICE_TEMPLATE_DIRS[template_set],
  51. )
Add Comment
Please, Sign In to add comment