GinsFSM

Note

This project is finalized.

I’m re-writting the idea of ginsfsm in C language. The name of the new project is Yuneta, and it will be released soon.

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:

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.

Installation

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

Basic Idea

Main classes:

_images/ginsfsm-classes.png

Briefly:

  • ginsfsm.gconfig.GConfig:

    Implements a flexible global configuration system, defining a gconfig-template.

  • ginsfsm.smachine.SMachine:

    Implements a simple Finite State Machine, defining a simple-machine.

  • ginsfsm.gobj.GObj:

    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.

  • ginsfsm.gaplic.GAplic:

    Me? Well, I’m too a gobj. I’m the root, the grandfather, and I can:

    • supply the main loop in a thread o subprocess context.
    • house all the child gobj’s who want.
    • serve as a bridge to other gaplic for send/receive events.
    • and more…

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.

Narrative documentation

Api documentation

Examples

About the author

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.

License

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>