Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/calcite/mutaprops
Mutated Properties - a simple HTML5 property-configuration UI, autogenerated from your classes.
https://github.com/calcite/mutaprops
Last synced: 26 days ago
JSON representation
Mutated Properties - a simple HTML5 property-configuration UI, autogenerated from your classes.
- Host: GitHub
- URL: https://github.com/calcite/mutaprops
- Owner: calcite
- License: mit
- Created: 2017-08-30T13:14:30.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-26T20:28:27.000Z (about 2 years ago)
- Last Synced: 2024-04-22T17:13:33.136Z (10 months ago)
- Language: Python
- Size: 1.04 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
mutaprops
=========.. image:: https://img.shields.io/pypi/v/mutaprops.svg
:target: https://pypi.python.org/pypi/mutaprops.. image:: https://img.shields.io/travis/JNevrly/mutaprops.svg
:target: https://travis-ci.org/calcite/mutaprops.. image:: https://readthedocs.org/projects/pip/badge/
:target: https://readthedocs.org/projects/pip/badge/
:alt: Documentation Status.. image:: https://pyup.io/repos/github/calcite/mutaprops/shield.svg
:target: https://pyup.io/repos/github/calcite/mutaprops/
:alt: UpdatesMutated Properties - a simple HTML5 property-configuration UI,
autogenerated from your classes.It's great if you need a quick'n'dirty UI with minimal
effort and without changing much of the existing codebase. Mutaprops also thrive
on headless systems when usual UI solutions like tkinter_ doesn't make sense.However, the customization possibilities are limited, so if you are looking for
some framework for building a full-fledged attractive GUI, better look
elsewhere... * Free software: MIT license
.. * Documentation: https://mutaprops.readthedocs.io.Features
--------* Generate a self-documented web UI directly from your objects with simple decorators
* UI state automatically updated with object state changes (through websockets)
* Supports multiple UI sessions on the same object, synchronized through
websockets
* Supports clustering of UI's from multiple machines
* UI look and feel can be customized with your own stylesheet
* Add any widget you like with direct HTML support
* HTML5 log console capturing all your Python logging
* Asyncio support (and also a requirement ;))The simplest example
--------------------Imagine a normal Python class:
.. code-block:: python
class Hoovercraft:
MAX_EELS = 40
def __init__(self, number_of_eels=20, speed=0, direction='North'):
self._eel_count = number_of_eels
self._speed = speed
self._direction = direction
self._engine_running = False
self._steering_locked = True@property
def eels(self):
return self._eel_count@eels.setter
def eels(self, value):
self._eel_count = value
if self._eel_count >= self.MAX_EELS:
logger.warning("The hoovercraft is full of eels!")def drop_all_eels(self):
self.eels = 0
logger.info("Eels are goooone!")Now, to turn this into an UI, one just has to decorate it like this:
.. code-block:: python
from mutaprops import *
@mutaprop_class("Hoovercraft UI")
class Hoovercraft:MAX_EELS = 40
def __init__(self, number_of_eels=20, speed=0, direction='North'):
self._eel_count = number_of_eels
self._speed = speed
self._direction = direction
self._engine_running = False
self._steering_locked = True@mutaproperty("Number of eels", MutaTypes.INT, min_val=0,
max_val=MAX_EELS)
def eels(self):
return self._eel_count@eels.setter
def eels(self, value):
self._eel_count = value
if self._eel_count >= self.MAX_EELS:
logger.warning("The hoovercraft is full of eels!")@mutaprop_action("Drop all eels!")
def drop_all_eels(self):
self.eels = 0
logger.info("Eels are goooone!")And then run it like this:
.. code-block:: python
if __name__ == '__main__':
test = Hoovercraft()
test.muta_init("Hoovercraft instance #1")
man = HttpMutaManager("Hoovercraft manager", proxy_log=logger)
man.add_object(test)
man.run(port=9000)Et voila, here's the UI:
.. image:: docs/img/screenshot-simple.png
Other examples
--------------The ``examples/`` folder contains several other examples:
* `simple_example.py`_ is the extension of the example above, including more
data types and also shows how to work with docstrings and ``mutasources``* `advanced_example.py`_ demonstrates grouping of parameters, style
customizations, raw HTML features and asyncio integration.Full documentation
------------------The complete documentation is available at https://mutaprops.readthedocs.io
Using the UI
------------Simple explanation how to use the UI is
`here `_.Credits
-------The default logo created with the Chlorinar_ font.
The JavaScript frontend created with the fantastic `Vue.js`_.
The widgets and styling are based on `Bootstrap 3`_.
The toggle widget is the `Bootstrap toggle`_.
Hoovercraft logo used in `advanced_example.py`_ was created by Theresa Stoodley
from the Noun Project. Licensed under Creative Commons 3.0 license.This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.
.. _`simple_example.py`: examples/simple_example.py
.. _`advanced_example.py`: examples/advanced_example.py
.. _Chlorinar: http://www.dafont.com/chlorinar.font
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
.. _tkinter: https://docs.python.org/3.6/library/tkinter.html
.. _`Vue.js`: https://vuejs.org
.. _`Bootstrap 3`: https://getbootstrap.com/docs/3.3/
.. _`Bootstrap toggle`: http://www.bootstraptoggle.com/