CherryPy is a pythonic, object-oriented HTTP framework. https://docs.cherrypy.org/

Overview
CherryPy is available as part of the Tidelift Subscription https://readthedocs.org/projects/cherrypy/badge/?version=latest https://img.shields.io/travis/cherrypy/cherrypy/master.svg?label=Linux%20build%20%40%20Travis%20CI https://circleci.com/gh/cherrypy/cherrypy/tree/master.svg?style=svg https://img.shields.io/appveyor/ci/CherryPy/cherrypy/master.svg?label=Windows%20build%20%40%20Appveyor https://img.shields.io/badge/license-BSD-blue.svg?maxAge=3600 stable https://api.codacy.com/project/badge/Grade/48b11060b5d249dc86e52dac2be2c715 codecov

Welcome to the GitHub repository of CherryPy!

CherryPy is a pythonic, object-oriented HTTP framework.

  1. It allows building web applications in much the same way one would build any other object-oriented program.
  2. This design results in less and more readable code being developed faster. It's all just properties and methods.
  3. It is now more than ten years old and has proven fast and very stable.
  4. It is being used in production by many sites, from the simplest to the most demanding.
  5. And perhaps most importantly, it is fun to work with :-)

Here's how easy it is to write "Hello World" in CherryPy:

import cherrypy

class HelloWorld(object):
    @cherrypy.expose
    def index(self):
        return "Hello World!"

cherrypy.quickstart(HelloWorld())

And it continues to work that intuitively when systems grow, allowing for the Python object model to be dynamically presented as a web site and/or API.

While CherryPy is one of the easiest and most intuitive frameworks out there, the prerequisite for understanding the CherryPy documentation is that you have a general understanding of Python and web development. Additionally:

If the docs are insufficient to address your needs, the CherryPy community has several avenues for support.

For Enterprise

CherryPy is available as part of the Tidelift Subscription.

The CherryPy maintainers and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.

Learn more.

Contributing

Please follow the contribution guidelines. And by all means, absorb the Zen of CherryPy.

