Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
synnefo
Commits
d99e79e2
Commit
d99e79e2
authored
Feb 28, 2013
by
Giorgos Korfiatis
Browse files
wip Remove Entity model
parent
83f3a357
Changes
4
Hide whitespace changes
Inline
Side-by-side
snf-astakos-app/astakos/quotaholder/callpoint.py
View file @
d99e79e2
...
...
@@ -34,7 +34,6 @@
from
astakos.quotaholder.exception
import
(
QuotaholderError
,
CorruptedError
,
InvalidDataError
,
InvalidKeyError
,
NoEntityError
,
NoQuantityError
,
NoCapacityError
,
ExportLimitError
,
ImportLimitError
,
DuplicateError
)
...
...
@@ -43,85 +42,16 @@ from astakos.quotaholder.utils.newname import newname
from
astakos.quotaholder.api
import
QH_PRACTICALLY_INFINITE
from
django.db.models
import
Q
,
Count
from
.models
import
(
Entity
,
Policy
,
Holding
,
from
django.db.models
import
Q
from
.models
import
(
Policy
,
Holding
,
Commission
,
Provision
,
ProvisionLog
,
CallSerial
,
now
,
db_get_entity
,
db_get_holding
,
db_get_policy
,
db_get_holding
,
db_get_policy
,
db_get_commission
,
db_filter_provision
,
db_get_callserial
)
class
QuotaholderDjangoDBCallpoint
(
object
):
def
create_entity
(
self
,
context
=
None
,
create_entity
=
()):
rejected
=
[]
append
=
rejected
.
append
for
idx
,
(
entity
,
owner
,
key
,
ownerkey
)
in
enumerate
(
create_entity
):
try
:
owner
=
Entity
.
objects
.
get
(
entity
=
owner
,
key
=
ownerkey
)
except
Entity
.
DoesNotExist
:
append
(
idx
)
continue
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
)
append
(
idx
)
except
Entity
.
DoesNotExist
:
e
=
Entity
.
objects
.
create
(
entity
=
entity
,
owner
=
owner
,
key
=
key
)
if
rejected
:
raise
QuotaholderError
(
rejected
)
return
rejected
def
set_entity_key
(
self
,
context
=
None
,
set_entity_key
=
()):
rejected
=
[]
append
=
rejected
.
append
for
entity
,
key
,
newkey
in
set_entity_key
:
try
:
e
=
db_get_entity
(
entity
=
entity
,
key
=
key
,
for_update
=
True
)
except
Entity
.
DoesNotExist
:
append
(
entity
)
continue
e
.
key
=
newkey
e
.
save
()
if
rejected
:
raise
QuotaholderError
(
rejected
)
return
rejected
def
list_entities
(
self
,
context
=
None
,
entity
=
None
,
key
=
None
):
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
,
key
=
key
)
except
Entity
.
DoesNotExist
:
m
=
"Entity '%s' does not exist"
%
(
entity
,)
raise
NoEntityError
(
m
)
children
=
e
.
entities
.
all
()
entities
=
[
e
.
entity
for
e
in
children
]
return
entities
def
get_entity
(
self
,
context
=
None
,
get_entity
=
()):
entities
=
[]
append
=
entities
.
append
names
=
[
entity
for
entity
,
key
in
get_entity
]
es
=
Entity
.
objects
.
select_related
(
depth
=
1
).
filter
(
entity__in
=
names
)
data
=
{}
for
e
in
es
:
data
[
e
.
entity
]
=
e
for
entity
,
key
in
get_entity
:
e
=
data
.
get
(
entity
,
None
)
if
e
is
None
or
e
.
key
!=
key
:
continue
append
((
entity
,
e
.
owner
.
entity
))
return
entities
def
get_limits
(
self
,
context
=
None
,
get_limits
=
()):
limits
=
[]
append
=
limits
.
append
...
...
@@ -163,16 +93,13 @@ class QuotaholderDjangoDBCallpoint(object):
holdings
=
[]
append
=
holdings
.
append
for
entity
,
resource
,
key
in
get_holding
:
for
entity
,
resource
in
get_holding
:
try
:
h
=
Holding
.
objects
.
get
(
entity
=
entity
,
resource
=
resource
)
except
Holding
.
DoesNotExist
:
continue
if
h
.
entity
.
key
!=
key
:
continue
append
((
h
.
entity
.
entity
,
h
.
resource
,
h
.
policy
.
policy
,
append
((
h
.
entity
,
h
.
resource
,
h
.
policy
.
policy
,
h
.
imported
,
h
.
exported
,
h
.
returned
,
h
.
released
,
h
.
flags
))
...
...
@@ -182,17 +109,7 @@ class QuotaholderDjangoDBCallpoint(object):
rejected
=
[]
append
=
rejected
.
append
for
entity
,
resource
,
key
,
policy
,
flags
in
set_holding
:
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
,
key
=
key
)
except
Entity
.
DoesNotExist
:
append
((
entity
,
resource
,
policy
))
continue
if
e
.
key
!=
key
:
append
((
entity
,
resource
,
policy
))
continue
for
entity
,
resource
,
policy
,
flags
in
set_holding
:
try
:
p
=
Policy
.
objects
.
get
(
policy
=
policy
)
except
Policy
.
DoesNotExist
:
...
...
@@ -206,7 +123,7 @@ class QuotaholderDjangoDBCallpoint(object):
h
.
flags
=
flags
h
.
save
()
except
Holding
.
DoesNotExist
:
h
=
Holding
.
objects
.
create
(
entity
=
e
,
resource
=
resource
,
h
=
Holding
.
objects
.
create
(
entity
=
e
ntity
,
resource
=
resource
,
policy
=
p
,
flags
=
flags
)
if
rejected
:
...
...
@@ -240,18 +157,9 @@ class QuotaholderDjangoDBCallpoint(object):
append
=
rejected
.
append
for
idx
,
sfh
in
enumerate
(
init_holding
):
(
entity
,
resource
,
key
,
policy
,
(
entity
,
resource
,
policy
,
imported
,
exported
,
returned
,
released
,
flags
)
=
sfh
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
,
key
=
key
)
except
Entity
.
DoesNotExist
:
append
(
idx
)
continue
if
e
.
key
!=
key
:
append
(
idx
)
continue
try
:
p
=
Policy
.
objects
.
get
(
policy
=
policy
)
...
...
@@ -259,7 +167,7 @@ class QuotaholderDjangoDBCallpoint(object):
append
(
idx
)
continue
self
.
_init_holding
(
e
,
resource
,
p
,
self
.
_init_holding
(
e
ntity
,
resource
,
p
,
imported
,
exported
,
returned
,
released
,
flags
)
...
...
@@ -272,13 +180,8 @@ class QuotaholderDjangoDBCallpoint(object):
append
=
rejected
.
append
for
idx
,
tpl
in
enumerate
(
reset_holding
):
(
entity
,
resource
,
key
,
(
entity
,
resource
,
imported
,
exported
,
returned
,
released
)
=
tpl
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
,
key
=
key
)
except
Entity
.
DoesNotExist
:
append
(
idx
)
continue
try
:
h
=
db_get_holding
(
entity
=
entity
,
resource
=
resource
,
...
...
@@ -315,29 +218,11 @@ class QuotaholderDjangoDBCallpoint(object):
return
hp
.
quantity
+
(
holding
.
imported
+
holding
.
returned
-
holding
.
exported
-
holding
.
released
)
def
_new_policy_name
(
self
):
return
newname
(
'policy_'
)
def
_increase_resource
(
self
,
entity
,
resource
,
amount
):
try
:
h
=
db_get_holding
(
entity
=
entity
,
resource
=
resource
,
for_update
=
True
)
except
Holding
.
DoesNotExist
:
h
=
Holding
(
entity
=
entity
,
resource
=
resource
)
p
=
Policy
.
objects
.
create
(
policy
=
self
.
_new_policy_name
(),
quantity
=
0
,
capacity
=
QH_PRACTICALLY_INFINITE
,
import_limit
=
QH_PRACTICALLY_INFINITE
,
export_limit
=
QH_PRACTICALLY_INFINITE
)
h
.
policy
=
p
h
.
imported
+=
amount
h
.
save
()
def
release_holding
(
self
,
context
=
None
,
release_holding
=
()):
rejected
=
[]
append
=
rejected
.
append
for
idx
,
(
entity
,
resource
,
key
)
in
enumerate
(
release_holding
):
for
idx
,
(
entity
,
resource
)
in
enumerate
(
release_holding
):
try
:
h
=
db_get_holding
(
entity
=
entity
,
resource
=
resource
,
for_update
=
True
)
...
...
@@ -345,18 +230,14 @@ class QuotaholderDjangoDBCallpoint(object):
append
(
idx
)
continue
if
h
.
entity
.
key
!=
key
:
append
(
idx
)
continue
if
self
.
_check_pending
(
entity
,
resource
):
append
(
idx
)
continue
q
=
self
.
_actual_quantity
(
h
)
if
q
>
0
:
owner
=
h
.
entity
.
owner
self
.
_increase_resource
(
owner
,
resource
,
q
)
append
(
idx
)
continue
h
.
delete
()
...
...
@@ -364,18 +245,8 @@ class QuotaholderDjangoDBCallpoint(object):
raise
QuotaholderError
(
rejected
)
return
rejected
def
list_resources
(
self
,
context
=
None
,
entity
=
None
,
key
=
None
):
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
)
except
Entity
.
DoesNotExist
:
m
=
"No such entity '%s'"
%
(
entity
,)
raise
NoEntityError
(
m
)
if
e
.
key
!=
key
:
m
=
"Invalid key for entity '%s'"
%
(
entity
,)
raise
InvalidKeyError
(
m
)
holdings
=
e
.
holding_set
.
filter
(
entity
=
entity
)
def
list_resources
(
self
,
context
=
None
,
entity
=
None
):
holdings
=
Holding
.
objects
.
filter
(
entity
=
entity
)
resources
=
[
h
.
resource
for
h
in
holdings
]
return
resources
...
...
@@ -385,16 +256,12 @@ class QuotaholderDjangoDBCallpoint(object):
holdings_list
=
[]
append
=
holdings_list
.
append
for
entity
,
key
in
list_holdings
:
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
)
if
e
.
key
!=
key
:
raise
Entity
.
DoesNotExist
(
"wrong key"
)
except
Entity
.
DoesNotExist
:
for
entity
in
list_holdings
:
holdings
=
list
(
Holding
.
objects
.
filter
(
entity
=
entity
))
if
not
holdings
:
reject
(
entity
)
continue
holdings
=
e
.
holding_set
.
filter
(
entity
=
entity
)
append
([[
entity
,
h
.
resource
,
h
.
imported
,
h
.
exported
,
h
.
returned
,
h
.
released
]
for
h
in
holdings
])
...
...
@@ -405,24 +272,21 @@ class QuotaholderDjangoDBCallpoint(object):
quotas
=
[]
append
=
quotas
.
append
entities
=
set
(
e
for
e
,
r
,
k
in
get_quota
)
entities
=
set
(
e
for
e
,
r
in
get_quota
)
hs
=
Holding
.
objects
.
select_related
().
filter
(
entity__in
=
entities
)
holdings
=
{}
for
h
in
hs
:
holdings
[(
h
.
entity
_id
,
h
.
resource
)]
=
h
holdings
[(
h
.
entity
,
h
.
resource
)]
=
h
for
entity
,
resource
,
key
in
get_quota
:
for
entity
,
resource
in
get_quota
:
try
:
h
=
holdings
[(
entity
,
resource
)]
except
:
continue
if
h
.
entity
.
key
!=
key
:
continue
p
=
h
.
policy
append
((
h
.
entity
.
entity
,
h
.
resource
,
p
.
quantity
,
p
.
capacity
,
append
((
h
.
entity
,
h
.
resource
,
p
.
quantity
,
p
.
capacity
,
p
.
import_limit
,
p
.
export_limit
,
h
.
imported
,
h
.
exported
,
h
.
returned
,
h
.
released
,
...
...
@@ -436,27 +300,20 @@ class QuotaholderDjangoDBCallpoint(object):
q_holdings
=
Q
()
entities
=
[]
for
(
entity
,
resource
,
key
,
_
,
_
,
_
,
_
,
_
)
in
set_quota
:
for
(
entity
,
resource
,
_
,
_
,
_
,
_
,
_
)
in
set_quota
:
entities
.
append
(
entity
)
hs
=
Holding
.
objects
.
filter
(
entity__in
=
entities
).
select_for_update
()
holdings
=
{}
for
h
in
hs
:
holdings
[(
h
.
entity_id
,
h
.
resource
)]
=
h
entities
=
Entity
.
objects
.
in_bulk
(
entities
)
holdings
[(
h
.
entity
,
h
.
resource
)]
=
h
old_policies
=
[]
for
(
entity
,
resource
,
key
,
for
(
entity
,
resource
,
quantity
,
capacity
,
import_limit
,
export_limit
,
flags
)
in
set_quota
:
e
=
entities
.
get
(
entity
,
None
)
if
e
is
None
or
e
.
key
!=
key
:
append
((
entity
,
resource
))
continue
policy
=
newname
(
'policy_'
)
newp
=
Policy
(
policy
=
policy
,
quantity
=
quantity
,
...
...
@@ -470,7 +327,7 @@ class QuotaholderDjangoDBCallpoint(object):
h
.
policy
=
newp
h
.
flags
=
flags
except
KeyError
:
h
=
Holding
(
entity
=
e
,
resource
=
resource
,
h
=
Holding
(
entity
=
e
ntity
,
resource
=
resource
,
policy
=
newp
,
flags
=
flags
)
# the order is intentionally reversed so that it
...
...
@@ -507,15 +364,13 @@ class QuotaholderDjangoDBCallpoint(object):
sources
=
sub_quota
+
add_quota
q_holdings
=
Q
()
entities
=
[]
for
(
entity
,
resource
,
key
,
_
,
_
,
_
,
_
)
in
sources
:
for
(
entity
,
resource
,
_
,
_
,
_
,
_
)
in
sources
:
entities
.
append
(
entity
)
hs
=
Holding
.
objects
.
filter
(
entity__in
=
entities
).
select_for_update
()
holdings
=
{}
for
h
in
hs
:
holdings
[(
h
.
entity_id
,
h
.
resource
)]
=
h
entities
=
Entity
.
objects
.
in_bulk
(
entities
)
holdings
[(
h
.
entity
,
h
.
resource
)]
=
h
pids
=
[
h
.
policy_id
for
h
in
hs
]
policies
=
Policy
.
objects
.
in_bulk
(
pids
)
...
...
@@ -523,15 +378,10 @@ class QuotaholderDjangoDBCallpoint(object):
old_policies
=
[]
for
removing
,
source
in
[(
True
,
sub_quota
),
(
False
,
add_quota
)]:
for
(
entity
,
resource
,
key
,
for
(
entity
,
resource
,
quantity
,
capacity
,
import_limit
,
export_limit
)
in
source
:
e
=
entities
.
get
(
entity
,
None
)
if
e
is
None
or
e
.
key
!=
key
:
append
((
entity
,
resource
))
continue
try
:
h
=
holdings
[(
entity
,
resource
)]
old_policies
.
append
(
h
.
policy_id
)
...
...
@@ -543,7 +393,8 @@ class QuotaholderDjangoDBCallpoint(object):
if
removing
:
append
((
entity
,
resource
))
continue
h
=
Holding
(
entity
=
e
,
resource
=
resource
,
flags
=
0
)
h
=
Holding
(
entity
=
entity
,
resource
=
resource
,
flags
=
0
)
p
=
None
policy
=
newname
(
'policy_'
)
...
...
@@ -622,22 +473,11 @@ class QuotaholderDjangoDBCallpoint(object):
context
=
None
,
clientkey
=
None
,
target
=
None
,
key
=
None
,
name
=
None
,
provisions
=
()):
try
:
t
=
Entity
.
objects
.
get
(
entity
=
target
)
except
Entity
.
DoesNotExist
:
m
=
"No target entity '%s'"
%
(
target
,)
raise
NoEntityError
(
m
)
else
:
if
t
.
key
!=
key
:
m
=
"Invalid key for target entity '%s'"
%
(
target
,)
raise
InvalidKeyError
(
m
)
create
=
Commission
.
objects
.
create
commission
=
create
(
entity
_id
=
target
,
clientkey
=
clientkey
,
name
=
name
)
commission
=
create
(
entity
=
target
,
clientkey
=
clientkey
,
name
=
name
)
serial
=
commission
.
serial
checked
=
[]
...
...
@@ -654,12 +494,6 @@ class QuotaholderDjangoDBCallpoint(object):
raise
DuplicateError
(
m
)
checked
.
append
(
ent_res
)
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
)
except
Entity
.
DoesNotExist
:
m
=
"No source entity '%s'"
%
(
entity
,)
raise
NoEntityError
(
m
)
release
=
0
if
quantity
<
0
:
release
=
1
...
...
@@ -781,7 +615,7 @@ class QuotaholderDjangoDBCallpoint(object):
limit
=
limit
)
Provision
.
objects
.
create
(
serial
=
commission
,
entity
=
e
,
entity
=
e
ntity
,
resource
=
resource
,
quantity
=
quantity
)
if
release
:
...
...
@@ -808,8 +642,8 @@ class QuotaholderDjangoDBCallpoint(object):
kwargs
=
{
'serial'
:
commission
.
serial
,
'name'
:
commission
.
name
,
'source'
:
s_entity
.
entity
,
'target'
:
t_entity
.
entity
,
'source'
:
s_entity
,
'target'
:
t_entity
,
'resource'
:
provision
.
resource
,
'source_quantity'
:
s_policy
.
quantity
,
'source_capacity'
:
s_policy
.
capacity
,
...
...
@@ -852,7 +686,7 @@ class QuotaholderDjangoDBCallpoint(object):
provisions
=
db_filter_provision
(
serial
=
serial
,
for_update
=
True
)
for
pv
in
provisions
:
try
:
h
=
db_get_holding
(
entity
=
pv
.
entity
.
entity
,
h
=
db_get_holding
(
entity
=
pv
.
entity
,
resource
=
pv
.
resource
,
for_update
=
True
)
th
=
db_get_holding
(
entity
=
t
,
resource
=
pv
.
resource
,
for_update
=
True
)
...
...
@@ -898,7 +732,7 @@ class QuotaholderDjangoDBCallpoint(object):
provisions
=
db_filter_provision
(
serial
=
serial
,
for_update
=
True
)
for
pv
in
provisions
:
try
:
h
=
db_get_holding
(
entity
=
pv
.
entity
.
entity
,
h
=
db_get_holding
(
entity
=
pv
.
entity
,
resource
=
pv
.
resource
,
for_update
=
True
)
th
=
db_get_holding
(
entity
=
t
,
resource
=
pv
.
resource
,
for_update
=
True
)
...
...
@@ -954,43 +788,15 @@ class QuotaholderDjangoDBCallpoint(object):
return
def
release_entity
(
self
,
context
=
None
,
release_entity
=
()):
rejected
=
[]
append
=
rejected
.
append
for
entity
,
key
in
release_entity
:
try
:
e
=
db_get_entity
(
entity
=
entity
,
key
=
key
,
for_update
=
True
)
except
Entity
.
DoesNotExist
:
append
(
entity
)
continue
if
e
.
entities
.
count
()
!=
0
:
append
(
entity
)
continue
if
e
.
holding_set
.
count
()
!=
0
:
append
(
entity
)
continue
e
.
delete
()
if
rejected
:
raise
QuotaholderError
(
rejected
)
return
rejected
def
get_timeline
(
self
,
context
=
None
,
after
=
""
,
before
=
"Z"
,
get_timeline
=
()):
entity_set
=
set
()
e_add
=
entity_set
.
add
resource_set
=
set
()
r_add
=
resource_set
.
add
for
entity
,
resource
,
key
in
get_timeline
:
for
entity
,
resource
in
get_timeline
:
if
entity
not
in
entity_set
:
try
:
e
=
Entity
.
objects
.
get
(
entity
=
entity
,
key
=
key
)
e_add
(
entity
)
except
Entity
.
DoesNotExist
:
continue
e_add
(
entity
)
r_add
((
entity
,
resource
))
...
...
snf-astakos-app/astakos/quotaholder/exception.py
View file @
d99e79e2
...
...
@@ -36,15 +36,6 @@ class QuotaholderError(Exception):
pass
class
InvalidKeyError
(
QuotaholderError
):
pass
class
NoEntityError
(
QuotaholderError
):
pass
class
CorruptedError
(
QuotaholderError
):
pass
...
...
snf-astakos-app/astakos/quotaholder/fixtures/initial_data.json
deleted
100644 → 0
View file @
83f3a357
[
{
"model"
:
"quotaholder_app.entity"
,
"pk"
:
"system"
,
"fields"
:
{
"owner"
:
"system"
,
"key"
:
""
}
}
]
snf-astakos-app/astakos/quotaholder/models.py
View file @
d99e79e2
...
...
@@ -39,23 +39,6 @@ from django.db.models import (Model, BigIntegerField, CharField,
from
django.db
import
transaction
from
synnefo.lib.db.managers
import
ForUpdateManager
class
Holder
(
Model
):
attribute
=
CharField
(
max_length
=
4096
,
primary_key
=
True
)
intval
=
BigIntegerField
()
strval
=
CharField
(
max_length
=
4096
)
objects
=
ForUpdateManager
()
class
Entity
(
Model
):
entity
=
CharField
(
max_length
=
4096
,
primary_key
=
True
)
owner
=
ForeignKey
(
'self'
,
to_field
=
'entity'
,
related_name
=
'entities'
)
key
=
CharField
(
max_length
=
4096
,
null
=
False
)
objects
=
ForUpdateManager
()
class
Policy
(
Model
):
policy
=
CharField
(
max_length
=
4096
,
primary_key
=
True
)
...
...
@@ -68,7 +51,7 @@ class Policy(Model):
class
Holding
(
Model
):
entity
=
ForeignKey
(
Entity
,
to_field
=
'entity'
)
entity
=
CharField
(
max_length
=
4096
,
db_index
=
True
)
resource
=
CharField
(
max_length
=
4096
,
null
=
False
)
policy
=
ForeignKey
(
Policy
,
to_field
=
'policy'
)
...
...
@@ -98,7 +81,7 @@ def now():
class
Commission
(
Model
):
serial
=
AutoField
(
primary_key
=
True
)
entity
=
ForeignKey
(
Entity
,
to_field
=
'entity'
)
entity
=
CharField
(
max_length
=
4096
,
db_index
=
True
)
name
=
CharField
(
max_length
=
4096
,
null
=
True
)
clientkey
=
CharField
(
max_length
=
4096
,
null
=
False
)
issue_time
=
CharField
(
max_length
=
24
,
default
=
now
)
...
...
@@ -111,7 +94,7 @@ class Provision(Model):
to_field
=
'serial'
,
related_name
=
'provisions'
)
entity
=
ForeignKey
(
Entity
,
to_field
=
'entity'
)
entity
=
CharField
(
max_length
=
4096
,
db_index
=
True
)
resource
=
CharField
(
max_length
=
4096
,
null
=
False
)
quantity
=
intDecimalField
()
...
...
@@ -222,9 +205,6 @@ def _filter(*args, **kwargs):
def
db_get_holding
(
*
args
,
**
kwargs
):
return
_get
(
Holding
,
*
args
,
**
kwargs
)
def
db_get_entity
(
*
args
,
**
kwargs
):
return
_get
(
Entity
,
*
args
,
**
kwargs
)
def
db_get_policy
(
*
args
,
**
kwargs
):
return
_get
(
Policy
,
*
args
,
**
kwargs
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.