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.
Got questions?
Ask a Question (Tag it: circuits-framework)
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
circuits has no dependencies beyond the Python Standard Library.
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 or the Downloads 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 are also several places you can reach out to the circuits community:
Ask a Question on Stackoverflow (Tag it: circuits-framework)
Disclaimer
Whilst I (James Mills) continue to contribute and maintain the circuits project I do not represent the interests or business of my employer Facebook Inc. The contributions I make are of my own free time and have no bearing or relevance o Facebook Inc.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file circuits-3.2.tar.gz
.
File metadata
- Download URL: circuits-3.2.tar.gz
- Upload date:
- Size: 174.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2fad9be2235f87480c194efc91eaeed3cb030c465d4697f1ca326ce3619bf9b |
|
MD5 | 26daaca7f386c781820d2a1174d91325 |
|
BLAKE2b-256 | c4530577ec33811bb4657722629f27c53c16439c149e466414f7f7a2789742e7 |
File details
Details for the file circuits-3.2-py2-none-any.whl
.
File metadata
- Download URL: circuits-3.2-py2-none-any.whl
- Upload date:
- Size: 151.6 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68e284ba132950fff11d778a98a6286f71c106a7d49cc77aa818ba8b2b43deea |
|
MD5 | a798fcfd858a908ef37283bec191c0c0 |
|
BLAKE2b-256 | 7c4b602db54bbcf33ad3b6ddf1f0da3d67dce46cf21a989e84ab0f8d485828a1 |