Advertisement
mmornati

Untitled

Sep 5th, 2011
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.83 KB | None | 0 0
  1. import copy
  2.  
  3. from django.conf import settings
  4. from webui.widgets.models import Widget
  5. import logging
  6.  
  7. logger = logging.getLogger(__name__)
  8.  
  9. class WidgetCache(object):
  10.     def __init__(self):
  11.         self.discovered = False
  12.         self.widgets = {}
  13.         self.widgets_dashboard = {}
  14.  
  15.     def register(self, name, widget):
  16.         """
  17.        Register the widget in cache for later use.
  18.        """
  19.         if name in self.widgets:
  20.             raise KeyError, "Only one widget named %s can be registered." % name
  21.         widget.db_reference = self.check_widget_on_db(name)
  22.         self.widgets[name] = widget
  23.  
  24.     def discover_widgets(self):
  25.         if self.discovered:
  26.             return
  27.         for app in settings.INSTALLED_APPS:
  28.             # Just loading the module will do the trick
  29.             __import__(app, {}, {}, ['widgets'])
  30.         self.discovered = True
  31.  
  32.     def get_all_widgets(self):
  33.         self.discover_widgets()
  34.         return self.widgets.values()
  35.  
  36.     def get_widget(self, name):
  37.         """
  38.        Retrieve a widget from the cache.
  39.        """
  40.         return self.widgets[name]
  41.    
  42.     def get_widgets_dashboard(self, user):
  43.         if not self.widgets_dashboard:
  44.             logger.info("Loading all database widgets in memory")
  45.             #By default just two column are supported
  46.             for i in range(1, 3):
  47.                 col_widgets = Widget.objects.filter(column=i, enabled=True).order_by('order')
  48.                 self.widgets_dashboard[str(i)] = col_widgets.values()
  49.         #Check user_permissions and widget permissions
  50.         user_widgets = self.check_permissions(user)
  51.         if user_widgets:
  52.             return user_widgets
  53.         else:
  54.             return self.widgets_dashboard
  55.    
  56.     def check_permissions(self, user):
  57.         user_widget = {}
  58.         for i in range(1, 3):
  59.             user_widget[str(i)] = []
  60.             for widget_db in self.widgets_dashboard[str(i)]:
  61.                 widget = self.widgets[widget_db['name']]
  62.                 if len(widget.permissions)>0:
  63.                     logger.debug("Widget %s has set permissions. User must have the right permission to use it." % widget_db['name'])
  64.                     logger.debug("Required permissions: %s" % widget.permissions)
  65.                     if user.has_perms(widget.permissions):
  66.                         user_widget[str(i)].append(widget_db)
  67.                     else:
  68.                         logger.debug('User does not have permission to see this widget_db')
  69.                 else:
  70.                     logger.debug('Widget %s does not have permissions. Visibile to all users' % widget_db['name'])
  71.                     user_widget[str(i)].append(widget_db)
  72.                    
  73.         return user_widget
  74.                        
  75.                    
  76.                    
  77.                    
  78.     def refresh_widgets(self):
  79.         logger.info("Refreshing all database widgets in memory")
  80.         #By default just two column are supported
  81.         return Widget.objects.filter().values()
  82.                
  83.    
  84.     def check_widget_on_db(self, name):
  85.         #Also the 'abstract' widgets class is discovered
  86.         #So we exclude this class from the widgets imported into database
  87.         if not name == 'Widget':
  88.             widget = Widget.objects.filter(name=name)
  89.             if widget:
  90.                 logger.info("Widget " + name + " already present in database. Loading...")
  91.                 return widget[0]
  92.             else:
  93.                 logger.info("New widget discovered. Adding it to database.")
  94.                 widget = Widget.objects.create(name=name, title=name, enabled=False)
  95.                 return widget
  96.  
  97.     def reset_cache(self):
  98.         logger.info("Resetting Widget Cache")
  99.         #self.widgets = {}
  100.         self.widgets_dashboard = {}
  101.        
  102. registry = WidgetCache()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement