本文整理汇总了Python中spreads.workflow.Workflow类的典型用法代码示例。如果您正苦于以下问题:Python Workflow类的具体用法?Python Workflow怎么用?Python Workflow使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Workflow类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: create_workflow
def create_workflow():
""" Create a new workflow.
Payload should be a JSON object. The only required attribute is 'name' for
the desired workflow name. Optionally, 'config' can be set to a
configuration object in the form "plugin_name: { setting: value, ...}".
Returns the newly created workflow as a JSON object.
"""
data = json.loads(request.data)
path = Path(app.config['base_path'])/unicode(data['name'])
# Setup default configuration
config = app.config['default_config']
# Overlay user-supplied values, if existant
user_config = data.get('config', None)
if user_config is not None:
config = config.with_overlay(user_config)
workflow = Workflow(config=config, path=path,
step=data.get('step', None),
step_done=data.get('step_done', None))
try:
workflow.id = persistence.save_workflow(workflow)
except persistence.ValidationError as e:
return make_response(json.dumps(dict(errors=e.errors)), 400,
{'Content-Type': 'application/json'})
return make_response(json.dumps(workflow),
200, {'Content-Type': 'application/json'})
示例2: output
def output(config):
path = config['path'].get()
workflow = Workflow(config=config, path=path)
draw_progress(0)
workflow.on_step_progressed.connect(
lambda x, **kwargs: draw_progress(kwargs['progress']),
sender=workflow, weak=False)
workflow.output()
示例3: to_python
def to_python(self, value):
from spreadsplug.web import app
try:
uuid.UUID(value)
workflow = Workflow.find_by_id(app.config['base_path'], value)
except ValueError:
workflow = Workflow.find_by_slug(app.config['base_path'], value)
if workflow is None:
abort(404)
return workflow
示例4: delete_workflow
def delete_workflow(workflow):
""" Delete a single workflow from database and disk.
:param workflow: UUID or slug for the workflow to be updated
:type workflow: str
:status 200: When deletion was succesful
"""
Workflow.remove(workflow)
return jsonify({})
示例5: create_workflow
def create_workflow():
""" Create a new workflow.
Returns the newly created workflow as a JSON object.
"""
if request.content_type == 'application/zip':
zfile = zipfile.ZipFile(StringIO.StringIO(request.data))
zfile.extractall(path=app.config['base_path'])
wfname = os.path.dirname(zfile.filelist[0].filename)
workflow = Workflow(path=os.path.join(app.config['base_path'], wfname))
from spreads.workflow import on_created
on_created.send(workflow, workflow=workflow)
else:
data = json.loads(request.data)
if data.get('config'):
config = app.config['default_config'].with_overlay(
data.get('config'))
else:
config = app.config['default_config']
metadata = data.get('metadata', {})
try:
workflow = Workflow.create(location=app.config['base_path'],
config=config,
metadata=metadata)
except ValidationError as e:
return make_response(json.dumps(dict(errors=e.errors)), 400,
{'Content-Type': 'application/json'})
return make_response(json.dumps(workflow),
200, {'Content-Type': 'application/json'})
示例6: create_workflow
def create_workflow():
""" Create a new workflow.
:reqheader Accept: :mimetype:`application/json`
:<json object config: Configuration for new workflow
:<json object metadata: Metadata for new workflow
:resheader Content-Type: :mimetype:`application/json`
:status 200: When everything was OK.
:status 400: When validation of configuration or metadata
failed.
"""
data = json.loads(request.data)
if data.get('config'):
config = app.config['default_config'].with_overlay(
data.get('config'))
else:
config = app.config['default_config']
metadata = data.get('metadata', {})
workflow = Workflow.create(location=app.config['base_path'],
config=config,
metadata=metadata)
return make_response(json.dumps(workflow),
200, {'Content-Type': 'application/json'})
示例7: list_workflows
def list_workflows():
""" Return a list of all workflows.
:resheader Content-Type: :mimetype:`application/json`
"""
workflows = Workflow.find_all(app.config['base_path'])
return make_response(json.dumps(workflows.values()),
200, {'Content-Type': 'application/json'})
示例8: get
def get(self, workflow_id, filename):
uuid.UUID(workflow_id)
workflow = Workflow.find_by_id(self.base_path, workflow_id)
zstream = workflow.bag.package_as_zipstream(compression=None)
self.set_status(200)
self.set_header('Content-type', 'application/zip')
self.set_header('Content-length',
str(self.calculate_zipsize(zstream.paths_to_write)))
self.zstream_iter = iter(zstream)
self.send_next_chunk()
示例9: prepare_capture
def prepare_capture(workflow):
""" Prepare capture for the requested workflow. """
# Check if any other workflow is active and finish, if neccessary
logger.debug("Finishing previous workflows")
wfitems = Workflow.find_all(app.config['base_path'], key='id').iteritems()
for wfid, wf in wfitems:
if wf.status['step'] == 'capture' and wf.status['prepared']:
if wf is workflow and not request.args.get('reset'):
return 'OK'
wf.finish_capture()
try:
workflow.prepare_capture()
except DeviceException as e:
logger.error(e)
raise ApiException("Could not prepare capture: {0}".format(e.message),
500, error_type='device')
return 'OK'
示例10: capture
def capture(config):
path = config['path'].get()
workflow = Workflow(config=config, path=path)
if len(workflow.devices) != 2:
raise DeviceException("Please connect and turn on two"
" pre-configured devices! ({0} were"
" found)".format(len(workflow.devices)))
print(colorize("Found {0} devices!".format(len(workflow.devices)),
colorama.Fore.GREEN))
if any(not x.target_page for x in workflow.devices):
raise DeviceException("At least one of the devices has not been"
" properly configured, please re-run the"
" program with the \'configure\' option!")
# Set up for capturing
print("Setting up devices for capturing.")
workflow.prepare_capture()
# Start capture loop
shot_count = 0
pages_per_hour = 0
capture_keys = workflow.config['capture']['capture_keys'].as_str_seq()
print("({0}) capture | (r) retake last shot | (f) finish "
.format("/".join(capture_keys)))
while True:
retake = False
char = getch().lower()
if char == 'f':
break
elif char == 'r':
retake = True
elif char not in capture_keys:
continue
workflow.capture(retake=retake)
shot_count += len(workflow.devices)
pages_per_hour = (3600/(time.time() -
workflow.capture_start))*shot_count
status = ("\rShot {0: >3} pages [{1: >4.0f}/h] "
.format(unicode(shot_count), pages_per_hour))
sys.stdout.write(status)
sys.stdout.flush()
workflow.finish_capture()
if workflow.capture_start is None:
return
sys.stdout.write("\rShot {0} pages in {1:.1f} minutes, average speed was"
" {2:.0f} pages per hour\n"
.format(colorize(str(shot_count), colorama.Fore.GREEN),
(time.time() - workflow.capture_start)/60,
pages_per_hour))
sys.stdout.flush()
示例11: transfer_to_stick
def transfer_to_stick(wf_id, base_path):
workflow = Workflow.find_by_id(base_path, wf_id)
stick = find_stick()
files = list(workflow.path.rglob('*'))
num_files = len(files)
# Filter out problematic characters
clean_name = (workflow.path.name.replace(':', '_')
.replace('/', '_'))
workflow.status['step'] = 'transfer'
try:
if IS_WIN:
target_path = Path(stick)/clean_name
else:
mount = stick.get_dbus_method(
"FilesystemMount",
dbus_interface="org.freedesktop.UDisks.Device")
mount_point = mount('', [])
target_path = Path(mount_point)/clean_name
if target_path.exists():
shutil.rmtree(unicode(target_path))
target_path.mkdir()
signals['transfer:started'].send(workflow)
for num, path in enumerate(files, 1):
signals['transfer:progressed'].send(
workflow, progress=(num/num_files)*0.79, status=path.name)
workflow.status['step_done'] = (num/num_files)*0.79
target = target_path/path.relative_to(workflow.path)
if path.is_dir():
target.mkdir()
else:
shutil.copyfile(unicode(path), unicode(target))
finally:
if 'mount_point' in locals():
signals['transfer:progressed'].send(workflow, progress=0.8,
status="Syncing...")
workflow.status['step_done'] = 0.8
unmount = stick.get_dbus_method(
"FilesystemUnmount",
dbus_interface="org.freedesktop.UDisks.Device")
unmount([], timeout=1e6) # dbus-python doesn't know an infinite
# timeout... unmounting sometimes takes a
# long time, since the device has to be
# synced.
signals['transfer:completed'].send(workflow)
workflow.status['step'] = None
示例12: prepare_capture
def prepare_capture(workflow):
""" Prepare capture for the requested workflow.
"""
if app.config['mode'] not in ('scanner', 'full'):
raise ApiException("Only possible when running in 'scanner' or 'full'"
" mode.", 503)
# Check if any other workflow is active and finish, if neccessary
logger.debug("Finishing previous workflows")
wfitems = Workflow.find_all(app.config['base_path'], key='id').iteritems()
for wfid, wf in wfitems:
if wf.status['step'] == 'capture' and wf.status['prepared']:
if wf is workflow and not request.args.get('reset'):
return 'OK'
wf.finish_capture()
workflow.prepare_capture()
return 'OK'
示例13: create_workflow
def create_workflow():
""" Create a new workflow.
Returns the newly created workflow as a JSON object.
"""
data = json.loads(request.data)
if data.get('config'):
config = app.config['default_config'].with_overlay(
data.get('config'))
else:
config = app.config['default_config']
metadata = data.get('metadata', {})
workflow = Workflow.create(location=app.config['base_path'],
config=config,
metadata=metadata)
return make_response(json.dumps(workflow),
200, {'Content-Type': 'application/json'})
示例14: create_workflow
def create_workflow():
""" Create a new workflow.
Payload should be a JSON object. The only required attribute is 'name' for
the desired workflow name. Optionally, 'config' can be set to a
configuration object in the form "plugin_name: { setting: value, ...}".
Returns the newly created workflow as a JSON object.
"""
if request.content_type == 'application/zip':
zfile = zipfile.ZipFile(StringIO.StringIO(request.data))
zfile.extractall(path=app.config['base_path'])
wfname = os.path.dirname(zfile.filelist[0].filename)
workflow = Workflow(path=os.path.join(app.config['base_path'], wfname))
from spreads.workflow import on_created
on_created.send(workflow, workflow=workflow)
else:
data = json.loads(request.data)
if data.get('config'):
config = app.config['default_config'].with_overlay(
data.get('config'))
else:
config = app.config['default_config']
metadata = data.get('metadata', {})
try:
workflow = Workflow.create(location=app.config['base_path'],
name=unicode(data['name']),
config=config,
metadata=metadata)
except ValidationError as e:
return make_response(json.dumps(dict(errors=e.errors)), 400,
{'Content-Type': 'application/json'})
return make_response(json.dumps(workflow),
200, {'Content-Type': 'application/json'})
示例15: output_workflow
def output_workflow(wf_id, base_path):
workflow = Workflow.find_by_id(base_path, wf_id)
logger.debug("Initiating output generation for workflow {0}"
.format(workflow.slug))
workflow.output()