Revision 3a527b3a snf-astakos-app/astakos/im/resources.py

b/snf-astakos-app/astakos/im/resources.py
31 31
# interpreted as representing official policies, either expressed
32 32
# or implied, of GRNET S.A.
33 33

  
34
from astakos.im.models import Service, Resource
34
from astakos.im.models import Resource
35 35
from astakos.im.quotas import qh_add_resource_limit, qh_sync_new_resource
36 36
import logging
37 37

  
38 38
logger = logging.getLogger(__name__)
39 39

  
40
fields = ['name', 'desc', 'unit']
40 41

  
41
def add_resource(service, resource, uplimit):
42
    try:
43
        s = Service.objects.get(name=service)
44
    except Service.DoesNotExist:
45
        raise Exception("Service %s is not registered." % (service))
46 42

  
47
    name = resource['name']
43
class ResourceException(Exception):
44
    pass
45

  
46

  
47
def add_resource(service, resource_dict):
48
    name = resource_dict.get('name')
49
    if not name:
50
        raise ResourceException("Malformed resource dict.")
51

  
48 52
    try:
49 53
        r = Resource.objects.get_for_update(name=name)
50
        old_uplimit = r.uplimit
54
        exists = True
51 55
    except Resource.DoesNotExist:
52
        r = Resource()
53
        old_uplimit = None
56
        r = Resource(uplimit=0)
57
        exists = False
54 58

  
55
    r.uplimit = uplimit
56
    r.service = s
57
    for key, value in resource.iteritems():
58
        setattr(r, key, value)
59
    r.service = service
60
    for field in fields:
61
        value = resource_dict.get(field)
62
        if value is not None:
63
            setattr(r, field, value)
59 64

  
60 65
    r.save()
66
    if not exists:
67
        qh_sync_new_resource(r, 0)
61 68

  
62
    if old_uplimit is not None:
63
        logger.info("Updated resource %s with limit %s." % (name, uplimit))
69
    if exists:
70
        logger.info("Updated resource %s." % (name))
64 71
    else:
65
        logger.info("Added resource %s with limit %s." % (name, uplimit))
66

  
67
    if old_uplimit is not None:
68
        diff = uplimit - old_uplimit
69
        if diff != 0:
70
            qh_add_resource_limit(r, diff)
71
    else:
72
        qh_sync_new_resource(r, uplimit)
72
        logger.info("Added resource %s." % (name))
73
    return exists
73 74

  
74 75

  
75
def update_resource(name, uplimit):
76
    r = Resource.objects.get_for_update(name=name)
77
    old_uplimit = r.uplimit
78
    r.uplimit = uplimit
79
    r.save()
76
def update_resource(resource, uplimit):
77
    old_uplimit = resource.uplimit
78
    resource.uplimit = uplimit
79
    resource.save()
80 80

  
81
    logger.info("Updated resource %s with limit %s." % (name, uplimit))
81
    logger.info("Updated resource %s with limit %s."
82
                % (resource.name, uplimit))
82 83
    diff = uplimit - old_uplimit
83 84
    if diff != 0:
84
        qh_add_resource_limit(r, diff)
85
        qh_add_resource_limit(resource, diff)
85 86

  
86 87

  
87 88
def get_resources(resources=None, services=None):

Also available in: Unified diff