backing up
[vsorcdistro/.git] / ryu / build / lib.linux-armv7l-2.7 / ryu / services / protocols / bgp / operator / views / fields.py
1 import importlib
2 import inspect
3
4 import six
5
6
7 class Field(object):
8     def __init__(self, field_name):
9         self.field_name = field_name
10
11     def get(self, obj):
12         return getattr(obj, self.field_name)
13
14
15 class RelatedViewField(Field):
16     def __init__(self, field_name, operator_view_class):
17         super(RelatedViewField, self).__init__(field_name)
18         self.__operator_view_class = operator_view_class
19
20     @property
21     def _operator_view_class(self):
22         if inspect.isclass(self.__operator_view_class):
23             return self.__operator_view_class
24         elif isinstance(self.__operator_view_class, six.string_types):
25             try:
26                 module_name, class_name =\
27                     self.__operator_view_class.rsplit('.', 1)
28                 return class_for_name(module_name, class_name)
29             except (AttributeError, ValueError, ImportError):
30                 raise WrongOperatorViewClassError(
31                     'There is no "%s" class' % self.__operator_view_class
32                 )
33
34     def retrieve_and_wrap(self, obj):
35         related_obj = self.get(obj)
36         return self.wrap(related_obj)
37
38     def wrap(self, obj):
39         return self._operator_view_class(obj)
40
41
42 class RelatedListViewField(RelatedViewField):
43     pass
44
45
46 class RelatedDictViewField(RelatedViewField):
47     pass
48
49
50 class DataField(Field):
51     pass
52
53
54 class OptionalDataField(DataField):
55     def get(self, obj):
56         if hasattr(obj, self.field_name):
57             return getattr(obj, self.field_name)
58         else:
59             return None
60
61
62 class WrongOperatorViewClassError(Exception):
63     pass
64
65
66 def class_for_name(module_name, class_name):
67     # load the module, will raise ImportError if module cannot be loaded
68     m = importlib.import_module(module_name)
69     # get the class, will raise AttributeError if class cannot be found
70     c = getattr(m, class_name)
71     return c