(draft) blog post about turbogears 2 packaging
[homepage.git] / blog / posts / 2009 / 05 / kick-starting_turbogears_2_packaging.mdwn
1 # TurboGears 2 in debian ... soon !
2
3 After a long incubation, a few days ago [**TurboGears
4 2**](http://turbogears.org/2.0/) has been released. Historically, I've
5 been preferring TurboGears over [Django](http://www.django.org) for
6 being closer to the open source philosophy of *reusing existing
7 components*.
8
9 Since the long 2.0 release was marking a gap with Django, I was eager
10 to test the 2.0, and I was delighted to find it [in
11 Debian](http://packages.debian.org/sid/python-turbogears2). Unfortunately,
12 it [doesn't seem to be in good shape
13 yet](http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530879). In
14 particular it **lacks several dependencies** before it can even be
15 used to `quickstart` a project, in spite of its presence in unstable.
16
17 To give an idea of the needed work, after having installed it manually
18 (via `easy_install`), my virgin
19 `/usr/local/lib/python2.5/site-packages/` has been polluted by **26
20 egg-thingies**. I decided to spend some week-end time to start closing
21 the gap, because we cannot lack such an important web framework in
22 Debian (and ... erm, yes, also because I need it :-) ).
23
24 Here is the **current status** of what has been ITP-ed / packaged
25 already (by yours truly):
26
27 * [ToscaWidgets](http://pypi.python.org/pypi/ToscaWidgets/),
28   [ITP](http://bugs.debian.org/531042) : in experimental/NEW,
29   packaging resurrected from a never-uploaded version
30 * [repoze.tm2](http://pypi.python.org/pypi/repoze.tm2)
31   [ITP](http://bugs.debian.org/531038) : in experimental/NEW
32 * [transaction](http://pypi.python.org/pypi/transaction/) (no ITP) :
33   [being packaged by the Zope
34   team](http://lists.debian.org/debian-devel/2009/05/msg00845.html)
35   (temporary unofficial package made by me available)
36 * [repoze.who](http://www.repoze.org)
37   [ITP](http://bugs.debian.org/531083): in experimental/NEW
38 * [repoze.who-{friendlyforms,plugins.sa,testutil}](http://pypi.python.org/pypi?%3Aaction=search&term=repoze.who&submit=search)
39   [ITP](http://bugs.debian.org/531146)
40   <small>(collected together (with a couple of others), as the
41   `python-repoze.who-plugins` package)</small> : in experimental/NEW
42 * [repoze.what](http://pypi.python.org/pypi/repoze.what/)
43   [ITP](http://bugs.debian.org/531045) : in experimental/NEW
44 * [repoze.what-{pylons,quickstart,plugins.sql}](http://pypi.python.org/pypi?%3Aaction=search&term=repoze.what&submit=search)
45   <small>(collected together (with a couple of others), as the
46   `python-repoze.what-plugins` package)</small> : just
47   [ITP](http://bugs.debian.org/531208)-ed
48
49 ## Where to
50
51 Considering, foolishly, the last package as being already done, the
52 way to go is still long:
53
54         zack@usha:~$ ls /usr/local/lib/python2.5/site-packages/|grep -v repoze.what
55         AddOns-0.6-py2.5.egg
56         BytecodeAssembler-0.3-py2.5.egg
57         Catwalk-2.0.2-py2.5.egg
58         easy-install.pth
59         Extremes-1.1-py2.5.egg
60         PEAK_Rules-0.5a1.dev_r2582-py2.5.egg
61         prioritized_methods-0.2.1-py2.5.egg
62         sprox-0.5.5-py2.5.egg
63         sqlalchemy_migrate-0.5.2-py2.5.egg
64         SymbolType-1.0-py2.5.egg
65         tg.devtools-2.0-py2.5.egg
66         tgext.admin-0.2.4-py2.5.egg
67         tgext.crud-0.2.4-py2.5.egg
68         TurboGears2-2.0-py2.5.egg
69         tw.forms-0.9.3-py2.5.egg
70         WebFlash-0.1a9-py2.5.egg
71         zope.sqlalchemy-0.4-py2.5.egg
72
73 Possibly, some of them are already in Debian hidden somewhere, but
74 sure there is still work to be done. **If you want to help**, you are
75 more then welcome. The rules are simple: all packages will be
76 maintained under the umbrella of the Python Modules Team, but you
77 should be willing to take responsibility as the main packager.
78
79 Please get in touch with if you are interested, as I'm in turn already
80 in touch with some other very kind volunteers (thanks
81 [Enrico](http://www.enricozini.org/blog/index.html) and Federico2!) to
82 coordinate who-is-doing-what.
83
84 ## Preview packages available
85
86 What has already been packaged, including a temporary workaround for
87 `python-transaction`, will be available in experimental after NEW
88 processing. The idea is that nothing will go to unstable until
89 TurboGears 2 will be (proven to be) fully functional.
90
91 In the meantime, **packages are available** from my personal APT
92 repository (signed by my key), here are the friendly
93 `/etc/apt/sources.list` :
94
95         deb http://people.debian.org/~zack/debian zack-unstable/
96         deb-src http://people.debian.org/~zack/debian zack-unstable/
97
98 Versions are tilde-friendly and shouldn't get in your way when the
99 official packages will hit unstable.
100
101 ## Packaging multiple-egg / multiple-upstream packages
102
103 In all this, I've faced an interesting problem with the
104 `python-repoze.{who,what}-plugins` packages. They correspond to a
105 handful of plugins, each of which is about 20/30 Kb. I didn't consider
106 appropriate to prepare 5 different packages, due to archive bloat
107 potential. Sure you got the usual problem of multiple-upstream
108 packages, but I consider it the right choice in this case.
109
110 To counter some of the usual annoyances, as well as some
111 [egg](http://peak.telecommunity.com/DevCenter/EggFormats)-specific
112 annoyances, I wrote a couple of helpers:
113
114 - [[get-orig-source.mk]] <small>([live
115   version](http://svn.debian.org/wsvn/python-modules/packages/python-repoze.who-plugins/trunk/debian/get-orig-source.mk))</small>:
116   a
117   `debian/rules` snippet which relies on several `debian/*.watch`
118   files which are fed to uscan to implement (not yet completely) the
119   `get-orig-source` target [described in
120   policy](http://www.debian.org/doc/debian-policy/ch-source.html/gret)
121
122 - [[setup.py]] <small>([live
123   version](http://svn.debian.org/wsvn/python-modules/packages/python-repoze.who-plugins/trunk/setup.py))</small>:
124   a multiplexer for sub-directories shipping distutils-enabled Python
125   modules. That way you can use
126   `/usr/share/cdbs/1/class/python-distutils.mk` as usual, and setup.py
127   will take care of the "multiple upstream" problem at build time
128
129 I'm no Python-packaging-guru so, lazyweb, if you spot in this choice
130 something I utterly overlooked, or if you have improvements to
131 suggest, please let me know.
132
133 ## Repacking eggs
134
135 An interesting problem will be faced in trying to integrate the above
136 approach with Python modules that are shipped only as `.egg` files
137 (i.e., no tarballs, ... yes there are such horrifying things out
138 there). To preserve uniformity, we would need `uscan` to support
139 `--repack` ing of .egg files as they were simple .zip archives.
140
141 Since eggs *are* .zip archives ... why not?
142
143 [[!tag lang/english planet/debian python turbogears debian draft]]