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:
|
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())
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user