Add naive manager mechanism and prefetch command

This commit is contained in:
Dmitry Shulyak 2015-11-10 11:12:07 +02:00
parent aa76fbb49f
commit 742d699386
6 changed files with 52 additions and 1 deletions

View File

@ -0,0 +1,10 @@
#!/usr/bin/env python
import sys
import json
data = json.loads(sys.stdin.read())
rst = {'val_x_val': int(data['val'])**2}
sys.stdout.write(json.dumps(rst))

View File

@ -0,0 +1,11 @@
id: managed
handler: none
version: 1.0.0
manager: managers/manager.py
input:
val:
schema: int!
value: 2
val_x_val:
schema: int
value:

View File

@ -261,3 +261,17 @@ def remove(name, tag, f):
else: else:
msg = 'Resource %s will be removed after commiting changes.' % res.name # NOQA msg = 'Resource %s will be removed after commiting changes.' % res.name # NOQA
click.echo(msg) click.echo(msg)
@resource.command()
@click.option('--name', '-n')
@click.option('--tag', '-t', multiple=True)
def prefetch(name, tag):
if name:
resources = [sresource.load(name)]
elif tag:
resources = sresource.load_by_tags(set(tag))
for res in resources:
res.prefetch()
click.echo(res.color_repr())

View File

@ -89,7 +89,8 @@ class Resource(object):
'version': metadata.get('version', ''), 'version': metadata.get('version', ''),
'meta_inputs': inputs, 'meta_inputs': inputs,
'tags': tags, 'tags': tags,
'state': RESOURCE_STATE.created.name 'state': RESOURCE_STATE.created.name,
'manager': metadata.get('manager')
}) })
self.create_inputs(args) self.create_inputs(args)
@ -285,6 +286,15 @@ class Resource(object):
receiver.db_obj.save_lazy() receiver.db_obj.save_lazy()
self.db_obj.save_lazy() self.db_obj.save_lazy()
def prefetch(self):
if not self.db_obj.manager:
return
manager_path = os.path.join(
self.db_obj.base_path, self.db_obj.manager)
data = json.dumps(self.args)
rst = utils.communicate([manager_path], data)
self.update(json.loads(rst))
def load(name): def load(name):
r = DBResource.get(name) r = DBResource.get(name)

View File

@ -715,6 +715,7 @@ class Resource(Model):
meta_inputs = Field(dict, default=dict) meta_inputs = Field(dict, default=dict)
state = Field(str) # on_set/on_get would be useful state = Field(str) # on_set/on_get would be useful
events = Field(list, default=list) events = Field(list, default=list)
manager = Field(str)
inputs = InputsField(default=dict) inputs = InputsField(default=dict)
tags = TagsField(default=list) tags = TagsField(default=list)

View File

@ -18,6 +18,7 @@ import json
import logging import logging
import os import os
import uuid import uuid
from subprocess import Popen, PIPE, STDOUT
from jinja2 import Environment from jinja2 import Environment
import yaml import yaml
@ -34,6 +35,10 @@ def to_pretty_json(data):
return json.dumps(data, indent=4) return json.dumps(data, indent=4)
def communicate(command, data):
popen = Popen(command, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
return popen.communicate(input=data)[0]
# Configure jinja2 filters # Configure jinja2 filters
jinja_env_with_filters = Environment() jinja_env_with_filters = Environment()
jinja_env_with_filters.filters['to_json'] = to_json jinja_env_with_filters.filters['to_json'] = to_json