Comments
  • error: [Errno 0] Error

    error: [Errno 0] Error

    On Debian 9, with OpenSSL 1.1.0f 25 May 2017 CherryPy will thrown this (non-fatal) error on startup when using the 'server.ssl_module': 'builtin'. It does not happen when using 'server.ssl_module': 'pyopenssl'.

    This is not just on our older CherryPy, but also on the latest CherryPy version 11 and both on Python 2.7 and Python 3.5.

    We have been chasing this error for a while and first assumed it was a bug in Python. I was ready to report it to Python bug-tracker, but I cannot reproduce it using pure-python. So it really is something specific to what CherryPy does.

    Code:

    import cherrypy
    print(cherrypy.__version__)
    
    class RootServer:
        @cherrypy.expose
        def index(self, **keywords):
            return "it works!"
    
    if __name__ == '__main__':
        server_config={
            'server.socket_host': '0.0.0.0',
            'server.socket_port': 9090,
            'server.ssl_module': 'builtin',
            #'server.ssl_module':'pyopenssl',
            'server.ssl_certificate':'/root/.sabnzbd/admin/server.cert',
            'server.ssl_private_key':'/root/.sabnzbd/admin/server.key'
        }
    
        cherrypy.config.update(server_config)
        cherrypy.quickstart(RootServer())
    

    Error thrown by Python 2.7 and 3.5:

    11.0.0
    [11/Aug/2017:13:23:57] ENGINE Listening for SIGHUP.
    [11/Aug/2017:13:23:57] ENGINE Listening for SIGTERM.
    [11/Aug/2017:13:23:57] ENGINE Listening for SIGUSR1.
    [11/Aug/2017:13:23:57] ENGINE Bus STARTING
    CherryPy Checker:
    The Application mounted at '' has an empty config.
    
    [11/Aug/2017:13:23:57] ENGINE Started monitor thread '_TimeoutMonitor'.
    [11/Aug/2017:13:23:57] ENGINE Started monitor thread 'Autoreloader'.
    [11/Aug/2017:13:23:57] ENGINE Serving on https://0.0.0.0:9090
    [11/Aug/2017:13:23:57] ENGINE Bus STARTED
    [11/Aug/2017:13:23:57] ENGINE Error in HTTPServer.tick
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/cheroot/server.py", line 1515, in start
        self.tick()
      File "/usr/local/lib/python2.7/dist-packages/cheroot/server.py", line 1590, in tick
        s, ssl_env = self.ssl_adapter.wrap(s)
      File "/usr/local/lib/python2.7/dist-packages/cheroot/ssl/builtin.py", line 73, in wrap
        server_side=True)
      File "/usr/lib/python2.7/ssl.py", line 363, in wrap_socket
        _context=self)
      File "/usr/lib/python2.7/ssl.py", line 611, in __init__
        self.do_handshake()
      File "/usr/lib/python2.7/ssl.py", line 840, in do_handshake
        self._sslobj.do_handshake()
    error: [Errno 0] Error
    

    Pure-python code version trying to reproduce all steps cherrypy performs, that does not thrown the error:

    import socket, ssl
    import fcntl
    
    print "Start"
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.load_cert_chain(certfile="/root/.sabnzbd/admin/server.cert", keyfile="/root/.sabnzbd/admin/server.key")
    
    bindsocket = socket.socket()
    bindsocket.bind(('0.0.0.0', 9090))
    bindsocket.listen(5)
    
    while True:
        newsocket, fromaddr = bindsocket.accept()
    
        fd = newsocket.fileno()
        old_flags = fcntl.fcntl(fd, fcntl.F_GETFD)
        fcntl.fcntl(fd, fcntl.F_SETFD, old_flags | fcntl.FD_CLOEXEC)
    
        sslsoc = context.wrap_socket(newsocket, do_handshake_on_connect=True, server_side=True)
        request = sslsoc.read()
        print(request)
        print(sslsoc.cipher())
    print "Done"
    

    @sanderjo also created a guide to setting-up a docker to with Debian to test this: https://github.com/sabnzbd/sabnzbd/issues/1000 For non-docker-people like me, this command can be used to copy files into the docker:

    sudo docker cp test.py DOCKER-ID:/test.py
    
    bug 
    opened by Safihre 56
  • disabling wsgi interface fails under python3

    disabling wsgi interface fails under python3

    Originally reported by: Tim Miller (Bitbucket: lashni, GitHub: Unknown)


    http://docs.cherrypy.org/en/latest/advanced.html#no-need-for-the-wsgi-interface

    Error is encountered when the example code from the link above is run under a python 3.4.3 virtualenv on archlinux, traceback triggers when the server is accessed. Error doesn't occur with python 2.7.10.

    Happens with both current head and CherryPy 3.8.0.

    [19/Jul/2015:17:41:01] ENGINE Listening for SIGUSR1.
    [19/Jul/2015:17:41:01] ENGINE Listening for SIGTERM.
    [19/Jul/2015:17:41:01] ENGINE Listening for SIGHUP.
    [19/Jul/2015:17:41:01] ENGINE Bus STARTING
    CherryPy Checker:
    The Application mounted at '' has an empty config.
    
    [19/Jul/2015:17:41:01] ENGINE Started monitor thread '_TimeoutMonitor'.
    [19/Jul/2015:17:41:01] ENGINE Started monitor thread 'Autoreloader'.
    [19/Jul/2015:17:41:01] ENGINE Serving on http://127.0.0.1:8080
    [19/Jul/2015:17:41:01] ENGINE Bus STARTED
    [19/Jul/2015:17:41:05] NATIVE_ADAPTER Traceback (most recent call last):
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/_cpnative_server.py", line 27, in respond
        sn = cherrypy.tree.script_name(req.uri or "/")
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/_cptree.py", line 257, in script_name
        path = path[:path.rfind("/")]
    TypeError: 'str' does not support the buffer interface
    
    ValueError('invalid literal for int() with base 10: "b\'5"',)
    Traceback (most recent call last):
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/_cpnative_server.py", line 27, in respond
        sn = cherrypy.tree.script_name(req.uri or "/")
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/_cptree.py", line 257, in script_name
        path = path[:path.rfind("/")]
    TypeError: 'str' does not support the buffer interface
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/wsgiserver/wsgiserver3.py", line 1068, in communicate
        req.respond()
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/wsgiserver/wsgiserver3.py", line 856, in respond
        self.server.gateway(self).respond()
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/_cpnative_server.py", line 88, in respond
        self.send_response(s, h, b)
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/_cpnative_server.py", line 101, in send_response
        req.send_headers()
      File "/home/lashni/dev/serve/lib/python3.4/site-packages/cherrypy/wsgiserver/wsgiserver3.py", line 912, in send_headers
        status = int(self.status[:3])
    ValueError: invalid literal for int() with base 10: "b'5"
    

    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1377
    bug CherryPy code critical Hacktoberfest 
    opened by ghost 40
  • Migrate to Github

    Migrate to Github

    Originally reported by: Jason R. Coombs (Bitbucket: jaraco, GitHub: jaraco)


    In order to be more visible and friendly to more contributors, CherryPy should consider moving to Github.

    Github is the canonical and preferred hosting for most open source projects.

    I'm willing to help with the process, but I first want to get the nod from @cyraxjoe and @Lawouach. Also, we'll need to create a CherryPy org (if there's not a better one to host it).

    I propose migrating the existing issues to Github using https://github.com/jeffwidman/bitbucket-issue-migration or one of its many forks. I'm happy to test and execute that.


    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1410
    major task 
    opened by ghost 36
  • socket problems on Mac OS X Tiger

    socket problems on Mac OS X Tiger

    Originally reported by: guest (Bitbucket: guest, GitHub: guest)


    There is a big problem with CP in conjunction with Python 2.4.4 on Tiger!

    Did you ever try to respond an image (1 Mpx) directly by cherrypy?

    I installed Python 2.4.4 Universal Binary Installer, then CherryPy 2.2.1 on Mac OS X Tiger 10.4.8 (Mac Mini Dual Core 2).

    My CherryPy App should deliver images (jub -- dynamicly generates ones), but I always receive only the first part of the image in my browser. Cherrypy throws an exception within the write-method, which is delegated to socket-write which ends up in a sendall in socket.py:

    error 35: Resource temporarily unavailable.

    Seams that this is a problem caused by some changes in the socket api between Python 2.4.3 and 2.4.4. If this is true and I didn't make a mistake, CherryPy can not be used upon P 2.4.4 on Tiger (if you try to respond something bigger than a small HTML page).

    I am thinking on Kevin Dangoors nice Turbogears Screencast, running on Max OS X... How should people redo this cool stuff he shows...?


    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/598
    bug major CherryPy code 
    opened by ghost 31
  • 3.2.5 wheel does not include wsgiserver2.py but the tarball does

    3.2.5 wheel does not include wsgiserver2.py but the tarball does

    Originally reported by: cdent (Bitbucket: cdent, GitHub: cdent)


    When installing CherryPy with modern pip, wsgiserver2.py is missing. Upon investigation I discovered (by download both by hand) that the .whl file doesn't have it, but the .tar.gz file does.

    The ssl_pyopenssl.py from the same directory also appears to be missing from the wheel file.

    Forcing pip to --no-use-wheel gets the desired results, but clearly there's some kind of packaging error going on?


    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1295
    bug major 
    opened by ghost 29
  • SSL not working

    SSL not working

    Originally reported by: Anonymous


    Using a recent checkout of CherryPy 3.2.5 and a recent nightly build of PyPy, SSL support doesn't seem to work.

    I have tried pyOpenSSL 0.12 (pypy version), pyOpenSSL 0.14, and CherryPy "builtin". In all cases, CherryPy starts up and runs fine, throws no errors, but I can't connect via HTTPS.

    In production I'm using an older (circa 9 months) nightly build of PyPy, CherryPy 3.2.4 and pyOpenSSL 0.12 and it works fine.

    My connection code:

    #!python
    
    server2 = cherrypy._cpserver.Server()
                server2.socket_port = 443
                server2.socket_host = LISTEN_HOST
                server2.thread_pool = 30
                server2.ssl_module = 'pyopenssl'
                server2.ssl_certificate = SSL_CERTIFICATE_PATH
                server2.ssl_private_key = SSL_KEY_PATH
                server2.subscribe()
    

    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1298
    bug wsgiserver blocker 
    opened by ghost 25
  • Adding support for client certificate verification in SSLAdapter (patch included)

    Adding support for client certificate verification in SSLAdapter (patch included)

    Originally reported by: Anonymous


    Enhancement

    Adding support for client SSL certificate verification to wsgiserver's SSLAdapter

    Reason

    SSL support is critical for modern webservers to provide secure services to users. However, there are times when applications running behind the webservers need to determine which clients are actually communicating them. While HTTP basic_auth can provide authentication, SSL provides another means to verify client identity: client certification verification.

    Similar to the server providing its SSL certificate, when client verification is in use, clients must provide a certificate signed by a CA that the server recognizes in order for the client to be allowed to connect.

    Changes

    This patch adds another optional keyword argument to the SSLAdapter __init__() called ''client_CA''. ''client_CA'' is a string that contains a path to a CA certificate. When client_CA is present, the SSLAdapter knows to perform client verification using this CA. When absent, SSLAdapter behaves as before, ie with no client verification.

    Bugs/Issues

    While verification is performed correctly for both the ssl_pyopenssl SSLAdapter and the ssl_builtin SSLAdapter, the different implementations provide varying levels of support for SSL client environment variables that are traditionally provided by Apache's mod_ssl. See this page for details Mod_SSL Environment Variables.

    ssl_pyopenssl currently provides '''no''' client environment variables due to the fact that the SSL handshake and thus the access to the client's certificate occurs at first data transfer - well after the environment variables are set by the SSLAdapter wrap() function.

    ssl_builtin provides minimal environment variables. The major limiting factor is that python's builtin ssl routines only expose a small amount of information about the certificates, and then only for the client certificate. This problem will be difficult to fix if ssl_builtin must depend solely on python's ssl.

    Patch

    See attached Diff

    Reported by [email protected]


    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1001
    enhancement wsgiserver critical Cheroot 
    opened by ghost 24
  • Host cherrypy.org through CloudFlare

    Host cherrypy.org through CloudFlare

    @webknjaz has proposed Cherrypy.org be hosted through a free CloudFlare account to give a better experience and host the site under SSL. To accomplish this, there are a few steps.

    • [x] Create a CloudFlare account with some shared management.
    • [x] Import the domain records as currently hosted with WebFaction to CloudFlare.
    • [x] Reconfigure the cherrypy.org domain at the registrar to CloudFlare.

    It's important that the CloudFlare account be under shared management such that more than one maintainer has the ability to manage the domain.

    task 
    opened by jaraco 23
  • CherryPy leaving hundreds of close_wait connections open

    CherryPy leaving hundreds of close_wait connections open

    Originally reported by: Fred Rupert (Bitbucket: fred_rupert, GitHub: Unknown)


    CherryPy is leaving hundreds of close_wait connections open, I have to restart my CherryPy server every couple of days because it doesn't allow any more connections, and when I check netstat I see hundreds of close_wait connections.

    I know this has been brought up a number of times here, does anyone know if a definitive cause has been found for it, or if there is a fix/work around for it?

    TIA


    • Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1304
    bug major engine 
    opened by ghost 22
  • "ImportError: No module named jaraco.functools" raised in app frozen by py2exe

    • Windows 8.1 64bit
    • Python 2.7.15 32bit
    • py2exe 0.6.10a1
    • CherryPy 16.0.2
    • Cheroot 6.3.2.post0
    • tempora 1.13
    • jaraco.functools 1.20

    "ImportError: No module named jaraco.functools" raised in my app frozen by py2exe.

    D:\prj\test\dist_py2exe>test.exe
    ----------------------------------------
    main : Unhandled error
    Traceback (most recent call last):
    ...
      File "cherrypy\process\servers.pyo", line 126, in <module>
      File "zipextimporter.pyo", line 74, in load_module
      File "portend.pyo", line 18, in <module>
      File "zipextimporter.pyo", line 74, in load_module
      File "tempora\timing.pyo", line 12, in <module>
    ImportError: No module named jaraco.functools
    

    jaraco.functools seems the namespace package. This issue may be same to https://github.com/jaraco/jaraco.classes/issues/3

    Is allowed the namespace package in CherryPy? https://github.com/cherrypy/cherrypy/issues/1673

    opened by marunguy 20
  • AntiStampede Cache leaves orphaned threading.Event object on 304 Not Modified response

    AntiStampede Cache leaves orphaned threading.Event object on 304 Not Modified response

    AntiStampede Cache leaves orphaned threading.Event object on 304 Not Modified response and results in a 30 second timeout on subsequent request.

    We are not able to reliably reproduce this problem, we only know that it happens and have the logs to scrutinize the TOOLS.CACHING code path followed when hitting the bug.

    We've narrowed down the bug to

    • static files
    • an 'If-Modified-Since' request provoking a 304 Not modified response, leaving an orphaned threading.Event, causing
    • a 30 seconds timeout on subsequent (normal) request

    The logs show that the 304 provoking request follows the AntistampeCache.wait path, setting the threading.Event while returning a None to MemoryCache.get() variant object, causing it to return None to get()'s cache_data, causing it to follow the 'request is not cached' path of get(), returning False, but MemoryCache.put() is never called, thus leaving the threading.Event object orphaned.

    The subsequent request for the same static file also follows the AntistampeCache.wait path. Encountering the orphaned threading.Event object causing it to fruitlessly wait 30 seconds after which it resolves the problem by diligently populating the cache object with the (eventually) responded static file.

    After this, normal operation is resumed.

    This happens mostly once a day, probably after cache has expired, after one of the clients was the last to requests an 'If-Modified-Since' static file response. But until now, we were not able to come up with a clean reproducible test case.

    CherryPy is part of the Pyff daemon we deployed. https://github.com/leifj/pyFF/issues/116

    • CherryPy version: 11.1.0
    • Python version: 2.7 due to Pyff dependancy
    • OS: Debian GNU/Linux 9
    • Browser: Chrome 63

    The logging showing the problem, which was produced by us inserted extra debugging lines looks as follows. I understand that interpreting these logs without knowledge of the location of these statements is awkward. Nevertheless it clearly shows the timeout after the offending 304'd static file request.

    Jan 19 08:43:26 proxy2 pyffd[4100]: [19/Jan/2018:08:43:26] TOOLS.CACHING get https:/***/static/bootstrap/css/bootstrap.min.css
    Jan 19 08:43:26 proxy2 pyffd[4100]: [19/Jan/2018:08:43:26] TOOLS.CACHING Wait result for key: (), type(value) <type 'NoneType'>
    Jan 19 08:43:26 proxy2 pyffd[4100]: [19/Jan/2018:08:43:26] TOOLS.CACHING Cache was None, set Event <threading._Event object at 0x7f7b6c623a50>
    Jan 19 08:43:26 proxy2 pyffd[4100]: [19/Jan/2018:08:43:26] TOOLS.CACHING variant found
    Jan 19 08:43:26 proxy2 pyffd[4100]: [19/Jan/2018:08:43:26] TOOLS.CACHING request is not cached
    [...]
    Jan 19 08:43:26 proxy2 pyffd[4100]: 145.97.144.156 - - [19/Jan/2018:08:43:26] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 - "https://***/role/idp.ds?return=https%3A%2F%2F***%2FSaml2SP%2Fdisco&entit
    yID=https%3A%2F%2F***%2FSaml2SP%2Fproxy_saml2_backend.xml" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
    
    
    Jan 19 08:47:52 proxy2 pyffd[4100]: [19/Jan/2018:08:47:52] TOOLS.CACHING get https://***/static/bootstrap/css/bootstrap.min.css
    Jan 19 08:47:52 proxy2 pyffd[4100]: [19/Jan/2018:08:47:52] TOOLS.CACHING Wait result for key: (), type(value) <class 'threading._Event'>
    Jan 19 08:47:52 proxy2 pyffd[4100]: [19/Jan/2018:08:47:52] TOOLS.CACHING Event <threading._Event object at 0x7f7b6c623a50>
    Jan 19 08:47:52 proxy2 pyffd[4100]: [19/Jan/2018:08:47:52] TOOLS.CACHING Waiting up to 30 seconds
    [...]
    Jan 19 08:48:22 proxy2 pyffd[4100]: [19/Jan/2018:08:48:22] TOOLS.CACHING Timed out 30 seconds
    Jan 19 08:48:22 proxy2 pyffd[4100]: [19/Jan/2018:08:48:22] TOOLS.CACHING variant found
    Jan 19 08:48:22 proxy2 pyffd[4100]: [19/Jan/2018:08:48:22] TOOLS.CACHING request is not cached
    Jan 19 08:48:22 proxy2 pyffd[4100]: [19/Jan/2018:08:48:22] TOOLS.CACHING get() status: None
    Jan 19 08:48:22 proxy2 pyffd[4100]: [19/Jan/2018:08:48:22] TOOLS.CACHING Storing status: 200 OK, uri:https://***/static/bootstrap/css/bootstrap.min.css
    Jan 19 08:48:22 proxy2 pyffd[4100]: 2001:610:514:172:31da:c3b9:12ad:1b76 - - [19/Jan/2018:08:48:22] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 109518 "https://***/role/idp.ds?return=https%3A%2F%2F***%2FSaml2SP%2Fdisco&entityID=https%3A%2F%2F***%2FSaml2SP%2Fproxy_saml2_backend.xml" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    

    What we noticed is that the caching.py get() cherrypy.HTTPRedirect 304 exception code path is not touched on the 304 response. This must mean that the 304 is generated in static.py in serve_file() by cptools.validate_since().

    Up to now, we were unable to explain why this specific 304 response would provoke the cacheobject not to be populated by the corresponding cache, while having set a threading.Event.

    What we did see was that MemoryCache.expire_cache() clears (del) the AntistampedeCache variant object in the store dictionary, but keeps the store uri key. This means that after cache expiration a store[uri] key exists but has no cache object attached. This might explain the 304 following the Antistampede.wait path without replacing the threading.Event object but we were not sure and unable to force faster cache expiration to produce a test-case (up to now).

    For now, we had to decide to let the bug go and work-around it by letting nginx serve Pyff's static files, although this is a less than ideal solution of course.

    bug CherryPy code reproducer: missing 
    opened by mrvanes 20
  • Can i know how to implement the logging (cpstats) in cherry py application

    Can i know how to implement the logging (cpstats) in cherry py application

    I'm submitting a ...

    • [ ] bug report
    • [x] feature request
    • [ ] question about the decisions made in the repository

    Do you want to request a feature or report a bug?

    What is the current behavior?

    If the current behavior is a bug, please provide the steps to reproduce and if possible a screenshots and logs of the problem. If you can, show us your code.

    What is the expected behavior?

    What is the motivation / use case for changing the behavior?

    Please tell us about your environment:

    • Cheroot version: X.X.X
    • CherryPy version: X.X.X
    • Python version: 3.6.X
    • OS: XXX
    • Browser: [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]

    Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, e.g. stackoverflow, gitter, etc.)

    opened by barathkumarg 0
  • Replace python-memcached with pymemcache

    Replace python-memcached with pymemcache

    python-memcached is not maintained, this patch replaces the usage of python-memcached with the pymemcache python package.

    Fix https://github.com/cherrypy/cherrypy/issues/1983

    What kind of change does this PR introduce?

    • [ ] bug fix
    • [ ] feature
    • [ ] docs update
    • [ ] tests/coverage improvement
    • [ ] refactoring
    • [x] other

    What is the related issue number (starting with #)

    #1983 1983

    What is the current behavior? (You can also link to an open issue here)

    Depends on python-memcached

    What is the new behavior (if this is a feature change)?

    Depends on pymemcache

    Checklist:

    • [x] I think the code is well written
    • [x] I wrote good commit messages
    • [x] I have squashed related commits together after the changes have been approved
    • [x] Unit tests for the changes exist
    • [x] Integration tests for the changes exist (if applicable)
    • [x] I used the same coding conventions as the rest of the project
    • [x] The new code doesn't generate linter offenses
    • [x] Documentation reflects the changes
    • [x] The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences
    opened by danigm 0
  • Replace python-memcached with pymemcache or other maintained package

    Replace python-memcached with pymemcache or other maintained package

    I'm submitting a ...

    • [ ] bug report
    • [x] feature request
    • [ ] question about the decisions made in the repository

    Do you want to request a feature or report a bug?

    It's a maintenance request. The package python-memcached is not actively maintained anymore and other package could be a better option to depend on, for example https://github.com/pinterest/pymemcache

    opened by danigm 0
  • License :: Freely Distributable

    License :: Freely Distributable

    I'm submitting a ...

    • [ ] bug report
    • [ ] feature request
    • [x] question about the decisions made in the repository

    Do you want to request a feature or report a bug?

    Neither

    What is the current behavior?

    When i was packaging cherrypy in fedora copr, i met a license issue, seems the License :: Freely Distributable is not compatible in fedora community.

    Assuming PyPI --version=18.8.0
    Attempting to get license from Classifiers
    License 'Freely Distributable' is or may not be allowed in Fedora, quitting
    stderr: 
    

    FYI, https://github.com/befeleme/pyp2spec/issues/29

    If the current behavior is a bug, please provide the steps to reproduce and if possible a screenshots and logs of the problem. If you can, show us your code.

    NA

    What is the expected behavior?

    Since cherrypy is mainly licensed under BSD, it should be packaged in fedora community. What‘s the backgroup of classifier License :: Freely Distributable in setup.py? The fedora team's advices are acceptable?(remove the License :: Freely Distributable entry)

    What is the motivation / use case for changing the behavior?

    We want to import cherrypy to feodra for some other software use it.

    Please tell us about your environment: NA

    Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, e.g. stackoverflow, gitter, etc.)

    opened by pkking 0
  • Add CodeQL workflow for GitHub code scanning

    Add CodeQL workflow for GitHub code scanning

    Hi cherrypy/cherrypy!

    This is a one-off automatically generated pull request from LGTM.com :robot:. You might have heard that we’ve integrated LGTM’s underlying CodeQL analysis engine natively into GitHub. The result is GitHub code scanning!

    With LGTM fully integrated into code scanning, we are focused on improving CodeQL within the native GitHub code scanning experience. In order to take advantage of current and future improvements to our analysis capabilities, we suggest you enable code scanning on your repository. Please take a look at our blog post for more information.

    This pull request enables code scanning by adding an auto-generated codeql.yml workflow file for GitHub Actions to your repository — take a look! We tested it before opening this pull request, so all should be working :heavy_check_mark:. In fact, you might already have seen some alerts appear on this pull request!

    Where needed and if possible, we’ve adjusted the configuration to the needs of your particular repository. But of course, you should feel free to tweak it further! Check this page for detailed documentation.

    Questions? Check out the FAQ below!

    FAQ

    Click here to expand the FAQ section

    How often will the code scanning analysis run?

    By default, code scanning will trigger a scan with the CodeQL engine on the following events:

    • On every pull request — to flag up potential security problems for you to investigate before merging a PR.
    • On every push to your default branch and other protected branches — this keeps the analysis results on your repository’s Security tab up to date.
    • Once a week at a fixed time — to make sure you benefit from the latest updated security analysis even when no code was committed or PRs were opened.

    What will this cost?

    Nothing! The CodeQL engine will run inside GitHub Actions, making use of your unlimited free compute minutes for public repositories.

    What types of problems does CodeQL find?

    The CodeQL engine that powers GitHub code scanning is the exact same engine that powers LGTM.com. The exact set of rules has been tweaked slightly, but you should see almost exactly the same types of alerts as you were used to on LGTM.com: we’ve enabled the security-and-quality query suite for you.

    How do I upgrade my CodeQL engine?

    No need! New versions of the CodeQL analysis are constantly deployed on GitHub.com; your repository will automatically benefit from the most recently released version.

    The analysis doesn’t seem to be working

    If you get an error in GitHub Actions that indicates that CodeQL wasn’t able to analyze your code, please follow the instructions here to debug the analysis.

    How do I disable LGTM.com?

    If you have LGTM’s automatic pull request analysis enabled, then you can follow these steps to disable the LGTM pull request analysis. You don’t actually need to remove your repository from LGTM.com; it will automatically be removed in the next few months as part of the deprecation of LGTM.com (more info here).

    Which source code hosting platforms does code scanning support?

    GitHub code scanning is deeply integrated within GitHub itself. If you’d like to scan source code that is hosted elsewhere, we suggest that you create a mirror of that code on GitHub.

    How do I know this PR is legitimate?

    This PR is filed by the official LGTM.com GitHub App, in line with the deprecation timeline that was announced on the official GitHub Blog. The proposed GitHub Action workflow uses the official open source GitHub CodeQL Action. If you have any other questions or concerns, please join the discussion here in the official GitHub community!

    I have another question / how do I get in touch?

    Please join the discussion here to ask further questions and send us suggestions!

    opened by lgtm-com[bot] 0
