Move Timestamp code to separate file

Change-Id: I57627f5b9048bbbcda0a07ac274fd1e579348496
Signed-off-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
Zane Bitter 2012-10-25 22:18:27 +02:00
parent 70b609567d
commit c31d2426a4
4 changed files with 56 additions and 41 deletions

View File

@ -23,6 +23,7 @@ from heat.engine import checkeddict
from heat.engine import dependencies
from heat.engine import identifier
from heat.engine import resources
from heat.engine import timestamp
from heat.db import api as db_api
from heat.openstack.common import log as logging
@ -240,8 +241,8 @@ class Stack(object):
UPDATE_COMPLETE = 'UPDATE_COMPLETE'
UPDATE_FAILED = 'UPDATE_FAILED'
created_time = resources.Timestamp(db_api.stack_get, 'created_at')
updated_time = resources.Timestamp(db_api.stack_get, 'updated_at')
created_time = timestamp.Timestamp(db_api.stack_get, 'created_at')
updated_time = timestamp.Timestamp(db_api.stack_get, 'updated_at')
def __init__(self, context, stack_name, template, parameters=None,
stack_id=None, state=None, state_description='',

View File

@ -31,7 +31,7 @@ from heat.common import exception
from heat.common import config
from heat.db import api as db_api
from heat.engine import checkeddict
from heat.engine import auth
from heat.engine import timestamp
from heat.openstack.common import log as logging
from heat.openstack.common import cfg
@ -74,39 +74,6 @@ class Metadata(object):
return None
class Timestamp(object):
'''
A descriptor for fetching an up-to-date timestamp from the database.
'''
def __init__(self, db_fetch, attribute):
'''
Initialise with a function to fetch the database representation of an
object (given a context and ID) and the name of the attribute to
retrieve.
'''
self.db_fetch = db_fetch
self.attribute = attribute
def __get__(self, obj, obj_class):
'''
Get the latest data from the database for the given object and class.
'''
if obj is None or obj.id is None:
return None
o = self.db_fetch(obj.context, obj.id)
o.refresh(attrs=[self.attribute])
return getattr(o, self.attribute)
def __set__(self, obj, timestamp):
'''Update the timestamp for the given object.'''
if obj.id is None:
raise AttributeError("%s has not yet been created" % str(obj))
o = self.db_fetch(obj.context, obj.id)
o.update_and_save({self.attribute: timestamp})
class Resource(object):
# Status strings
CREATE_IN_PROGRESS = 'IN_PROGRESS'
@ -128,8 +95,8 @@ class Resource(object):
# If True, this resource must be created before it can be referenced.
strict_dependency = True
created_time = Timestamp(db_api.resource_get, 'created_at')
updated_time = Timestamp(db_api.resource_get, 'updated_at')
created_time = timestamp.Timestamp(db_api.resource_get, 'created_at')
updated_time = timestamp.Timestamp(db_api.resource_get, 'updated_at')
metadata = Metadata()

47
heat/engine/timestamp.py Normal file
View File

@ -0,0 +1,47 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
class Timestamp(object):
'''
A descriptor for fetching an up-to-date timestamp from the database.
'''
def __init__(self, db_fetch, attribute):
'''
Initialise with a function to fetch the database representation of an
object (given a context and ID) and the name of the attribute to
retrieve.
'''
self.db_fetch = db_fetch
self.attribute = attribute
def __get__(self, obj, obj_class):
'''
Get the latest data from the database for the given object and class.
'''
if obj is None or obj.id is None:
return None
o = self.db_fetch(obj.context, obj.id)
o.refresh(attrs=[self.attribute])
return getattr(o, self.attribute)
def __set__(self, obj, timestamp):
'''Update the timestamp for the given object.'''
if obj.id is None:
raise AttributeError("%s has not yet been created" % str(obj))
o = self.db_fetch(obj.context, obj.id)
o.update_and_save({self.attribute: timestamp})

View File

@ -17,7 +17,7 @@
import datetime
from heat.openstack.common import log as logging
from heat.openstack.common import timeutils
from heat.engine import resources
from heat.engine import timestamp
from heat.db import api as db_api
from heat.engine import parser
from heat.common import context as ctxtlib
@ -35,8 +35,8 @@ class WatchRule(object):
NORMAL: 'OKActions',
NODATA: 'InsufficientDataActions'}
created_at = resources.Timestamp(db_api.watch_rule_get, 'created_at')
updated_at = resources.Timestamp(db_api.watch_rule_get, 'updated_at')
created_at = timestamp.Timestamp(db_api.watch_rule_get, 'created_at')
updated_at = timestamp.Timestamp(db_api.watch_rule_get, 'updated_at')
def __init__(self, context, watch_name, rule, stack_name, state=NORMAL,
wid=None, watch_data=[], last_evaluated=timeutils.utcnow()):