Skip to main content

Simple UI, autogenerated from your classes.

Project description

https://img.shields.io/pypi/v/mutaprops.svg https://img.shields.io/travis/JNevrly/mutaprops.svg Documentation Status Updates

Mutated 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.

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:

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:

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:

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:

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

TODO: Add link to RTD

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.

History

0.6.0 (2017-08-30)

  • Added css separation

  • Added documentation

  • Minor bug fixes

0.5.7 (2017-08-25)

Added the forgoten JS build…

0.5.6 (2017-08-25)

Fixed various UI bugs (read-only settings, responsive design, title). Actions now can have read-only setting.

0.5.5 (2017-04-26)

Fixed incompatibility with Python 3.4.2.

0.5.4 (2017-04-25)

Fixed debug print of properties.

0.5.3 (2017-04-21)

Fixed bug with log messages formatting on the Web UI.

0.5.2 (2017-04-20)

Fixed bug with Bool-type props help panels not uncollapsing.

0.5.1 (2017-03-06)

Fixed error message when object was not selected in an one-object list.

0.5.0 (2017-02-15)

  • Large internal rework - introduced update-dependencies for values and selected meta-values (selects, minimums, maximums, steps etc).

  • Added MutaSources as non-UI MutaProps for supporting internal dependencies

  • Added HTML type of value (read-only)

  • JS client now works with single state-store (Vuex)

  • MutaSelects removed - this functionality is now replaced by more general update-dependencies through MutaSources. This breaks compatibility with 0.4.x

0.4.1 (2016-12-06)

  • Fixed bug with displaying first prop in hierarchy panel.

0.4.0 (2016-12-06)

  • One level hierarchy (panels) and experimental support of toggle buttons instead of checkboxes.

0.3.0 (2016-11-03)

  • Allowed HTML in help blocks

  • Allowed local files/local dir

0.2.2 (2016-11-03)

  • Fixed path problem on linux

0.2.1 (2016-11-03)

  • Added ALPS logo

0.2.0 (2016-11-03)

  • HTTP manager chaining.

  • UI bugfixes.

0.1.0 (2016-11-03)

  • First (internal) release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

mutaprops-0.6.0-py2.py3-none-any.whl (228.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file mutaprops-0.6.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for mutaprops-0.6.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 290848907a8c6b9625ac737fe70a98a1df10ed3ab200421044f9bcd1f274874a
MD5 e657e60435b89c1dc204aae7f6f1d4f9
BLAKE2b-256 590a2b2f83c921a317d54b76af05a6c321830198d6450cf022cc072a7f599ac9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page