Can you draw your development?
Can you view the behaviour of your application in real time?
With this framework you can!.
GinsFSM is a python library to develop systems based in finite-state machines (FSM). This model is really useful when writing networking and communication applications.
The idea is very simple:
- All objects, called gobj, are instances of a derived ginsfsm.gobj.GObj class.
- The GObj has an inside simple-machine that defines its behavior.
- The communication between gobj‘s happens via event‘s.
Thus, the nature of this system is fully asynchronous and event-driven.
The interface is simple and common to all objects; you just have to change the name of the event and the data they carry.
It includes a full asynchronous http server, wsgi server and winsocket server/client compatible with sockjs.
You can run multiple wsgi applications.
Ginsfsm comes with a variety of scaffolds that you can use to generate a project.
Like Pyramid framework pcreate/pserve commands, Ginsfsm provides the gcreate/gserve commands, to create and run ginsfsm projects.
With gcreate command you can create a ginsfsm project. For example, with multi_pyramid_wsgi scaffold, you will create a multiple wsgi application project, one of wsgi application being a Pyramid wsgi application.
The GObj’s objects are Pyramid “location-aware” resources. Also, the gobj’s are a hierarchical tree, also therefore the use of traversal dispatching are all natural.
You can install the library with easy_install:
easy_install ginsfsm
or with pip:
pip install ginsfsm
Documentation in http://ginsfsm.org/.
Code available in https://bitbucket.org/artgins/ginsfsm
Main classes:
Briefly:
Implements a flexible global configuration system, defining a gconfig-template.
Implements a simple Finite State Machine, defining a simple-machine.
Well, yes, I’m a very simple brain. Only a machine.
But you write a good FSM, and I never fail you:
Now I can feed my machine receiving external events, and me too can communicate with others gobj‘s sending them events.
Me? Well, I’m too a gobj. I’m the root, the grandfather, and I can:
The communication between gobj‘s happens via event‘s.
The nature of this system is fully asynchronous and event-driven.
The interface is simple and common to all objects; you just have to change the name of the event and the data they carry.
This programming style has been my programming style over 20 years of C language development, and now that I’m moving to python, I want to continue with that approach. I’m from Madrid (Spain). My English is very bad, so I would appreciate you telling any mistake you see.
Copyright (c) 2012-2013, Ginés Martínez Sánchez.
GinsFSM is released under terms of The MIT License <http://www.opensource.org/licenses/mit-license>