Statistics
| Branch: | Tag: | Revision:

root / commissioning / servers / quotaholder / django_backend / models.py @ f590f930

History | View | Annotate | Download (3.4 kB)

1

    
2
from commissioning import ( Callpoint, Controller,
3
                            Physical, CommissionException,
4
                            CorruptedError, InvalidDataError,
5
                            InvalidKeyError, NoEntityError,
6
                            NoQuantityError, NoCapacityError    )
7

    
8

    
9
from django.db.models import Model, BigIntegerField, CharField, ForeignKey
10
from django.db import transaction
11

    
12

    
13
class Holder(Model):
14

    
15
    attribute   =   CharField(max_length=72, primary_key=True)
16
    intval      =   BigIntegerField()
17
    strval      =   CharField(max_length=72)
18

    
19

    
20
def alloc_serial(nr=1):
21
    if nr < 0:
22
        m = "Can only receive a positive argument, not %d" % (nr,)
23
        raise CorruptedError(m)
24

    
25
    try:
26
        holder = Holder.objects.get(attribute='serial')
27
    except Holder.DoesNotExist:
28
        holder = Holder(attribute='serial', inval=1)
29

    
30
    serial = holder.serial
31
    holder.serial += nr
32
    holder.save()
33

    
34
    return serial
35

    
36

    
37
class Entity(Model):
38

    
39
    entity      =   CharField(max_length=72, primary_key=True)
40
    owner       =   ForeignKey('self', to_field='entity',
41
                               related_name='entities')
42
    key         =   CharField(max_length=72, null=False)
43

    
44

    
45
class Policy(Model):
46

    
47
    policy          =   CharField(max_length=72, primary_key=True)
48
    quantity        =   BigIntegerField(null=False, default=0)
49
    capacity        =   BigIntegerField(null=False, default=0)
50
    import_limit    =   BigIntegerField(null=False, default=0)
51
    export_limit    =   BigIntegerField(null=False, default=0)
52

    
53

    
54
class Holding(Model):
55

    
56
    entity      =   ForeignKey(Entity, to_field='entity')
57
    resource    =   CharField(max_length=72, null=False)
58

    
59
    policy      =   ForeignKey(Policy, to_field='policy')
60
    flags       =   BigIntegerField(null=False, default=0)
61

    
62
    imported    =   BigIntegerField(null=False, default=0)
63
    importing   =   BigIntegerField(null=False, default=0)
64
    exported    =   BigIntegerField(null=False, default=0)
65
    exporting   =   BigIntegerField(null=False, default=0)
66
    regained    =   BigIntegerField(null=False, default=0)
67
    regaining   =   BigIntegerField(null=False, default=0)
68
    released    =   BigIntegerField(null=False, default=0)
69
    releasing   =   BigIntegerField(null=False, default=0)
70

    
71
    class Meta:
72
        unique_together = (('entity', 'resource'),)
73

    
74

    
75
from datetime import datetime
76

    
77
def now():
78
    return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')[:24]
79

    
80

    
81
class Commission(Model):
82

    
83
    serial      =   BigIntegerField(primary_key=True, default=alloc_serial)
84
    entity      =   ForeignKey(Entity, to_field='entity')
85
    clientkey   =   CharField(max_length=72, null=False)
86
    issue_time  =   CharField(max_length=24, default=now)
87

    
88

    
89
class Provision(Model):
90

    
91
    serial      =   ForeignKey( Commission,
92
                                to_field='serial',
93
                                related_name='provisions'   )
94

    
95
    entity      =   ForeignKey(Entity, to_field='entity')
96
    resource    =   CharField(max_length=72, null=False)
97
    quantity    =   BigIntegerField(null=False)
98

    
99

    
100
class ProvisionLog(Model):
101

    
102
    serial      =   BigIntegerField(primary_key=True)
103
    source      =   CharField(max_length=72)
104
    target      =   CharField(max_length=72)
105
    issue_time  =   CharField(max_length=24)
106
    log_time    =   CharField(max_length=24)
107
    resource    =   CharField(max_length=72)
108
    quantity    =   BigIntegerField()
109
    reason      =   CharField(max_length=8)
110