Update examples to v0.4
This commit is contained in:
parent
7557183a3a
commit
826a108308
6 changed files with 51 additions and 69 deletions
|
@ -1,13 +0,0 @@
|
||||||
{
|
|
||||||
"address": "::1",
|
|
||||||
"port": 8000,
|
|
||||||
"template": "examples/template.json",
|
|
||||||
"plugins_dir": "examples/plugins",
|
|
||||||
|
|
||||||
"plugins": {
|
|
||||||
"example": {
|
|
||||||
"test_value": "the Spanish Inquisition"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
16
examples/config.yaml
Normal file
16
examples/config.yaml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
# The address to listen on.
|
||||||
|
address: "::1"
|
||||||
|
# The TCP port to listen on.
|
||||||
|
port: 8000
|
||||||
|
# The Bottle backend server to use.
|
||||||
|
server: wsgiref
|
||||||
|
# Path to the SpaceAPI response template file.
|
||||||
|
template: template.yaml
|
||||||
|
# Path to the directory containing your plugins.
|
||||||
|
plugins_dir: plugins
|
||||||
|
plugins:
|
||||||
|
# Config for the "filestate" plugin
|
||||||
|
filestate:
|
||||||
|
# Use this statefile instead of the default
|
||||||
|
filename: /var/www/html/space_state
|
|
@ -1,36 +0,0 @@
|
||||||
|
|
||||||
from spaceapi_server import plugins
|
|
||||||
|
|
||||||
|
|
||||||
@plugins.template_function
|
|
||||||
def example_function(name: str):
|
|
||||||
"""
|
|
||||||
This function is registered as a Jinja2 function. It can be used like this:
|
|
||||||
{{ example_function('the Spanish Inquisition') }}
|
|
||||||
"""
|
|
||||||
return f'Nobody expects {name}'
|
|
||||||
|
|
||||||
|
|
||||||
@plugins.template_filter
|
|
||||||
def example_filter(name: str):
|
|
||||||
"""
|
|
||||||
This function is registered as a Jinja2 filter. It can be used like this:
|
|
||||||
{{ 'the Spanish Inquisition' | example_filter }}
|
|
||||||
"""
|
|
||||||
return f'Nobody expects {name}'
|
|
||||||
|
|
||||||
|
|
||||||
@plugins.template_function
|
|
||||||
def example_config_function():
|
|
||||||
"""
|
|
||||||
This function demonstrates the use of configuration.
|
|
||||||
{( example_config_function() }}
|
|
||||||
"""
|
|
||||||
# Config lookup example. A plugin's config should be below
|
|
||||||
# `.plugins[plugin_name]` (JSONPath)
|
|
||||||
|
|
||||||
# Get the .plugins.example dict
|
|
||||||
conf = plugins.get_plugin_config('example')
|
|
||||||
# Get the .test_value property from the plugin config, falling
|
|
||||||
# back to a default value
|
|
||||||
return conf.get('test_value', 'the Spanish Inquisition')
|
|
23
examples/plugins/filestate.py
Normal file
23
examples/plugins/filestate.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import os
|
||||||
|
from spaceapi_server import config, plugins
|
||||||
|
|
||||||
|
@plugins.template_function
|
||||||
|
# The plugin can be invoked by using the !space_state YAML tag
|
||||||
|
def space_state():
|
||||||
|
# Get the plugin config dict
|
||||||
|
conf = config.get_plugin_config('filestate')
|
||||||
|
# Get the filename, default to /var/space_state
|
||||||
|
filename = conf.get('filename', '/var/space_state')
|
||||||
|
try:
|
||||||
|
# Get the file's properties
|
||||||
|
stat = os.stat(filename)
|
||||||
|
except FileNotFoundError:
|
||||||
|
# File doesn't exist, aka. space is closed
|
||||||
|
return {
|
||||||
|
'open': False
|
||||||
|
}
|
||||||
|
# File exists, aka. space is open. Also report the mtime as "last changed" timestamp
|
||||||
|
return {
|
||||||
|
'open': True,
|
||||||
|
'lastchange': int(stat.st_mtime)
|
||||||
|
}
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"api": "0.13 {#- Go look at https://spaceapi.io/docs -#}",
|
|
||||||
"space": "Our New Hackerspace",
|
|
||||||
"logo": "https://example.org/logo.png",
|
|
||||||
"url": "https://example.org/",
|
|
||||||
"location": {
|
|
||||||
"lat": 0.0,
|
|
||||||
"lon": 0.0
|
|
||||||
},
|
|
||||||
"contact": {
|
|
||||||
"email": "example@example.org"
|
|
||||||
},
|
|
||||||
"issue_report_channels": [
|
|
||||||
"email"
|
|
||||||
],
|
|
||||||
"state": "{#- You can write your own plugins for retrieving dynamic information -#} {{ our_space_state() }}",
|
|
||||||
"sensors": {
|
|
||||||
"people_now_present": "{{ our_sensor_backend('people_count') }}"
|
|
||||||
}
|
|
||||||
}
|
|
12
examples/template.yaml
Normal file
12
examples/template.yaml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
api: "0.13"
|
||||||
|
space: My Hackerspace
|
||||||
|
# This is a plugin invocation
|
||||||
|
# with no arguments
|
||||||
|
state: !space_state {}
|
||||||
|
sensors:
|
||||||
|
# This is a plugin invocation with
|
||||||
|
# arguments. They are passed to the
|
||||||
|
# plugin function as kwargs.
|
||||||
|
network_connections: !network_connections
|
||||||
|
networks: [ "2.4 GHz", "5 GHz" ]
|
Loading…
Reference in a new issue