Comments (1)
I figured out how to do this with a bit of Twisted basics. I started by subclassing the Site
and Request
classes (twisted.web.server
). In the Request
subclass, I added the helper functions. Then I overloaded the buildProto()
function in the Site
subclass so the Site.requestFactory
is set to my subclassed Request
. Then I slightly modified what klein.app.Klein.run
does and start a TCP server using my subclasses. Works like a charm!
from klein import Klein
from twisted.web import http, server
from twisted.internet import reactor
#----- Subclasses -----#
class KleinHTTPRequest(server.Request):
""" Request subclass """
def getter(self, key, default=None):
# ...
def getOne(self, key, default=None):
# ...
def getOneCast(self, key, cast, default=None, decoding=None):
# ...
class KleinSite(server.Site):
""" Site subclass """
def buildProtocol(self, addr):
channel = http.HTTPFactory.buildProtocol(self, addr)
channel.requestFactory = KleinHTTPRequest # produce subclassed Request
channel.site = self
return channel
#----- Routes -----#
app = Klein()
@app.route('/hello', methods=['POST'])
def home(request):
return b'hello ' + request.getOne('name', 'world')
#----- Start server -----#
reactor.listenTCP(8000, KleinSite(app.resource()), interface='localhost')
reactor.run()
from klein.
Related Issues (20)
- extract requirements from tox.ini
- no contact info? HOT 1
- hyperlink generates invalid URLs via hypothesis which sometimes causes our tests to fail HOT 6
- KleinResourceTests.test_addSlash fails on Musl or glibc based system HOT 10
- Death to you garbage mainstream propaganda slaves
- Twisted fools, hope you have a tragic life and painful death.
- AttributeError: module 'OpenSSL.SSL' has no attribute 'TLS_METHOD' HOT 2
- Fix CI
- Klein does not work with Werkzeug 2.3
- Python 3.11 support
- Why "405 Method Not Allowed" ? HOT 3
- ReadTheDocs is showing old version of docs HOT 2
- release instructions as written do not actually issue a prerelease
- (maybe) put hypothesis back HOT 4
- the merge queue needs help from our status checks to actually work
- tox 4 usually hangs when I run tests locally HOT 1
- Returning a static file from a route that matches all URLs behaves unexpectedly
- Accessing the `installSignalHandlers` parameter of the `reactor.run()` method HOT 1
- Any way to do send_file like Flask HOT 1
- update to mypy 1.7 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from klein.