Owner
CherryPy
A minimalist HTTP server for Python 2 and 3
CherryPy
Appier is an object-oriented Python web framework built for super fast app development.

Joyful Python Web App development Appier is an object-oriented Python web framework built for super fast app development. It's as lightweight as possi

Hive Solutions 122 Dec 22, 2022
Screaming-fast Python 3.5+ HTTP toolkit integrated with pipelining HTTP server based on uvloop and picohttpparser.

Japronto! There is no new project development happening at the moment, but it's not abandoned either. Pull requests and new maintainers are welcome. I

Paweł Piotr Przeradowski 8.6k Dec 29, 2022
Asynchronous HTTP client/server framework for asyncio and Python

Async http client/server framework Key Features Supports both client and server side of HTTP protocol. Supports both client and server Web-Sockets out

aio-libs 13.2k Jan 5, 2023
Daniel Vaz Gaspar 4k Jan 8, 2023
A familiar HTTP Service Framework for Python.

Responder: a familiar HTTP Service Framework for Python Powered by Starlette. That async declaration is optional. View documentation. This gets you a

Taoufik 3.6k Dec 27, 2022
The Modern And Developer Centric Python Web Framework. Be sure to read the documentation and join the Slack channel questions: http://slack.masoniteproject.com

NOTE: Masonite 2.3 is no longer compatible with the masonite-cli tool. Please uninstall that by running pip uninstall masonite-cli. If you do not unin

