Fix system_log and add compact view for changes

This commit is contained in:
Dmitry Shulyak 2015-08-07 17:29:33 +03:00
parent 87528def40
commit d6f77ad658
5 changed files with 26 additions and 21 deletions

View File

@ -26,11 +26,11 @@ def validate():
@changes.command() @changes.command()
def stage(): def stage():
log = change.stage_changes() log = list(change.stage_changes().reverse())
staged = list(log.reverse()) for item in log:
if not staged: click.echo(item)
if not log:
click.echo('No changes') click.echo('No changes')
click.echo(staged)
@changes.command() @changes.command()

View File

@ -48,11 +48,12 @@ def _stage_changes(staged_resources, conn_graph,
df = create_diff(staged_data, commited_data) df = create_diff(staged_data, commited_data)
if df: if df:
action = guess_action(commited_data, staged_data)
log_item = data.LogItem( log_item = data.LogItem(
utils.generate_uuid(), utils.generate_uuid(),
res_uid, res_uid,
df, '{}.{}'.format(res_uid, action),
guess_action(commited_data, staged_data)) df)
staged_log.append(log_item) staged_log.append(log_item)
return staged_log return staged_log

View File

@ -30,12 +30,12 @@ CL = partial(state_file, 'commit_log')
class LogItem(object): class LogItem(object):
def __init__(self, uid, res, diff, action, state=None): def __init__(self, uid, res, log_action, diff, state=None):
self.uid = uid self.uid = uid
self.res = res self.res = res
self.log_action = log_action
self.diff = diff self.diff = diff
self.state = state or STATES.pending self.state = state or STATES.pending
self.action = action
def to_yaml(self): def to_yaml(self):
return utils.yaml_dump(self.to_dict()) return utils.yaml_dump(self.to_dict())
@ -43,9 +43,9 @@ class LogItem(object):
def to_dict(self): def to_dict(self):
return {'uid': self.uid, return {'uid': self.uid,
'res': self.res, 'res': self.res,
'log_action': self.log_action,
'diff': self.diff, 'diff': self.diff,
'state': self.state.name, 'state': self.state.name}
'action': self.action}
@classmethod @classmethod
def from_dict(cls, **kwargs): def from_dict(cls, **kwargs):
@ -54,10 +54,14 @@ class LogItem(object):
return cls(**kwargs) return cls(**kwargs)
def __str__(self): def __str__(self):
return self.to_yaml() return self.compact
def __repr__(self): def __repr__(self):
return self.to_yaml() return self.compact
@property
def compact(self):
return 'log task={} uid={}'.format(self.log_action, self.uid)
class Log(object): class Log(object):
@ -66,7 +70,7 @@ class Log(object):
self.ordered_log = db.get_set(path) self.ordered_log = db.get_set(path)
def append(self, logitem): def append(self, logitem):
self.ordered_log.add([(logitem.res, logitem.to_dict())]) self.ordered_log.add([(logitem.log_action, logitem.to_dict())])
def pop(self, uid): def pop(self, uid):
item = self.get(uid) item = self.get(uid)
@ -76,7 +80,7 @@ class Log(object):
return item return item
def update(self, logitem): def update(self, logitem):
self.ordered_log.update(logitem.res, logitem.to_dict()) self.ordered_log.update(logitem.log_action, logitem.to_dict())
def clean(self): def clean(self):
self.ordered_log.clean() self.ordered_log.clean()

View File

@ -4,20 +4,20 @@ from solar.system_log import data
from dictdiffer import patch from dictdiffer import patch
def set_error(task_uuid, *args, **kwargs): def set_error(log_action, *args, **kwargs):
sl = data.SL() sl = data.SL()
item = sl.get(task_uuid) item = sl.get(log_action)
if item: if item:
item.state = data.STATES.error item.state = data.STATES.error
sl.update(item) sl.update(item)
def move_to_commited(task_uuid, *args, **kwargs): def move_to_commited(log_action, *args, **kwargs):
sl = data.SL() sl = data.SL()
item = sl.pop(task_uuid) item = sl.pop(log_action)
if item: if item:
commited = data.CD() commited = data.CD()
staged_data = patch(item.diff, commited.get(item.res, {})) staged_data = patch(item.diff, commited.get(item.log_action, {}))
cl = data.CL() cl = data.CL()
item.state = data.STATES.success item.state = data.STATES.success
cl.append(item) cl.append(item)

View File

@ -6,11 +6,11 @@ from solar.system_log.operations import set_error, move_to_commited
__all__ = ['error_logitem', 'commit_logitem'] __all__ = ['error_logitem', 'commit_logitem']
@app.task @app.task(name='error_logitem')
def error_logitem(task_uuid): def error_logitem(task_uuid):
return set_error(task_uuid.rsplit(':', 1)[-1]) return set_error(task_uuid.rsplit(':', 1)[-1])
@app.task @app.task(name='commit_logitem')
def commit_logitem(task_uuid): def commit_logitem(task_uuid):
return move_to_commited(task_uuid.rsplit(':', 1)[-1]) return move_to_commited(task_uuid.rsplit(':', 1)[-1])