Add naive manager mechanism and prefetch command
This commit is contained in:
parent
aa76fbb49f
commit
742d699386
10
resources/ex_managed/managers/manager.py
Executable file
10
resources/ex_managed/managers/manager.py
Executable 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))
|
11
resources/ex_managed/meta.yaml
Normal file
11
resources/ex_managed/meta.yaml
Normal 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:
|
@ -261,3 +261,17 @@ def remove(name, tag, f):
|
||||
else:
|
||||
msg = 'Resource %s will be removed after commiting changes.' % res.name # NOQA
|
||||
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())
|
||||
|
@ -89,7 +89,8 @@ class Resource(object):
|
||||
'version': metadata.get('version', ''),
|
||||
'meta_inputs': inputs,
|
||||
'tags': tags,
|
||||
'state': RESOURCE_STATE.created.name
|
||||
'state': RESOURCE_STATE.created.name,
|
||||
'manager': metadata.get('manager')
|
||||
})
|
||||
self.create_inputs(args)
|
||||
|
||||
@ -285,6 +286,15 @@ class Resource(object):
|
||||
receiver.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):
|
||||
r = DBResource.get(name)
|
||||
|
@ -715,6 +715,7 @@ class Resource(Model):
|
||||
meta_inputs = Field(dict, default=dict)
|
||||
state = Field(str) # on_set/on_get would be useful
|
||||
events = Field(list, default=list)
|
||||
manager = Field(str)
|
||||
|
||||
inputs = InputsField(default=dict)
|
||||
tags = TagsField(default=list)
|
||||
|
@ -18,6 +18,7 @@ import json
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
from subprocess import Popen, PIPE, STDOUT
|
||||
|
||||
from jinja2 import Environment
|
||||
import yaml
|
||||
@ -34,6 +35,10 @@ def to_pretty_json(data):
|
||||
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
|
||||
jinja_env_with_filters = Environment()
|
||||
jinja_env_with_filters.filters['to_json'] = to_json
|
||||
|
Loading…
x
Reference in New Issue
Block a user