Masonite 1.9k Jan 4, 2023
Official mirror of https://gitlab.com/pgjones/quart

Quart Quart is an async Python web microframework. Using Quart you can, render and serve HTML templates, write (RESTful) JSON APIs, serve WebSockets,

Phil Jones 2 Oct 5, 2022
Pyrin is an application framework built on top of Flask micro-framework to make life easier for developers who want to develop an enterprise application using Flask

Pyrin A rich, fast, performant and easy to use application framework to build apps using Flask on top of it. Pyrin is an application framework built o

Mohamad Nobakht 10 Jan 25, 2022
Asita is a web application framework for python based on express-js framework.

Asita is a web application framework for python. It is designed to be easy to use and be more easy for javascript users to use python frameworks because it is based on express-js framework.

Mattéo 4 Nov 16, 2021
Async Python 3.6+ web server/framework | Build fast. Run fast.

Sanic | Build fast. Run fast. Build Docs Package Support Stats Sanic is a Python 3.6+ web server and web framework that's written to go fast. It allow

Sanic Community Organization 16.7k Jan 8, 2023
Fast, asynchronous and elegant Python web framework.

Warning: This project is being completely re-written. If you're curious about the progress, reach me on Slack. Vibora is a fast, asynchronous and eleg

vibora.io 5.7k Jan 8, 2023
cirrina is an opinionated asynchronous web framework based on aiohttp

