Skip to main content

Asynchronous Component based Event Application Framework

Project description

circuits is a Lightweight Event driven and Asynchronous Application Framework for the Python Programming Language with a strong Component Architecture.

circuits also includes a lightweight, high performance and scalable HTTP/WSGI compliant web server as well as various I/O and Networking components.

Latest Version Supported Python Versions Supported Python implementations Development Status Number of Downloads Format License Requirements Status

Examples

Hello

#!/usr/bin/env python

"""circuits Hello World"""

from circuits import Component, Event


class hello(Event):
    """hello Event"""


class App(Component):

    def hello(self):
        """Hello Event Handler"""

        print("Hello World!")

    def started(self, component):
        """Started Event Handler

        This is fired internally when your application starts up and can be used to
        trigger events that only occur once during startup.
        """

        self.fire(hello())  # Fire hello Event

        raise SystemExit(0)  # Terminate the Application

App().run()

Echo Server

#!/usr/bin/env python

"""Simple TCP Echo Server

This example shows how you can create a simple TCP Server (an Echo Service)
utilizing the builtin Socket Components that the circuits library ships with.
"""

from circuits import handler, Debugger
from circuits.net.sockets import TCPServer


class EchoServer(TCPServer):

    @handler("read")
    def on_read(self, sock, data):
        """Read Event Handler

        This is fired by the underlying Socket Component when there has been
        new data read from the connected client.

        ..note :: By simply returning, client/server socket components listen
                  to ValueChagned events (feedback) to determine if a handler
                  returned some data and fires a subsequent Write event with
                  the value returned.
        """

        return data

# Start and "run" the system.
# Bind to port 0.0.0.0:9000
app = EchoServer(9000)
Debugger().register(app)
app.run()

Hello Web

#!/usr/bin/env python

from circuits.web import Server, Controller


class Root(Controller):

    def index(self):
        """Index Request Handler

        Controller(s) expose implicitly methods as request handlers.
        Request Handlers can still be customized by using the ``@expose``
        decorator. For example exposing as a different path.
        """

        return "Hello World!"

app = Server(("0.0.0.0", 9000))
Root().register(app)
app.run()

More examples

Features

  • event driven

  • concurrency support

  • component architecture

  • asynchronous I/O components

  • no required external dependencies

  • full featured web framework (circuits.web)

  • coroutine based synchronization primitives

Requirements

Supported Platforms

  • Linux, FreeBSD, Mac OS X, Windows

  • Python 2.6, 2.7, 3.2, 3.3, 3.4

  • pypy 2.0, 2.1, 2.2

Installation

The simplest and recommended way to install circuits is with pip. You may install the latest stable release from PyPI with pip:

> pip install circuits

If you do not have pip, you may use easy_install:

> easy_install circuits

Alternatively, you may download the source package from the PyPi Page or the Downloads Page extract it and install using:

> python setup.py install

License

circuits is licensed under the MIT License.

Feedback

We welcome any questions or feedback about bugs and suggestions on how to improve circuits. Let us know what you think about circuits. @pythoncircuits.

Do you have suggestions for improvement? Then please Create an Issue with details of what you would like to see. I’ll take a look at it and work with you to either incorporate the idea or find a better solution.

Community

There is also a small community of circuits enthusiasts that you may find on the #circuits IRC Channel on the FreeNode IRC Network and the Mailing List.

Download files

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

Source Distribution

circuits-3.1.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distributions

circuits-3.1.0-py2.7.egg (550.8 kB view details)

Uploaded Source

circuits-3.1.0-py2-none-any.whl (227.9 kB view details)

Uploaded Python 2

File details

Details for the file circuits-3.1.0.tar.gz.

File metadata

  • Download URL: circuits-3.1.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for circuits-3.1.0.tar.gz
Algorithm Hash digest
SHA256 637b411fd5843d7bdbebafbf1c0683b9ec3e56ce5c87545ccac02d48592b774b
MD5 c34cea2d7af2220001091f48123a11ce
BLAKE2b-256 b3f3f67ca8dfa247e7509cb92407a6cfd7b4a4a6ad2cf45526bb50feeaadcbe5

See more details on using hashes here.

File details

Details for the file circuits-3.1.0-py2.7.egg.

File metadata

  • Download URL: circuits-3.1.0-py2.7.egg
  • Upload date:
  • Size: 550.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for circuits-3.1.0-py2.7.egg
Algorithm Hash digest
SHA256 643026ea3426e2a8787760df9b1ef5986d4eca908d75b99bcdf8e5d89163d56e
MD5 08bb9aff749d62662afaaafd16edca18
BLAKE2b-256 a7cd53a11593c5d2d629bab4cdebf0170673b48fe4450952e501915db2ae338e

See more details on using hashes here.

File details

Details for the file circuits-3.1.0-py2-none-any.whl.

File metadata

File hashes

Hashes for circuits-3.1.0-py2-none-any.whl
Algorithm Hash digest
SHA256 3fc210578421f7cbd3122ccc63cbfd4c11961c253d3cbd91935dc596481d2922
MD5 877a073446767085db7581cfab60f77e
BLAKE2b-256 fdce3be210eacfd75752e149362804d7604b6e23c5794217373830160e9f887b

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