Skip to content
Steve Piercy edited this page Mar 27, 2017 · 27 revisions

About the Pylons Project

The Pylons Project encompasses all projects hosted at https://github.com/Pylons including the Pyramid web framework, webob WSGI request/response objects, the waitress WSGI server and the colander validation library.

Getting Started

Submit your proposal through the GSoC website:

Please have a look at the Pylons Project guidelines:

Contact info

To chat with the Pylons Project mentors, please use the [email protected] mailing list, visible at https://groups.google.com/forum/#!forum/pylons-discuss or contact us directly in the #pyramid channel on freenode.net.

Possible mentors

Ideas

All projects require strong communication and Python programming skills.

Pylons Project organization

Documentation Themes

Design a new theme in Sphinx for generating documentation of all Pylons Project projects.

Resources:

Difficulty: easy

Required Skills:

  • Restructured Text / Sphinx
  • Python
  • HTML / CSS
  • Web design

Mentors:

  • Steve Piercy

Colander and Deform

Colander Serialization

Add support to colander for serializing to native types instead of strings. Add examples of using YAML and JSON content with colander. Update deform to work with the new types.

Colander is heavily used by a few different projects that we care a lot about. Cornice and Deform are the first 2 that come to mind. Research will need to be done here to evaluate a path forward for the library. One option is to add support behind a flag in the 1.0 branch and then release a 2.0 branch where we switch the defaults. We would also warn users and work with Cornice and Deform to update their code to work with the 2.0 branch. There are several users who have tackled this problem in the linked issues and we would also probably to get some insights from them on their use-cases and solutions.

Resources:

Difficulty: medium

Required skills:

  • Python
  • HTML forms

Mentors:

  • Michael Merickel

Pyramid

A SPA example project

Create a new example project that demonstrates how to use Pyramid as a simple REST backend with a single-page app that integrates with Angular or React. This project would contain a nodejs-based asset pipeline for building the single-page app and could integrate new features like hot reloading.

This project would require a very well-defined proposal to get off the ground including:

  • The technologies used for the full stack (e.g. React + React Router + create-react-app, SQLAlchemy, Pyramid + URL Dispatch).
  • The goal and features / capabilities of the website (e.g. view, create, edit, delete wiki pages).

An example proposal might be to convert the SQLALchemy + URL dispatch wiki project into a SPA. You could describe the features of this site as things like user management, adding and deleting wiki pages, etc. This project's main goal is not to build a full tutorial (although it is not out of scope). Some other example projects are things like https://github.com/Pylons/virginia and https://github.com/Pylons/shootout.

Difficulty: easy

Required skills:

  • Python
  • HTML / CSS / Javascript

Mentors:

  • Nejc Zupan
  • Michael Merickel

TryPyramid.com app for submitting and administering Powered by Pyramid and Extending Pyramid entries.

Resources:

Difficulty: medium

Required Skills:

  • Pyramid
  • Python
  • Forms and validation (possibly Deform and Colander)
  • Database and ORM (possibly SQLite or PostgreSQL and SQLAlchemy)
  • Image manipulation (possibly Pillow)
  • GitHub API integration

Mentors:

  • Steve Piercy

Universal Pyramid cookiecutter

  • Merge the three official cookiecutters into one cookiecutter to rule them all.
  • Add option to select persistent storage (None for starter, SQLAlchemy, ZODB).
  • Add option to select the version of Pyramid (1.8, master, and accommodation for future releases).
  • Update related documentation and tutorials in Pyramid to reference the new cookiecutter.

Resources:

Difficulty: easy

Required Skills:

  • Python

Mentors:

  • Steve Piercy
  • Michael Merickel

Waitress

HTTP2 and SSL support

Add HTTP2 and SSL support to waitress. This involves vetting and incorporating libraries to implement HTTP2 and HTTPS support inside the waitress WSGI server. Step 1 is to add SSL support to waitress with ALPN negotiation that can be used to enable h2 (HTTP2). Step 2 is to implement HTTP2 support in waitress.

Resources:

  • An issue exists in the waitress bug tracker that contains more information on what we'd like to see: waitress issue #86

Difficulty: medium

Required Skills:

  • Python
  • HTTP 1.1 and HTTP 2.0 protocols
  • SSL / TCP sockets
  • asyncore socket handling

Mentors:

  • Bert JW Regeer
  • Michael Merickel

WebOb

Test suite

Re-work the WebOb tests to remove the large mono-test suite that exists for webob.Request, and others, and properly unit test/functional test the various different parts. Test fixtures using py.test would also help improve the test suite, and would allow better verification of whether WebOb is behaving correctly.

Difficulty: easy

Required skills:

  • Python
  • Unit testing

Mentors:

  • Bert JW Regeer
  • Michael Merickel

Accept handling

Re-work and fix WebOb's Accept handling for languages. This work could also be extended to improving Pyramid's usage of webob for stronger accept handling support.

Resources:

Difficulty: hard

Required skills:

  • Python
  • HTTP specifications

Mentors:

  • Bert JW Regeer
  • Michael Merickel

RFC Conformance and Verification

Write tests and verify proper RFC handling of data in WebOb/Pyramid in requests/responses

Difficulty: easy

Required skills:

  • Python
  • HTTP specifications

Mentors:

  • Bert JW Regeer
  • Michael Merickel

Proxy hardening / support

WSGI middleware as part of WebOb. For example, handling Forwarded/X-Forwarded-For and others securely.

Resources:

Difficulty: easy

Required skills:

  • Python
  • WSGI middleware
  • HTTP specifications

Mentors:

  • Bert JW Regeer
  • Michael Merickel

Range header handling

Re-work and fix WebOb's Range header handling to support alternate Range types. There is a lot of code that currently depends on the way that ranges are handled, the fix suggested in the PR associated with that issue does not work for most cases, and would break a variety of code in WebOb. Supporting this would make using the header for pagination possible, for example.

Resources:

Difficulty: medium

Required skills:

  • Python
  • HTTP specifications
  • Webob internals

Mentors:

  • Bert JW Regeer
  • Michael Merickel

Improved form handling

This benefits both WebOb and Python itself: WebOb makes heavy use of cgi.FieldStorage for parsing POST, unfortunately there have been a variety of cases where cgi.FieldStorage is lacking. We carry patches to fix certain behavior in Py3.x and Py2.7.

Resources:

Difficulty: hard

Required skills:

  • Python
  • HTTP specifications
  • Form content types
  • Someone with the requisite knowledge of the various RFC standards surrounding MIME encoding and a want to dive deep, fixing this and other issues for the Python stdlib would be fantastic, but it'll also be great for WebOb.

Mentors:

  • Bert JW Regeer
  • Michael Merickel