A Python DSL for Queenbee workflow language.
Project description
queenbee-python-dsl
A Python Domain Specific Language (DSL) to create Queenbee Plugins and Recipes as Python objects.
API docs
Installation
- Clone this repository.
- Change directory to root folder of the repository.
pip install .
Quick Start
If you are interested to start writing your own plugins and recipe see the introduction post.
Function
from dataclasses import dataclass
from queenbee_dsl.function import Function, command, Inputs, Outputs
@dataclass
class CreateOctreeWithSky(Function):
"""Generate an octree from a Radiance folder and sky!"""
# inputs
include_aperture = Inputs.str(
default='include',
description='A value to indicate if the static aperture should be included in '
'octree. Valid values are include and exclude. Default is include.',
spec={'type': 'string', 'enum': ['include', 'exclude']}
)
black_out = Inputs.str(
default='default',
description='A value to indicate if the black material should be used. Valid '
'values are default and black. Default value is default.',
spec={'type': 'string', 'enum': ['black', 'default']}
)
model = Inputs.folder(description='Path to Radiance model folder.', path='model')
sky = Inputs.file(description='Path to sky file.', path='sky.sky')
@command
def create_octree(self):
return 'honeybee-radiance octree from-folder model --output scene.oct ' \
'--{{self.include_aperture}}-aperture --{{self.black_out}} ' \
'--add-before sky.sky'
# outputs
scene_file = Outputs.file(description='Output octree file.', path='scene.oct')
The Queenbee class is accessible from queenbee
property.
Try print(CreateOctreeWithSky().queenbee.yaml())
and you should see the full Queenbee
definition:
type: Function
annotations: {}
inputs:
- type: FunctionStringInput
annotations: {}
name: black-out
description: A value to indicate if the black material should be used. Valid values
are default and black. Default value is default.
default: default
alias: []
required: false
spec:
type: string
enum:
- black
- default
- type: FunctionStringInput
annotations: {}
name: include-aperture
description: A value to indicate if the static aperture should be included in octree.
Valid values are include and exclude. Default is include.
default: include
alias: []
required: false
spec:
type: string
enum:
- include
- exclude
- type: FunctionFolderInput
annotations: {}
name: model
description: Path to Radiance model folder.
default: null
alias: []
required: true
spec: null
path: model
- type: FunctionFileInput
annotations: {}
name: sky
description: Path to sky file.
default: null
alias: []
required: true
spec: null
path: sky.sky
extensions: null
outputs:
- type: FunctionFileOutput
annotations: {}
name: scene-file
description: Output octree file.
path: scene.oct
name: create-octree-with-sky
description: Generate an octree from a Radiance folder and sky!
command: honeybee-radiance octree from-folder model --output scene.oct --{{inputs.include-aperture}}-aperture
--{{inputs.black-out}} --add-before sky.sky
Since the functions are standard Python classes you can also subclass them from one another.
Plugin
To create a Queenbee plugin use the functions to create a standard Python module. The only
change is that you need to provide the information for Queenbee plugin in the __init__.py
file as dictionary assigned to __queenbee__
variable.
In the near future we might be able to use Python package's information to collect most of these information.
Follow the standard way to install a Python package. Once the package is installed you
can use queenbee-dsl
to load the package or write it to a folder.
from queenbee_dsl.package import load, write
# name of the queenbee package
python_package = 'pollination_honeybee_radiance'
# load this package as Queenbee Plugin
plugin = load(python_package)
# or write the package as a Queenbee plugin to a folder directly
write(python_package, './pollination-honeybee-radiance')
See pollination-honeybee-radiance
plugin for a full project example.
Recipe
Recipe
is a collection of DAG
s. Each DAG
is a collection of interrelated task
s.
You can use queenbee-dsl to create complex recipes with minimum code by reusing the functions
as templates for each task.
Packaging a plugin is exactly the same as packaging a plugin.
from queenbee_dsl.package import load, write
# name of the queenbee package
python_package = 'daylight-factor'
# load this package as Queenbee Recipe
recipe = load(python_package, baked=True)
# or write the package as a Queenbee plugin to a folder directly
write(python_package, './daylight-factor')
See daylight factor
recipe for a full project example.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for queenbee_dsl-0.5.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b98abffeb31bc12e3afbce86cbedbc914595efb0da6b6b7c8049ebc244737022 |
|
MD5 | 42b6ee086cf79636a5ced50ebcbf4489 |
|
BLAKE2b-256 | 19ebd8e3fb46b26ebaf654b0b643a9fc636d20ae3a108c7e0ed8eab902ddb385 |