cirrina cirrina is an opinionated asynchronous web framework based on aiohttp. Features: HTTP Server Websocket Server JSON RPC Server Shared sessions

André Roth 32 Mar 5, 2022
The little ASGI framework that shines. ?

✨ The little ASGI framework that shines. ✨ Documentation: https://www.starlette.io/ Community: https://discuss.encode.io/c/starlette Starlette Starlet

Encode 7.7k Jan 1, 2023
FastAPI framework, high performance, easy to learn, fast to code, ready for production

FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https:

Sebastián Ramírez 53k Jan 2, 2023
The Web framework for perfectionists with deadlines.

Django Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Thanks for checking it out. All docu

Django 67.9k Dec 29, 2022
The Python micro framework for building web applications.

Flask Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to co

The Pallets Projects 61.5k Jan 6, 2023
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.

Tornado Web Server Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking ne

null 20.9k Jan 1, 2023
Async Python 3.6+ web server/framework | Build fast. Run fast.

Sanic | Build fast. Run fast. Build Docs Package Support Stats Sanic is a Python 3.6+ web server and web framework that's written to go fast. It allow

Sanic Community Organization 16.7k Dec 28, 2022
bottle.py is a fast and simple micro-framework for python web-applications.

Bottle: Python Web Framework Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module a

Bottle Micro Web Framework 7.8k Dec 31, 2022