= What to work on during a Django sprint = Given that so many other people are contributing to Django, at the same time, during sprints. What should ''you'' work on? This document attempts to help you answer that question. == Next upcoming sprint == The next sprint will be the Sausalito sprint. This sprint will be focused on the final cleanup to release Django 1.0 alpha, read the [http://code.djangoproject.com/wiki/SprintSausalitoJuly2008/ page dedicated to this specific sprint] for further details. == How to prepare for a sprint == * Join the [irc://irc.freenode.net/django-sprint #django-sprint IRC Channel]. * Read our [http://www.djangoproject.com/documentation/contributing/ "Contributing to Django" document]. * [http://www.djangoproject.com/documentation/install/#installing-the-development-version Install the "trunk" version of Django] (aka the Django development version). * [http://www.djangoproject.com/accounts/register/ Create an account in our ticket system]. This will allow you to claim tickets you're working on. * Read the page dedicated to [http://code.djangoproject.com/wiki/SprintIdeas#Nextupcomingsprint this specific sprint]. == What to work on? The short answer == '''Work on whatever you like.''' Our development process during the sprint will fundamentally be no different from standard Django development -- that is, contributors scratch their own itches, solve the problems they want to solve, and generally do what they want to do. The difference in the sprint, of course, is that a lot of people are going to be in more-or-less real-time contact, which makes it easier for ''more'' contributions to happen ''faster''. (Some sprinters will be in the same physical location and the IRC channel will be available for more rapid feedback.) == What to work on? The concrete answer == See the [http://code.djangoproject.com/wiki/SprintIdeas#Suggestions suggestions at the bottom of this page]. == What to work on? The longer answer == If you're in doubt about what to work on, consider these pieces of advice: * '''Fix existing bugs, rather than adding enhancements.''' Bugs are cases where we know something is not working correctly or as documented. Enhancements require a bit more of a judgment call from the maintainers about whether to include the feature, and one big goal of the sprint is to try and ''reduce'' the number of open tickets by getting patches committed and tickets closed. * '''Choose noncontroversial tickets.''' Some issues are intrinsically controversial. For the sake of your own sanity, avoid these tickets during the sprint. * '''Fix old bugs.''' There are any number of small, annoying bugs that have hung around for a long time. Some of them have patches, but the patches need to be updated. Start with the bug low numbers, and work up until you find something that interests you. * '''Zero in a particular component you're familiar/comfortable with.''' It's overwhelming to browse the [http://code.djangoproject.com/query full list of open tickets], so do yourself a favor and narrow it down by component. (Do this by selecting "Add filter" on the right side of the page.) Example components are "Documentation" or "RSS framework." The nice thing about this approach is that, once you've fixed one or two tickets, you'll get on a roll and will have learned enough about that particular component that subsequent tickets for the same component will be easier to fix. == How to handle "big" tickets == If you're going to work on a really big item, either individually or as a group, remember to respect normal practices. Post a summary of any big discussions you have to the [http://groups.google.com/group/django-developers/about django-developers] mailing list, and leave a comment on the ticket with a link to the discussion. Remember that not everybody is going to be online all the time, and those that are may well be busy on other things. Large changes or things requiring community input will have to go through the usual, archived channels. That being said, an online or in-person discussion can get a lot further quickly, and then you can post a more comprehensive plan and summary than normal. So there are advantages to doing some design work in a sprint setting. == Working on smaller items == The biggest contribution anybody can make during a sprint is to help confirm bug reports, write patches, review proposed solutions and help get the tickets closed. Pick an area you're interested in or want to learn more about. The general procedure is choose a ticket, replicate the problem, write a test, write a fix, go back to start. * [http://code.djangoproject.com/query Search for tickets] in that '''component''' in Trac (one of the search filters is on the component type). * Read through the ticket titles until you find something interesting and try to replicate the bug. * Once you've found a ticket that interests you, [http://www.djangoproject.com/documentation/contributing/#claiming-tickets claim it], so that somebody else doesn't accidentally duplicate the work. * If possible, write a test to duplicate the problem. Django's tests are in the {{{tests/}}} directory, and we have [http://www.djangoproject.com/documentation/contributing/#unit-tests some documentation about them]. Copy existing tests as a start. If possible, look for an appropriate file to add your new test to, rather than starting a new file. But if you are working on a totally untested area, start a new file. * [http://www.djangoproject.com/documentation/contributing/#patch-style Write a patch], whether that is code or documentation to fix the problem. * Attach the patch to the ticket. If your patch is more than a few lines long, don't forget to include your name in the AUTHORS file as part of the patch. We order that file alphabetically by surname. You might want to search for tickets that have the ''patch needs improvement'' flag set and try to improve the patch (there will be something in the comments suggesting what improvement is needed). Or look for tickets with ''needs tests'' or ''needs documentation'' and try to fill in those gaps. Don't worry if it takes you longer than other people to write fixes initially. Some areas are genuinely harder than others. Some problems are disguised versions of something much bigger, so it might take a couple of attempts to get something that satisfies the maintainers. Not to worry; any serious patch is better than no patch because it gives us something to start from and incrementally improve. == Things for people not confident squishing bugs == If you're not confident fixing bugs in the core code, there are still other ways to contribute: * Triage the [http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&order=priority&stage=Unreviewed unreviewed tickets] -- try to confirm them, or handle them according to the [http://www.djangoproject.com/documentation/contributing/#ticket-triage triage guidelines]. * Confirm existing bugs or work out how to repeat them. * Look for tickets in the unreviewed state and see if you can repeat the problem. * If the explanation of the bug isn't clear, work out what the reporter is talking about and add that in a comment on the original ticket. * Look for tickets needing documentation or needing improved documentation and try to complete them. == Areas requiring caution == There may be areas in Django that are undergoing some fairly major change. Have care if you are wanting to work in the following areas. === Admin interface === Joseph Kocherhans is leading the charge to finish the NewformsAdminBranch, which will replace the existing admin code. This branch will be merged into trunk within a couple of weeks (probably a week before the [http://code.djangoproject.com/wiki/SprintEuroPython2008 EuroPython2008 sprint]). Consequently, any tickets against the existing admin code that are not real showstoppers and having small impact are unlikely to be applied. We would rather develop the same patch against newforms-admin and fix the problem permanently over there. By all means, pick some admin tickets to work on. However, read the ticket and try to repeat the problem on newforms-admin. Then write a patch against that branch, rather than trunk. == Suggestions == So you've joined the sprint and don't know where to start? Try one of these tasks! * Whilst working on a task, assign it to yourself so other people know that it's yours. * If you complete a task, edit this page and remove the task from this list and add it to the [http://code.djangoproject.com/wiki/SprintIdeas#Results proper results section below] * If you make progress on a task and then leave it, edit this page leaving a note of what you've done. * Any of the '''sprint specific''' goals and tickets: read the page dedicated to [http://code.djangoproject.com/wiki/SprintIdeas#Nextupcomingsprint this specific sprint]. * !FormPreview [http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&component=django.contrib.formtools&order=priority and related tickets] * Sort out what's happening with limit_choices_to (#1891, #2445, #4046) * #1028 Add more elements to the high-level RSS Framework. * #2539 add unit tests and docs for `Custom tags and filters can be restricted by namespace` * #4030 Review the suggested patch for enabling auto-translation of language names * #4305 Patch needs to be reviewed before checkin * #4609 [confirm as bug] (Content type names are not translated in Recent Actions listing) exists on newforms-admin * #4695 work out what's happening with xgettext skipping some translated strings in js. files * #4948 Work out why the FileFields patch is corrupting files on windows * #5192 Flatpages should be able to handle more characters (e.g. ~) * #5415 Every SQL query should send a signal if possible * #5591 i18n documentation: Incorrect statement about template variables in {% trans %} * #6009 UnicodeDecodeError when uploading file with non-english filename. * #6039 Fix documentation about ATOM feeds * #6047 db-api docs: invalid REGEX SQL equiv for SQLite * #6093 fix a few regressions with python2.3 and postgresql_psychopg2 engine * #7783 confirm which versions of postgres the patch works on. * [http://code.djangoproject.com/wiki/SprintIdeas#GeoDjango GeoDjango tasks] == Results == If you believe you've successfully dealt with a ticket, post it here so a core dev can have a look at it. Please order by ticket ID. '''Note:''' Don't close the tickets until they've been checked in. === Results of Sausalito sprint (18th July 08) === * #5578: Invalid ticket. * #7558: Fixed some missing svn:ignore's * #7415: Patch and tests * #7611: Added patch (fixes unit tests for a new Django project). * #7714: RFC: Patch seems reasonable * #7753: RFC: Patch seems reasonable === Results of europython08 sprint === * #5490 It is now possible to use arbitrary characters in a charfield that is primary key for a model and have it work in the admin app (added unittests and patch) === Results of pycon08 sprint === * #528 Added documentation and improved patch (see [wiki:DjangoSpecifications/Docs/ConvertingRestToOtherFormats wiki page]) * #689 (dec 07 sprint work) Updated to trunk as of r7350, fix doctests * #2723 (dec 07 sprint work) Added unit tests and improved patch, marked as ''ready for checkin'' during pycon08 sprint * #3542 (dec 07 sprint work) already marked as ''ready for checkin'', patch updated to trunk * #4380 Added patch * #5096 Added first concept of fixtures documentation * #5192 (dec 07 sprint work) Added patch * #5531 (dec 07 sprint work) re-reviewed, marked as ready for checkin during pycon08 sprint * #6652 Added documentation and improved patch * #6832 created with doc patch, to describe decorator-in-URLconf usage and avoid people making #5920 -like errors === Results of 1stDecember07 sprint === * #689 Updated patch with enhancements/fixes by telenieko, apollo13 and ekarulf (documentation, tests, security) * #2723 added patch (newforms-admin) * #2856 added patch * #3323 and #4680 updated with tests * #3442 added the GroupedSelect widget to django.newforms.extras.widgets * #3511 fixed tests and updated documentation * #3542 added patch * #3632 updated patch and added tests. * #3695 added patch * #3883 updated docs for localflavor * #3959 can be closed (trivial ticket) * #3961 add za-localflavor * #4248 specialized case (trivial ticket) * #4476 added patch * #4499 tested this, and could not reproduce * #4707 Corrected the typos in the previous diff * #5192 Added two possible patches. Feedback? * #5362 Confirmed bug and updated patch * #5515 added patch * #5531 Checked patch still applies * #5596 "No buffer space available" error when downloading file * #5690 newforms-admin: input fields do not regard field class * #5622 added patch * #5657 add regression tests * #5677 patch added for docs on debugging with mod_python * #5743 added patch * #5894 added patch * #5910 Signals are unnamed making logging non-informative * #5956 added unit test and fix * #5996 added unit test and fix * #6005 Double call for Media in newforms/widgets.py * #6017 marked tests added. * #6024 Django's doctest clashes with coverage.py * #6055 GenericRelation and db_column lookups * #6063 Need test-case showing SafeString/flup interaction * #6064 * #6069 added patch * #6070 Document that SITE_ID is no longer required to run all tests * #6071 work out what broke @6777 to cause "maximum recursion depth exceeded" * #6078 added patch * #6082 File based Session test fails for lack of /tmp directory on Windows Based System * #6086 Refactor django.core.cache to deprecate "simple" backend * #6097 trivial patch for broken link in documentation * #6099 Refactor filebased cache backend to use md5 hash filenames and fix a couple of bugs * #6100 newforms-admin: popup won't be dismissed when adding * #6110 added patch and tests to prevent python format on loaddata and dumpdata === Results of september07 sprint === * #285 (also #1516, #3414) handling SCRIPT_NAME and PATH_INFO in a manner which is mostly correct and mostly consistent across deployment scenarios * #399 Bigint field object needed * #899 old small patch which needed tests, added regression tests * #1282 minor improvements to patch and tests added * #1919 filter truncatewords wipes newlines from string, so not chainable with markup filters * #2504 ConditionalGetMiddleware causes Content-Length to be 0 on HttpResponse with fileobject * #2612 Updated css to float multiline fields with help text. * #3055 Invalid ticket as model in GenericRelation requires content_type/object_id fields. * #3221 unhelpful error message when include() set incorrectly * #3288 select related crash on non null FK to self * #3349 If an ImportError occurs within a custom template tag library, a rather confusing error message is produced * #3360 One Django badge on community page is cut off. * #3485 Initial SQL fails when data contains a % in it when settings.DEBUG = True * #3502 TTL-Option for RSS 2.0+ * #3997 small note in the docs about fields being required by default in an instance * #4036 Spanish (es) localflavor * #4092 implement a "missing option" in localflavor widgets * #4094 patch to fix problem with months in databrowse calendar views * #4115 Thumbnail contrib. Updated with effbot's comments. Has tests and docs. Should be good to go. * #4193 patch to fix foreignkeys constraints randomly not being added by the backend * #4371 fixture loading fails silently in testcases * #4485 Can't set nullable DecimalField to null * #4561 dispatch refactoring * #4604 Message Passing For Anonymous Users * #4724 added SESSION_COOKIE_PATH setting * #4824 Enforce a check for duplicate named url patterns * #4878 better install docs for Windows * #4831 Adding "add" support to the cache API * #4913 need permissions to add a links to wiki Resources and Tutorials from the main page * #4944 mentioned that unique might cause save() to throw IntegrityError in model-api.txt * #4982 {% blocktrans %} does not escape % in text * #5047 max-age set by cache_page is overwritten by cache_middleware * #5079 cannot reproduce but added a patch to regression tests to be on the safe side * #5116 let newforms.Select display disabled entries * #5236 adding stack to connection.queries debug/profiling info * #5295 Inner Join and order_by bug * #5298 The extra_context keyword argument should be available in the auth app views * #5309 Marking instances as db-stored via _is_stored * #5313 Allow gzip for javascript unless old MSIE * #5374 Validation for ModelAdmin classes [newforms-admin] * #5418 Add assertNoBrokenLinks() to test system * #5419 Fuzz testing assertions created along with some documentation * #5475 Add a Luhn function for various localflavor usages (e.g. #3961) * #5494 Fixed a bug in javascript message catalog search. == Other branches == === GeoDjango === [http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&component=GIS&order=priority Open GeoDjango tickets] Task list (in order of importance): * #6547 Add support for GeoRSS feeds. * #5472 Add !OpenLayers support in `django.contrib.gis.maps` * Fill out the documentation stubs and fix inconsistencies between the documentation and the code.