Revision 26551b92 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
98 | 98 |
_content_type = content_type |
99 | 99 |
return content_type |
100 | 100 |
|
101 |
RESOURCE_SEPARATOR = '.' |
|
102 |
|
|
103 | 101 |
inf = float('inf') |
104 | 102 |
|
105 | 103 |
class Service(models.Model): |
... | ... | |
132 | 130 |
def __str__(self): |
133 | 131 |
return self.name |
134 | 132 |
|
135 |
@property |
|
136 |
def resources(self): |
|
137 |
return self.resource_set.all() |
|
138 |
|
|
139 |
@resources.setter |
|
140 |
def resources(self, resources): |
|
141 |
for s in resources: |
|
142 |
self.resource_set.create(**s) |
|
143 |
|
|
144 | 133 |
|
145 | 134 |
_presentation_data = {} |
146 | 135 |
def get_presentation(resource): |
... | ... | |
154 | 143 |
|
155 | 144 |
class Resource(models.Model): |
156 | 145 |
name = models.CharField(_('Name'), max_length=255, unique=True) |
157 |
service = models.ForeignKey(Service) |
|
158 | 146 |
desc = models.TextField(_('Description'), null=True) |
159 |
unit = models.CharField(_('Name'), null=True, max_length=255) |
|
160 |
group = models.CharField(_('Group'), null=True, max_length=255) |
|
147 |
service = models.CharField(_('Service identifier'), max_length=255, |
|
148 |
null=True) |
|
149 |
unit = models.CharField(_('Unit'), null=True, max_length=255) |
|
161 | 150 |
uplimit = intDecimalField(default=0) |
162 | 151 |
|
163 | 152 |
objects = ForUpdateManager() |
... | ... | |
175 | 164 |
} |
176 | 165 |
|
177 | 166 |
@property |
167 |
def group(self): |
|
168 |
default = self.name |
|
169 |
return get_presentation(str(self)).get('group', default) |
|
170 |
|
|
171 |
@property |
|
178 | 172 |
def help_text(self): |
179 |
return get_presentation(str(self)).get('help_text', '') |
|
173 |
default = "%s resource" % self.name |
|
174 |
return get_presentation(str(self)).get('help_text', default) |
|
180 | 175 |
|
181 | 176 |
@property |
182 | 177 |
def help_text_input_each(self): |
183 |
return get_presentation(str(self)).get('help_text_input_each', '') |
|
178 |
default = "%s resource" % self.name |
|
179 |
return get_presentation(str(self)).get('help_text_input_each', default) |
|
184 | 180 |
|
185 | 181 |
@property |
186 | 182 |
def is_abbreviation(self): |
... | ... | |
188 | 184 |
|
189 | 185 |
@property |
190 | 186 |
def report_desc(self): |
191 |
return get_presentation(str(self)).get('report_desc', '') |
|
187 |
default = "%s resource" % self.name |
|
188 |
return get_presentation(str(self)).get('report_desc', default) |
|
192 | 189 |
|
193 | 190 |
@property |
194 | 191 |
def placeholder(self): |
195 |
return get_presentation(str(self)).get('placeholder', '')
|
|
192 |
return get_presentation(str(self)).get('placeholder', self.unit)
|
|
196 | 193 |
|
197 | 194 |
@property |
198 | 195 |
def verbose_name(self): |
199 |
return get_presentation(str(self)).get('verbose_name', '')
|
|
196 |
return get_presentation(str(self)).get('verbose_name', self.name)
|
|
200 | 197 |
|
201 | 198 |
@property |
202 | 199 |
def display_name(self): |
... | ... | |
408 | 405 |
self, resource, capacity, |
409 | 406 |
update=True): |
410 | 407 |
"""Raises ObjectDoesNotExist, IntegrityError""" |
411 |
s, sep, r = resource.partition(RESOURCE_SEPARATOR) |
|
412 |
resource = Resource.objects.get(service__name=s, name=r) |
|
408 |
resource = Resource.objects.get(name=resource) |
|
413 | 409 |
if update: |
414 | 410 |
AstakosUserQuota.objects.update_or_create( |
415 | 411 |
user=self, resource=resource, defaults={ |
... | ... | |
422 | 418 |
) |
423 | 419 |
|
424 | 420 |
def get_resource_policy(self, resource): |
425 |
s, sep, r = resource.partition(RESOURCE_SEPARATOR) |
|
426 |
resource = Resource.objects.get(service__name=s, name=r) |
|
421 |
resource = Resource.objects.get(name=resource) |
|
427 | 422 |
default_capacity = resource.uplimit |
428 | 423 |
try: |
429 | 424 |
policy = AstakosUserQuota.objects.get(user=self, resource=resource) |
... | ... | |
433 | 428 |
|
434 | 429 |
def remove_resource_policy(self, service, resource): |
435 | 430 |
"""Raises ObjectDoesNotExist, IntegrityError""" |
436 |
resource = Resource.objects.get(service__name=service, name=resource)
|
|
431 |
resource = Resource.objects.get(name=resource) |
|
437 | 432 |
q = self.policies.get(resource=resource).delete() |
438 | 433 |
|
439 | 434 |
def update_uuid(self): |
... | ... | |
1445 | 1440 |
def add_resource_policy(self, service, resource, uplimit): |
1446 | 1441 |
"""Raises ObjectDoesNotExist, IntegrityError""" |
1447 | 1442 |
q = self.projectresourcegrant_set |
1448 |
resource = Resource.objects.get(service__name=service, name=resource)
|
|
1443 |
resource = Resource.objects.get(name=resource) |
|
1449 | 1444 |
q.create(resource=resource, member_capacity=uplimit) |
1450 | 1445 |
|
1451 | 1446 |
def members_count(self): |
... | ... | |
1453 | 1448 |
|
1454 | 1449 |
@property |
1455 | 1450 |
def grants(self): |
1456 |
return self.projectresourcegrant_set.values( |
|
1457 |
'member_capacity', 'resource__name', 'resource__service__name')
|
|
1451 |
return self.projectresourcegrant_set.values('member_capacity',
|
|
1452 |
'resource__name')
|
|
1458 | 1453 |
|
1459 | 1454 |
@property |
1460 | 1455 |
def resource_policies(self): |
Also available in: Unified diff