Revision bea584e1 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
93 | 93 |
inf = float('inf') |
94 | 94 |
|
95 | 95 |
|
96 |
class Service(models.Model):
|
|
96 |
class Component(models.Model):
|
|
97 | 97 |
name = models.CharField(_('Name'), max_length=255, unique=True, |
98 | 98 |
db_index=True) |
99 |
url = models.CharField(_('Service url'), max_length=255, null=True, |
|
100 |
help_text=_("URL the service is accessible from")) |
|
101 |
api_url = models.CharField(_('Service API url'), max_length=255, null=True) |
|
102 |
type = models.CharField(_('Type'), max_length=255, null=True, blank='True') |
|
99 |
url = models.CharField(_('Component url'), max_length=255, null=True, |
|
100 |
help_text=_("URL the component is accessible from")) |
|
103 | 101 |
auth_token = models.CharField(_('Authentication Token'), max_length=32, |
104 | 102 |
null=True, blank=True) |
105 | 103 |
auth_token_created = models.DateTimeField(_('Token creation date'), |
... | ... | |
110 | 108 |
def renew_token(self, expiration_date=None): |
111 | 109 |
md5 = hashlib.md5() |
112 | 110 |
md5.update(self.name.encode('ascii', 'ignore')) |
113 |
md5.update(self.api_url.encode('ascii', 'ignore'))
|
|
111 |
md5.update(self.url.encode('ascii', 'ignore')) |
|
114 | 112 |
md5.update(asctime()) |
115 | 113 |
|
116 | 114 |
self.auth_token = b64encode(md5.digest()) |
... | ... | |
126 | 124 |
@classmethod |
127 | 125 |
def catalog(cls, orderfor=None): |
128 | 126 |
catalog = {} |
129 |
services = list(cls.objects.all())
|
|
130 |
default_metadata = presentation.SERVICES
|
|
127 |
components = list(cls.objects.all())
|
|
128 |
default_metadata = presentation.COMPONENTS
|
|
131 | 129 |
metadata = {} |
132 | 130 |
|
133 |
for service in services: |
|
134 |
d = {'api_url': service.api_url, |
|
135 |
'url': service.url, |
|
136 |
'name': service.name} |
|
137 |
if service.name in default_metadata: |
|
138 |
metadata[service.name] = default_metadata.get(service.name) |
|
139 |
metadata[service.name].update(d) |
|
131 |
for component in components: |
|
132 |
d = {'url': component.url, |
|
133 |
'name': component.name} |
|
134 |
if component.name in default_metadata: |
|
135 |
metadata[component.name] = default_metadata.get(component.name) |
|
136 |
metadata[component.name].update(d) |
|
140 | 137 |
else: |
141 |
metadata[service.name] = d
|
|
138 |
metadata[component.name] = d
|
|
142 | 139 |
|
143 | 140 |
|
144 |
def service_by_order(s):
|
|
141 |
def component_by_order(s):
|
|
145 | 142 |
return s[1].get('order') |
146 | 143 |
|
147 |
def service_by_dashbaord_order(s):
|
|
144 |
def component_by_dashboard_order(s):
|
|
148 | 145 |
return s[1].get('dashboard').get('order') |
149 | 146 |
|
150 | 147 |
metadata = dict_merge(metadata, |
151 |
astakos_settings.SERVICES_META)
|
|
148 |
astakos_settings.COMPONENTS_META)
|
|
152 | 149 |
|
153 |
for service, info in metadata.iteritems():
|
|
154 |
default_meta = presentation.service_defaults(service)
|
|
155 |
base_meta = metadata.get(service, {})
|
|
156 |
settings_meta = astakos_settings.SERVICES_META.get(service, {})
|
|
157 |
service_meta = dict_merge(default_meta, base_meta)
|
|
158 |
meta = dict_merge(service_meta, settings_meta)
|
|
159 |
catalog[service] = meta
|
|
150 |
for component, info in metadata.iteritems():
|
|
151 |
default_meta = presentation.component_defaults(component)
|
|
152 |
base_meta = metadata.get(component, {})
|
|
153 |
settings_meta = astakos_settings.COMPONENTS_META.get(component, {})
|
|
154 |
component_meta = dict_merge(default_meta, base_meta)
|
|
155 |
meta = dict_merge(component_meta, settings_meta)
|
|
156 |
catalog[component] = meta
|
|
160 | 157 |
|
161 |
order_key = service_by_order
|
|
158 |
order_key = component_by_order
|
|
162 | 159 |
if orderfor == 'dashboard': |
163 |
order_key = service_by_dashbaord_order
|
|
160 |
order_key = component_by_dashboard_order
|
|
164 | 161 |
|
165 | 162 |
ordered_catalog = OrderedDict(sorted(catalog.iteritems(), |
166 | 163 |
key=order_key)) |
... | ... | |
180 | 177 |
return resource_presentation |
181 | 178 |
|
182 | 179 |
|
180 |
class Service(models.Model): |
|
181 |
name = models.CharField(_('Name'), max_length=255, unique=True, |
|
182 |
db_index=True) |
|
183 |
url = models.CharField(_('Service url'), max_length=255, null=True, |
|
184 |
help_text=_("URL the service is accessible from")) |
|
185 |
api_url = models.CharField(_('Service API url'), max_length=255, null=True) |
|
186 |
type = models.CharField(_('Type'), max_length=255, null=True, blank='True') |
|
187 |
auth_token = models.CharField(_('Authentication Token'), max_length=32, |
|
188 |
null=True, blank=True) |
|
189 |
auth_token_created = models.DateTimeField(_('Token creation date'), |
|
190 |
null=True) |
|
191 |
auth_token_expires = models.DateTimeField(_('Token expiration date'), |
|
192 |
null=True) |
|
193 |
|
|
194 |
|
|
183 | 195 |
class Resource(models.Model): |
184 | 196 |
name = models.CharField(_('Name'), max_length=255, unique=True) |
185 | 197 |
desc = models.TextField(_('Description'), null=True) |
186 | 198 |
service = models.ForeignKey(Service) |
199 |
service_type = models.CharField(_('Type'), max_length=255) |
|
187 | 200 |
unit = models.CharField(_('Unit'), null=True, max_length=255) |
188 | 201 |
uplimit = intDecimalField(default=0) |
189 | 202 |
allow_in_projects = models.BooleanField(default=True) |
... | ... | |
197 | 210 |
return str(self) |
198 | 211 |
|
199 | 212 |
def get_info(self): |
200 |
return {'service': str(self.service),
|
|
213 |
return {'service_type': self.service_type,
|
|
201 | 214 |
'description': self.desc, |
202 | 215 |
'unit': self.unit, |
203 | 216 |
'allow_in_projects': self.allow_in_projects, |
... | ... | |
2172 | 2185 |
if not instance.auth_token: |
2173 | 2186 |
instance.renew_token() |
2174 | 2187 |
pre_save.connect(renew_token, sender=AstakosUser) |
2175 |
pre_save.connect(renew_token, sender=Service) |
|
2188 |
pre_save.connect(renew_token, sender=Component) |
Also available in: Unified diff