Revision 5d996aea snf-quotaholder-app/quotaholder_django/quotaholder_app/models.py

b/snf-quotaholder-app/quotaholder_django/quotaholder_app/models.py
37 37
from django.db.models import (Model, BigIntegerField, CharField,
38 38
                              ForeignKey, AutoField)
39 39
from django.db import transaction
40

  
40
from .managers import ForUpdateManager
41 41

  
42 42
class Holder(Model):
43 43

  
......
45 45
    intval      =   BigIntegerField()
46 46
    strval      =   CharField(max_length=4096)
47 47

  
48
    objects     =   ForUpdateManager()
48 49

  
49 50
class Entity(Model):
50 51

  
......
53 54
                               related_name='entities')
54 55
    key         =   CharField(max_length=4096, null=False)
55 56

  
57
    objects     =   ForUpdateManager()
56 58

  
57 59
class Policy(Model):
58 60

  
......
62 64
    import_limit    =   BigIntegerField(null=True,  default=None)
63 65
    export_limit    =   BigIntegerField(null=True,  default=None)
64 66

  
67
    objects     =   ForUpdateManager()
65 68

  
66 69
class Holding(Model):
67 70

  
......
80 83
    released    =   BigIntegerField(null=False, default=0)
81 84
    releasing   =   BigIntegerField(null=False, default=0)
82 85

  
86
    objects     =   ForUpdateManager()
87

  
83 88
    class Meta:
84 89
        unique_together = (('entity', 'resource'),)
85 90

  
......
98 103
    clientkey   =   CharField(max_length=4096, null=False)
99 104
    issue_time  =   CharField(max_length=24, default=now)
100 105

  
106
    objects     =   ForUpdateManager()
101 107

  
102 108
class Provision(Model):
103 109

  
......
109 115
    resource    =   CharField(max_length=4096, null=False)
110 116
    quantity    =   BigIntegerField(null=False)
111 117

  
118
    objects     =   ForUpdateManager()
112 119

  
113 120
class ProvisionLog(Model):
114 121

  
......
138 145
    delta_quantity      =   BigIntegerField(null=False)
139 146
    reason              =   CharField(max_length=4096)
140 147

  
148
    objects     =   ForUpdateManager()
141 149

  
142 150
    def source_allocated_through(self):
143 151
        return self.source_imported - self.source_released
......
179 187
    def target_outbound(self):
180 188
        return self.target_outbound_through() + self.target_exported
181 189

  
190
def _access(*args, **kwargs):
191
    method = args[0]
192
    model = args[1]
193
    args = args[2:]
194
    o = model.objects
195
    try:
196
        if kwargs['for_update']:
197
            del kwargs['for_update']
198
            o = o.select_for_update()
199
    except KeyError:
200
        pass
201
    f = getattr(o, method)
202
    return f(*args, **kwargs)
203

  
204
def _get(*args, **kwargs):
205
    return _access('get', *args, **kwargs)
206

  
207
def _filter(*args, **kwargs):
208
    return _access('filter', *args, **kwargs)
209

  
210
def db_get_holding(*args, **kwargs):
211
    return _get(Holding, *args, **kwargs)
212

  
213
def db_get_entity(*args, **kwargs):
214
    return _get(Entity, *args, **kwargs)
215

  
216
def db_get_policy(*args, **kwargs):
217
    return _get(Policy, *args, **kwargs)
218

  
219
def db_get_commission(*args, **kwargs):
220
    return _get(Commission, *args, **kwargs)
221

  
222
def db_filter_provision(*args, **kwargs):
223
    return _filter(Provision, *args, **kwargs)

Also available in: Unified diff