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