summary refs log tree commit diff
path: root/pkgs/top-level/python-packages.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/top-level/python-packages.nix')
-rw-r--r--pkgs/top-level/python-packages.nix7781
1 files changed, 6029 insertions, 1752 deletions
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 533f59b78d8..1d3d0d179af 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -1,7 +1,10 @@
-{ pkgs, python }:
-  with pkgs.lib;
+{ pkgs, stdenv, python, self }:
+
+with pkgs.lib;
 
 let
+  pythonAtLeast = versionAtLeast python.pythonVersion;
+  pythonOlder = versionOlder python.pythonVersion;
   isPy26 = python.majorVersion == "2.6";
   isPy27 = python.majorVersion == "2.7";
   isPy33 = python.majorVersion == "3.3";
@@ -9,6 +12,10 @@ let
   isPyPy = python.executable == "pypy";
   isPy3k = strings.substring 0 1 python.majorVersion == "3";
 
+  callPackage = pkgs.newScope self;
+
+  buildPythonPackage = makeOverridable (callPackage ../development/python-modules/generic { });
+
   # Unique python version identifier
   pythonName =
     if isPy26 then "python26" else
@@ -17,29 +24,28 @@ let
     if isPy34 then "python34" else
     if isPyPy then "pypy" else "";
 
-  modules = python.modules or { readline = null; sqlite3 = null; curses = null; curses_panel = null; ssl = null; crypt = null; };
-
-pythonPackages = modules // import ./python-packages-generated.nix {
-  inherit pkgs python;
-  inherit (pkgs) stdenv fetchurl;
-  self = pythonPackages;
-} //
+  modules = python.modules or {
+    readline = null;
+    sqlite3 = null;
+    curses = null;
+    curses_panel = null;
+    crypt = null;
+  };
 
-# Python packages for all python versions
-rec {
+  pythonPackages = modules // import ./python-packages-generated.nix {
+    inherit pkgs python;
+    inherit (pkgs) stdenv fetchurl;
+    self = pythonPackages;
+  }
+// {
 
-  inherit python isPy26 isPy27 isPy33 isPy34 isPyPy isPy3k pythonName;
-  inherit (pkgs) fetchurl fetchsvn fetchgit stdenv unzip;
+  inherit python isPy26 isPy27 isPy33 isPy34 isPyPy isPy3k pythonName buildPythonPackage;
 
   # helpers
 
-  callPackage = callPackageWith (pkgs // pythonPackages);
-
   # global distutils config used by buildPythonPackage
   distutils-cfg = callPackage ../development/python-modules/distutils-cfg { };
 
-  buildPythonPackage = callPackage ../development/python-modules/generic { };
-
   wrapPython = pkgs.makeSetupHook
     { deps = pkgs.makeWrapper;
       substitutions.libPrefix = python.libPrefix;
@@ -49,23 +55,16 @@ rec {
 
   # specials
 
-  recursivePthLoader = import ../development/python-modules/recursive-pth-loader {
-    inherit (pkgs) stdenv;
-    inherit python;
-  };
+  recursivePthLoader = callPackage ../development/python-modules/recursive-pth-loader { };
 
-  setuptools = import ../development/python-modules/setuptools {
-    inherit (pkgs) stdenv fetchurl;
-    inherit python wrapPython distutils-cfg;
-  };
+  setuptools = callPackage ../development/python-modules/setuptools { };
 
   # packages defined elsewhere
 
   blivet = callPackage ../development/python-modules/blivet { };
 
-  dbus = import ../development/python-modules/dbus {
-    inherit (pkgs) stdenv fetchurl pkgconfig dbus dbus_glib dbus_tools;
-    inherit python;
+  dbus = callPackage ../development/python-modules/dbus {
+    dbus = pkgs.dbus;
   };
 
   discid = buildPythonPackage rec {
@@ -79,7 +78,7 @@ rec {
       maintainer  = with maintainers; [ iyzsong ];
     };
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/discid/${name}.tar.gz";
       md5 = "2ad2141452dd10b03ad96ccdad075235";
     };
@@ -91,37 +90,30 @@ rec {
   };
 
   h5py = callPackage ../development/python-modules/h5py {
-    inherit (pkgs) stdenv fetchurl;
-    inherit python buildPythonPackage cython numpy;
     hdf5 = pkgs.hdf5.override { mpi = null; };
   };
 
-  h5py-mpi = h5py.override {
+  h5py-mpi = self.h5py.override {
     mpiSupport = true;
     mpi = pkgs.openmpi;
     hdf5 = pkgs.hdf5.override { mpi = pkgs.openmpi; enableShared = true; };
-    inherit mpi4py;
   };
 
-  ipython = import ../shells/ipython {
-    inherit (pkgs) stdenv fetchurl sip pyqt4;
-    inherit buildPythonPackage pythonPackages;
+  ipython = callPackage ../shells/ipython {
+    inherit pythonPackages;
+
     qtconsoleSupport = !pkgs.stdenv.isDarwin; # qt is not supported on darwin
     pylabQtSupport = !pkgs.stdenv.isDarwin;
     pylabSupport = !pkgs.stdenv.isDarwin; # cups is not supported on darwin
   };
 
-  ipythonLight = lowPrio (import ../shells/ipython {
-    inherit (pkgs) stdenv fetchurl;
-    inherit buildPythonPackage pythonPackages;
+  ipythonLight = lowPrio (self.ipython.override {
     qtconsoleSupport = false;
     pylabSupport = false;
     pylabQtSupport = false;
   });
 
   mpi4py = callPackage ../development/python-modules/mpi4py {
-    inherit (pkgs) stdenv fetchurl openssh;
-    inherit python buildPythonPackage;
     mpi = pkgs.openmpi;
   };
 
@@ -129,76 +121,43 @@ rec {
 
   # This is used for NixOps to make sure we won't break it with the next major
   # version of nixpart.
-  nixpart0 = nixpart;
+  nixpart0 = callPackage ../tools/filesystems/nixpart/0.4 { };
 
-  pitz = import ../applications/misc/pitz {
-    inherit (pkgs) stdenv fetchurl;
-    inherit buildPythonPackage tempita jinja2 pyyaml clepy mock nose decorator docutils;
-  };
+  pitz = callPackage ../applications/misc/pitz { };
 
-  pycairo = import ../development/python-modules/pycairo {
-    inherit (pkgs) stdenv fetchurl fetchpatch pkgconfig cairo x11;
-    inherit python;
-  };
+  plantuml = callPackage ../tools/misc/plantuml { };
 
-  pycrypto = import ../development/python-modules/pycrypto {
-    inherit (pkgs) fetchurl stdenv gmp;
-    inherit python buildPythonPackage;
+  pycairo = callPackage ../development/python-modules/pycairo {
   };
 
-  pygobject = import ../development/python-modules/pygobject {
-    inherit (pkgs) stdenv fetchurl pkgconfig glib;
-    inherit python;
-  };
+  pycrypto = callPackage ../development/python-modules/pycrypto { };
 
-  pygobject3 = import ../development/python-modules/pygobject/3.nix {
-    inherit (pkgs) stdenv fetchurl pkgconfig glib gobjectIntrospection cairo;
-    inherit python pycairo;
-  };
+  pygobject = callPackage ../development/python-modules/pygobject { };
 
-  pygtk = import ../development/python-modules/pygtk {
-    inherit (pkgs) fetchurl stdenv pkgconfig gtk;
-    inherit python buildPythonPackage pygobject pycairo isPy3k;
-  }; 
+  pygobject3 = callPackage ../development/python-modules/pygobject/3.nix { };
 
-  # XXX: how can we get an override here?
-  #pyGtkGlade = pygtk.override {
-  #  inherit (pkgs.gnome) libglade;
-  #};
-  pyGtkGlade = import ../development/python-modules/pygtk {
-    inherit (pkgs) fetchurl stdenv pkgconfig gtk;
-    inherit (pkgs.gnome) libglade;
-    inherit python buildPythonPackage pygobject pycairo isPy3k;
-  };
+  pygtk = callPackage ../development/python-modules/pygtk { libglade = null; };
 
-  pyqt4 = import ../development/python-modules/pyqt/4.x.nix {
-    inherit (pkgs) stdenv fetchurl pkgconfig qt4 makeWrapper;
-    inherit (pkgs.xorg) lndir;
-    inherit python sip;
-    pythonDBus = dbus;
+  pyGtkGlade = self.pygtk.override {
+    libglade = pkgs.gnome.libglade;
   };
 
-  pyqt5 = import ../development/python-modules/pyqt/5.x.nix {
-    inherit (pkgs) stdenv fetchurl pkgconfig qt5 makeWrapper;
-    inherit (pkgs.xorg) lndir;
-    inherit python;
-    sip = sip_4_16;
-    pythonDBus = dbus;
+  pyqt4 = callPackage ../development/python-modules/pyqt/4.x.nix {
+    pythonDBus = self.dbus;
+    pythonPackages = self;
   };
 
-  sip = import ../development/python-modules/sip {
-    inherit (pkgs) stdenv fetchurl;
-    inherit python;
+  pyqt5 = callPackage ../development/python-modules/pyqt/5.x.nix {
+    sip = self.sip_4_16;
+    pythonDBus = self.dbus;
+    qt5 = pkgs.qt53;
   };
 
-  sip_4_16 = import ../development/python-modules/sip/4.16.nix {
-    inherit (pkgs) stdenv fetchurl;
-    inherit python;
-  };
+  sip = callPackage ../development/python-modules/sip { };
 
-  tables = import ../development/python-modules/tables {
-    inherit (pkgs) stdenv fetchurl bzip2 lzo;
-    inherit python buildPythonPackage cython numpy numexpr;
+  sip_4_16 = callPackage ../development/python-modules/sip/4.16.nix { };
+
+  tables = callPackage ../development/python-modules/tables {
     hdf5 = pkgs.hdf5.override { zlib = pkgs.zlib; };
   };
 
@@ -207,12 +166,12 @@ rec {
   aafigure = buildPythonPackage rec {
     name = "aafigure-0.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/aafigure/${name}.tar.gz";
       md5 = "5322888a21eb0bb2e749fbf98eddf574";
     };
 
-    propagatedBuildInputs = [ pillow ];
+    propagatedBuildInputs = with self; [ pillow ];
 
     # error: invalid command 'test'
     doCheck = false;
@@ -235,16 +194,16 @@ rec {
 
 
   actdiag = buildPythonPackage rec {
-    name = "actdiag-0.5.1";
+    name = "actdiag-0.5.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/actdiag/${name}.tar.gz";
-      md5 = "171c47bc1f70e5fadfffd9df0c3157be";
+      sha256 = "1vr4hnkr0gcvvpaycd8q3vcx029b2f5yv8swhdr8kwspaqb0dvfa";
     };
 
-    buildInputs = [ pep8 nose unittest2 docutils ];
+    buildInputs = with self; [ pep8 nose unittest2 docutils ];
 
-    propagatedBuildInputs = [ blockdiag ];
+    propagatedBuildInputs = with self; [ blockdiag ];
 
     # One test fails:
     #   UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042' in position 0: ordinal not in range(128)
@@ -264,18 +223,18 @@ rec {
     rev = "9744c18c4d6b0a3e7f57b01e5fe145a60fc82a47";
     name = "afew-1.0_${rev}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/teythoon/afew/tarball/${rev}";
       name = "${name}.tar.bz";
       sha256 = "1qyban022aji2hl91dh0j3xa6ikkxl5argc6w71yp2x8b02kp3mf";
     };
 
-    buildInputs = [ pkgs.dbacl ];
+    buildInputs = with self; [ pkgs.dbacl ];
 
-    propagatedBuildInputs = [
-      pythonPackages.notmuch
-      pythonPackages.chardet
-    ] ++ optional (!isPy3k) pythonPackages.subprocess32;
+    propagatedBuildInputs = with self; [
+      self.notmuch
+      self.chardet
+    ] ++ optional (!isPy3k) self.subprocess32;
 
     doCheck = false;
 
@@ -290,7 +249,7 @@ rec {
 
     meta = {
       homepage = https://github.com/teythoon/afew;
-      description = "afew is an initial tagging script for notmuch mail.";
+      description = "An initial tagging script for notmuch mail";
       maintainers = [ stdenv.lib.maintainers.garbas ];
     };
   };
@@ -299,17 +258,17 @@ rec {
   alembic = buildPythonPackage rec {
     name = "alembic-0.6.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/alembic/${name}.tar.gz";
       md5 = "71e4a8f6849e1527abfc4ea33d51f37c";
     };
 
-    buildInputs = [ nose mock ];
-    propagatedBuildInputs = [ Mako sqlalchemy9 ];
+    buildInputs = with self; [ nose mock ];
+    propagatedBuildInputs = with self; [ Mako sqlalchemy9 ];
 
     meta = {
       homepage = http://bitbucket.org/zzzeek/alembic;
-      description = "A database migration tool for SQLAlchemy.";
+      description = "A database migration tool for SQLAlchemy";
       license = stdenv.lib.licenses.mit;
     };
   };
@@ -318,42 +277,42 @@ rec {
   almir = buildPythonPackage rec {
     name = "almir-0.1.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/a/almir/${name}.zip";
       md5 = "9a1f3c72a039622ca72b74be7a1cd37e";
     };
 
-    buildInputs = [
+    buildInputs = with self; [
       pkgs.which
-      pythonPackages.coverage
-      pythonPackages.mock
-      pythonPackages.tissue
-      pythonPackages.unittest2
-      pythonPackages.webtest
+      self.coverage
+      self.mock
+      self.tissue
+      self.unittest2
+      self.webtest
     ];
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       pkgs.makeWrapper
       pkgs.bacula
-      pythonPackages.colander
-      pythonPackages.deform
-      pythonPackages.deform_bootstrap
-      pythonPackages.docutils
-      pythonPackages.nose
-      pythonPackages.mysql_connector_repackaged
-      pythonPackages.pg8000
-      pythonPackages.pyramid
-      pythonPackages.pyramid_beaker
-      pythonPackages.pyramid_exclog
-      pythonPackages.pyramid_jinja2
-      pythonPackages.pyramid_tm
-      pythonPackages.pytz
-      pythonPackages.sqlalchemy
-      pythonPackages.transaction
-      pythonPackages.waitress
-      pythonPackages.webhelpers
-      pythonPackages.zope_sqlalchemy
-      pythonPackages.psycopg2
+      self.colander
+      self.deform
+      self.deform_bootstrap
+      self.docutils
+      self.nose
+      self.mysql_connector_repackaged
+      self.pg8000
+      self.pyramid
+      self.pyramid_beaker
+      self.pyramid_exclog
+      self.pyramid_jinja2
+      self.pyramid_tm
+      self.pytz
+      self.sqlalchemy
+      self.transaction
+      self.waitress
+      self.webhelpers
+      self.psycopg2
+      (self.zope_sqlalchemy.override rec {propagatedBuildInputs = with self; [ sqlalchemy8 transaction ];})
     ];
 
     postInstall = ''
@@ -368,25 +327,25 @@ rec {
 
 
   alot = buildPythonPackage rec {
-    rev = "fa4ddf000dc2ac4933852b210901b649634a5f86";
-    name = "alot-0.3.5_${rev}";
+    rev = "0.3.6";
+    name = "alot-0.3.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/pazz/alot/tarball/${rev}";
       name = "${name}.tar.bz";
-      sha256 = "0h11lqyxg0xbkc9y1xqjvd0kmfm5pdwnmv9chmlsi1614dxn08n0";
+      sha256 = "1rzy70w4isvypa94310xw403vq5him21q8rlx4laa0z530phkrmq";
     };
 
     # error: invalid command 'test'
     doCheck = false;
 
     propagatedBuildInputs =
-      [ pythonPackages.notmuch
-        pythonPackages.urwid
-        pythonPackages.twisted
-        pythonPackages.magic
-        pythonPackages.configobj
-        pythonPackages.pygpgme
+      [ self.notmuch
+        self.urwid
+        self.twisted
+        self.magic
+        self.configobj
+        self.pygpgme
       ];
 
     postInstall = ''
@@ -406,12 +365,12 @@ rec {
     name = "anyjson-0.3.3";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/a/anyjson/${name}.tar.gz";
       md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
     };
 
-    buildInputs = [ pythonPackages.nose ];
+    buildInputs = with self; [ self.nose ];
 
     meta = {
       homepage = http://pypi.python.org/pypi/anyjson/;
@@ -420,10 +379,31 @@ rec {
   };
 
 
+  amqp = buildPythonPackage rec {
+    name = "amqp-${version}";
+    version = "1.4.6";
+    disabled = pythonOlder "2.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/a/amqp/${name}.tar.gz";
+      sha256 = "0h76dnqfbc6fslwr7lx86n2gyslfv2x1vl8lpbszjs2svrkwikzb";
+      md5 = "a061581b6864f838bffd62b6a3d0fb9f";
+    };
+
+    buildInputs = with self; [ mock coverage nose-cover3 unittest2 ];
+
+    meta = {
+      homepage = http://github.com/celery/py-amqp;
+      description = "Python client for the Advanced Message Queuing Procotol (AMQP). This is a fork of amqplib which is maintained by the Celery project.";
+      license = licenses.lgpl21;
+    };
+  };
+
+
   amqplib = buildPythonPackage rec {
     name = "amqplib-0.6.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://py-amqplib.googlecode.com/files/${name}.tgz";
       sha1 = "f124e5e4a6644bf6d1734032a01ac44db1b25a29";
     };
@@ -438,15 +418,27 @@ rec {
   };
 
 
+  application = buildPythonPackage rec {
+    name = "python-application-${version}";
+    version = "1.4.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/python-application/${name}.tar.gz";
+      sha256 = "3ae188e9dfd4bd63c9b43aebbf1d9de5df03fb5ac01e72f3bff5b41007570275";
+    };
+  };
+
+
   apsw = buildPythonPackage rec {
     name = "apsw-3.7.6.2-r1";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://apsw.googlecode.com/files/${name}.zip";
       sha1 = "fa4aec08e59fa5964197f59ba42408d64031675b";
     };
 
-    buildInputs = [ pkgs.sqlite ];
+    buildInputs = with self; [ pkgs.sqlite ];
 
     # python: double free or corruption (fasttop): 0x0000000002fd4660 ***
     doCheck = false;
@@ -459,13 +451,13 @@ rec {
 
 
   apscheduler = buildPythonPackage rec {
-    name = "APScheduler-2.1.2";
+    name = "APScheduler-3.0.1";
 
-    propagatedBuildInputs = with pythonPackages; [ futures tzlocal six pytest mock];
+    propagatedBuildInputs = with self; [ futures tzlocal six pytest mock sqlalchemy9 ];
 
-    src = fetchurl {
-      url = "https://pypi.python.org/packages/source/A/APScheduler/APScheduler-2.1.2.tar.gz";
-      md5 = "6862959d460c16ef325d63e1fc3a6684";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/A/APScheduler/${name}.tar.gz";
+      sha256 = "1dcyk58svhhd7flpq0fbyzcp0z3a1as4ddmdv1rxqvqng0sxhwaf";
     };
 
     meta = with pkgs.stdenv.lib; {
@@ -477,40 +469,73 @@ rec {
 
 
   area53 = buildPythonPackage (rec {
-    name = "area53-b2c9cdcabd";
+    name = "Area53-0.94";
 
-    src = fetchgit {
-      url = git://github.com/bigmlcom/Area53.git;
-      rev = "b2c9cdcabd";
-      sha256 = "b0c12b8c48ed9180c7475fab18de50d63e1b517cfb46da4d2c66fc406fe902bc";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/A/Area53/${name}.tar.gz";
+      sha256 = "0v9b7f8b6v21y410anx5sr52k2ac8jrzdf19q6m6p0zsdsf9vr42";
     };
 
     # error: invalid command 'test'
     doCheck = false;
 
-    propagatedBuildInputs = [ pythonPackages.boto ];
+    propagatedBuildInputs = with self; [ self.boto ];
 
   });
 
+  arrow = buildPythonPackage rec {
+    name = "arrow-${version}";
+    version = "0.4.4";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/a/arrow/${name}.tar.gz";
+      sha256 = "1sdr4gyjgvz86yr0ll0i11mgy8l1slndr7f0ngam87rpy78gp052";
+    };
+
+    doCheck = false;
+
+    meta = {
+      description = "Twitter API library";
+      license     = "apache";
+      maintainers = [ maintainers.thoughtpolice ];
+    };
+  };
 
   async = buildPythonPackage rec {
     name = "async-0.6.1";
     disabled = isPy3k;
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    buildInputs = [ pkgs.zlib ];
+    buildInputs = with self; [ pkgs.zlib ];
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/async/${name}.tar.gz";
       sha256 = "1lfmjm8apy9qpnpbq8g641fd01qxh9jlya5g2d6z60vf8p04rla1";
     };
   };
 
+  atomicwrites = buildPythonPackage rec {
+    version = "0.1.0";
+    name = "atomicwrites-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/a/atomicwrites/atomicwrites-${version}.tar.gz";
+      sha256 = "1lxz0xhnzihqlvl1h6j2nfxjqqgr4s08196z5phnlcz2s7d5z0mg";
+    };
+
+    meta = {
+      description = "Atomic file writes on POSIX";
+      homepage = https://pypi.python.org/pypi/atomicwrites/0.1.0;
+      maintainers = with maintainers; [ matthiasbeyer ];
+    };
+
+  };
+
   argparse = buildPythonPackage (rec {
     name = "argparse-1.2.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://argparse.googlecode.com/files/${name}.tar.gz";
       sha256 = "192174mys40m0bwk6l5jlfnzps0xi81sxm34cqms6dc3c454pbyx";
     };
@@ -537,23 +562,55 @@ rec {
   });
 
   astroid = buildPythonPackage (rec {
-    name = "astroid-1.1.1";
-    propagatedBuildInputs = [ logilab_common ];
-    src = fetchurl {
+    name = "astroid-1.3.4";
+    propagatedBuildInputs = with self; [ logilab_common six ];
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/astroid/${name}.tar.gz";
-      sha256 = "1x7103mlzndgg66yas6xrfwkwpihcq4bi9m8py1fjnhz8p5ka1vq";
+      sha256 = "1fz9x21pziy9dmivvlsgl7a86ka2m9jp3pky01da5aj89ym3wi8b";
     };
   });
 
+  audioread = buildPythonPackage rec {
+    name = "audioread-1.2.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/a/audioread/${name}.tar.gz";
+      md5 = "01a80357f38dbd9bf8d7403802df89ac";
+    };
+
+    meta = {
+      description = "Cross-platform audio decoding";
+      homepage = "https://github.com/sampsyo/audioread";
+      license = stdenv.lib.licenses.mit;
+    };
+  };
+
+  audiotools = buildPythonPackage rec {
+    name = "audiotools-2.22";
+
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "mirror://sourceforge/audiotools/${name}.tar.gz";
+      sha256 = "1c52pggsbxdbj8h92njf4h0jgfndh4yv58ad723pidys47nw1y71";
+    };
+
+    meta = {
+      description = "Utilities and Python modules for handling audio.";
+      homepage = "http://audiotools.sourceforge.net/";
+      license = stdenv.lib.licenses.gpl2Plus;
+    };
+  };
+
   autopep8 = buildPythonPackage (rec {
-    name = "autopep8-1.0.3";
+    name = "autopep8-1.0.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/autopep8/${name}.tar.gz";
-      md5 = "7c16d385cf9ad7c1d7fbcfcea2588a56";
+      sha256 = "17lydqm8y9a5qadp6iifxrb5mb0g9fr1vxn5qy1fjpyhazxaw8n1";
     };
 
-    propagatedBuildInputs = [ pep8 ];
+    propagatedBuildInputs = with self; [ pep8 ];
 
     # One test fails:
     # FAIL: test_recursive_should_not_crash_on_unicode_filename (test.test_autopep8.CommandLineTests)
@@ -572,8 +629,8 @@ rec {
     name = "avro-1.7.6";
 
     disabled = isPy3k;
-    
-    src = fetchurl {
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/avro/${name}.tar.gz";
       md5 = "7f4893205e5ad69ac86f6b44efb7df72";
     };
@@ -586,10 +643,10 @@ rec {
 
   avro3k = pkgs.lowPrio (buildPythonPackage (rec {
     name = "avro3k-1.7.7-SNAPSHOT";
-    
+
     disabled = (!isPy3k);
-    
-    src = fetchurl {
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/a/avro3k/${name}.tar.gz";
       sha256 = "15ahl0irwwj558s964abdxg4vp6iwlabri7klsm2am6q5r0ngsky";
     };
@@ -602,10 +659,29 @@ rec {
     };
   }));
 
-  backports_ssl_match_hostname_3_4_0_2 = pythonPackages.buildPythonPackage rec {
+  azure = buildPythonPackage rec {
+    version = "0.10.0";
+    name = "azure-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/a/azure/${name}.zip";
+      md5 = "305b0036df5696d68369807835f554ae";
+    };
+
+    propagatedBuildInputs = with self; [ dateutil futures pyopenssl requests ];
+
+    meta = with stdenv.lib; {
+      description = "Microsoft Azure SDK for Python";
+      homepage = "http://azure.microsoft.com/en-us/develop/python/";
+      license = licenses.asl20;
+      maintainers = [ maintainers.olcai ];
+    };
+  };
+
+  backports_ssl_match_hostname_3_4_0_2 = self.buildPythonPackage rec {
     name = "backports.ssl_match_hostname-3.4.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_hostname-3.4.0.2.tar.gz";
       md5 = "788214f20214c64631f0859dc79f23c6";
     };
@@ -616,15 +692,68 @@ rec {
     };
   };
 
+  backports_lzma = self.buildPythonPackage rec {
+    name = "backports.lzma-0.0.3";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/backports.lzma/${name}.tar.gz";
+      md5 = "c3d109746aefa86268e500c07d7e8e0f";
+    };
+
+    buildInputs = [ pkgs.lzma ];
+
+    meta = {
+      describe = "Backport of Python 3.3's 'lzma' module for XZ/LZMA compressed files.";
+      homepage = https://github.com/peterjc/backports.lzma;
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
+  babelfish = buildPythonPackage rec {
+    version = "0.5.3";
+    name = "babelfish-${version}";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/babelfish/${name}.tar.gz";
+      sha256 = "0wrw21dyq7v6lbffwvi1ik43d7dhmcv8xvgrrihhiv7ys1rd3gag";
+    };
+
+    meta = {
+      homepage = http://pypi.python.org/pypi/babelfish;
+      description = "A module to work with countries and languages.";
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
+  batinfo = buildPythonPackage rec {
+    version = "0.2";
+    name = "batinfo-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/batinfo/${name}.tar.gz";
+      sha256 = "1kmrdr1c2ivpqgp2csln7vbanga3sh3nvaqmgbsg96z6fbg7f7w8";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/nicolargo/batinfo;
+      description = "A simple Python lib to retrieve battery information";
+      license = licenses.lgpl3;
+      platforms = platforms.all;
+      maintainers = [ maintainers.koral ];
+    };
+  };
+
   bcdoc = buildPythonPackage rec {
-    name = "bcdoc-0.12.1";
+    name = "bcdoc-0.13.0";
 
-    src = fetchurl {
-      url = "https://pypi.python.org/packages/source/b/bcdoc/bcdoc-0.12.1.tar.gz";
-      md5 = "7c8617347c294ea4d36ec73fb5b2c26e";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/bcdoc/bcdoc-0.13.0.tar.gz";
+      md5 = "819882458be7b642e00ddc9846073d89";
     };
 
-    buildInputs = [ pythonPackages.docutils pythonPackages.six ];
+    buildInputs = with self; [ self.docutils self.six ];
 
     meta = {
       homepage = https://github.com/botocore/bcdoc;
@@ -637,7 +766,7 @@ rec {
     name = "beautifulsoup-3.2.1";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.2.1.tar.gz";
       sha256 = "1nshbcpdn0jpcj51x0spzjp519pkmqz0n0748j7dgpz70zlqbfpm";
     };
@@ -655,9 +784,9 @@ rec {
   beautifulsoup4 = buildPythonPackage (rec {
     name = "beautifulsoup4-4.1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/b/beautifulsoup4/${name}.tar.gz";
-      md5 = "c012adc06217b8532c446d181cc56586";
+      md5 = "f1481ed77336de77a2d8e5b061b6ad62";
     };
 
     # invalid command 'test'
@@ -674,20 +803,20 @@ rec {
 
   beaker = buildPythonPackage rec {
     name = "Beaker-1.6.4";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/B/Beaker/${name}.tar.gz";
       md5 = "c2e102870ed4c53104dec48ceadf8e9d";
     };
 
     buildInputs =
-      [ pythonPackages.sqlalchemy
-        pythonPackages.pycryptopp
-        pythonPackages.nose
-        pythonPackages.mock
-        pythonPackages.webtest
+      [ self.sqlalchemy
+        self.pycryptopp
+        self.nose
+        self.mock
+        self.webtest
       ];
 
     # http://hydra.nixos.org/build/4511591/log/raw
@@ -702,18 +831,44 @@ rec {
     };
   };
 
+  caldavclientlibrary-asynk = buildPythonPackage rec {
+    version = "asynkdev";
+    name = "caldavclientlibrary-asynk-${version}";
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/skarra/CalDAVClientLibrary.git";
+      rev = "06699b08190d50cc2636b921a654d67db0a967d1";
+      sha256 = "1i6is7lv4v9by4panrd9w63m4xsmhwlp3rq4jjj3azwg5jm10940";
+    };
+
+    meta = {
+      description = "CalDAVCLientLibrary is a Python library and tool for CalDAV";
+
+      longDescription = ''
+        CalDAVCLientLibrary is a Python library and tool for CalDAV.
+
+        This package is the unofficial CalDAVCLientLibrary Python
+        library maintained by the author of Asynk and is needed for
+        that package.
+      '';
+
+      homepage = https://github.com/skarra/CalDAVClientLibrary/tree/asynkdev/;
+      maintainers = with maintainers; [ pjones ];
+    };
+  };
 
   bedup = buildPythonPackage rec {
     name = "bedup-20140413";
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = "https://github.com/g2p/bedup.git";
       rev = "5189e166145b8954ac41883f81ef3c3b50dc96ab";
       sha256 = "e61768fa19934bd176799f90bda3ea9f49a5def21fa2523a8e47df8a48e730e9";
     };
 
-    buildInputs = [ pkgs.btrfsProgs ];
-    propagatedBuildInputs = with pkgs; [ contextlib2 sqlalchemy9 pyxdg pycparser cffi alembic ];
+    buildInputs = with self; [ pkgs.btrfsProgs ];
+    propagatedBuildInputs = with self; [ contextlib2 sqlalchemy9 pyxdg pycparser alembic ]
+      ++ optionals (!isPyPy) [ cffi ];
 
     meta = {
       description = "Deduplication for Btrfs";
@@ -731,64 +886,84 @@ rec {
     };
   };
 
-  beets = buildPythonPackage rec {
-    name = "beets-1.3.6";
+  circus = buildPythonPackage rec {
+    name = "circus-0.11.1";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/b/beets/${name}.tar.gz";
-      md5 = "59615a54b3ac3983159e77ff9dda373e";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/circus/${name}.tar.gz";
+      md5 = "5c07cdbe9bb4a9b82e52737ad590617b";
     };
 
-    # tests depend on $HOME setting
-    preConfigure = "export HOME=$TMPDIR";
+    doCheck = false; # weird error
 
-    propagatedBuildInputs =
-      [ pythonPackages.pyyaml
-        pythonPackages.unidecode
-        pythonPackages.mutagen
-        pythonPackages.munkres
-        pythonPackages.musicbrainzngs
-        pythonPackages.enum34
-        pythonPackages.pylast
-        pythonPackages.rarfile
-        pythonPackages.flask
-        modules.sqlite3
-        modules.readline
-      ];
-      
-    buildInputs = with pythonPackages; [ mock pyechonest six responses nose ];
-    
-    # 10 tests are failing
+    propagatedBuildInputs = with self; [ iowait psutil pyzmq tornado mock ];
+  };
+
+  cornice = buildPythonPackage rec {
+    name = "cornice-${version}";
+    version = "0.17.0";
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/cornice.git;
+      rev = "refs/tags/${version}";
+      sha256 = "12yrcsv1sdl5w308y1cc939ppq7pi2490s54zfcbs481cvsyr1lg";
+    };
+
+    propagatedBuildInputs = with self; [ pyramid simplejson ];
+
+    doCheck = false; # lazy packager
+  };
+
+  cvxopt = buildPythonPackage rec {
+    name = "${pname}-${version}";
+    pname = "cvxopt";
+    version = "1.1.7";
+    disabled = isPyPy;
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/${pname}/${name}.tar.gz";
+      sha256 = "f856ea2e9e2947abc1a6557625cc6b0e45228984f397a90c420b2f468dc4cb97";
+    };
     doCheck = false;
+    buildInputs = with pkgs; [ liblapack blas ];
+    meta = with stdenv.lib; {
+      homepage = "http://cvxopt.org/";
+      description = "Python Software for Convex Optimization";
+      maintainers = with maintainers; [ edwtjo ];
+      license = licenses.gpl3Plus;
+    };
+  };
 
-    meta = {
-      homepage = http://beets.radbox.org;
-      description = "Music tagger and library organizer";
-      license = licenses.mit;
-      maintainers = [ stdenv.lib.maintainers.iElectric ];
+  iowait = buildPythonPackage rec {
+    name = "iowait-0.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/i/iowait/${name}.tar.gz";
+      md5 = "f49ca7766fe4a67e03a731e575614f87";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Platform-independent module for I/O completion events";
+      homepage = https://launchpad.net/python-iowait;
     };
   };
-  
-  responses = pythonPackages.buildPythonPackage rec {
+
+  responses = self.buildPythonPackage rec {
     name = "responses-0.2.2";
 
-    propagatedBuildInputs = with pythonPackages; [ requests mock six pytest flake8 ];
-    
+    propagatedBuildInputs = with self; [ requests mock six pytest flake8 ];
+
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/responses/responses-0.2.2.tar.gz";
       md5 = "5d79fd425cf8d858dfc8afa6475395d3";
     };
 
   };
- 
-  rarfile = pythonPackages.buildPythonPackage rec {
-    name = "rarfile-2.6";
 
-    propagatedBuildInputs = with pythonPackages; [  ];
+  rarfile = self.buildPythonPackage rec {
+    name = "rarfile-2.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/rarfile/rarfile-2.6.tar.gz";
       md5 = "50ce3f3fdb9196a00059a5ea7b3739fd";
     };
@@ -798,13 +973,11 @@ rec {
       homepage = https://github.com/markokr/rarfile;
     };
   };
-  
-  pyechonest = pythonPackages.buildPythonPackage rec {
-    name = "pyechonest-8.0.2";
 
-    propagatedBuildInputs = with pythonPackages; [  ];
+  pyechonest = self.buildPythonPackage rec {
+    name = "pyechonest-8.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pyechonest/pyechonest-8.0.2.tar.gz";
       md5 = "5586fe8ece7af4e24f71ea740185127e";
     };
@@ -816,15 +989,40 @@ rec {
   };
 
 
+  billiard = buildPythonPackage rec {
+    name = "billiard-${version}";
+    version = "3.3.0.19";
+
+    disabled = isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/billiard/${name}.tar.gz";
+      sha256 = "06bs1kl7dji6lwpj3dkfi61mmrfq2mi7wz3ka683i2avwk38wsvf";
+      md5 = "7e473b9da01956ce91a650f99fe8d4ad";
+    };
+
+    buildInputs = with self; [ nose unittest2 mock ];
+
+    # i can't imagine these were intentionally installed
+    postInstall = "rm -r $out/${python.sitePackages}/funtests";
+
+    meta = {
+      homepage = https://github.com/celery/billiard;
+      description = "Python multiprocessing fork with improvements and bugfixes";
+      license = licenses.bsd3;
+    };
+  };
+
+
   bitbucket_api = buildPythonPackage rec {
     name = "bitbucket-api-0.4.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/b/bitbucket-api/${name}.tar.gz";
       md5 = "6f3cee3586c4aad9c0b2e04fce9704fb";
     };
 
-    propagatedBuildInputs = [ requests_oauth2 nose sh ];
+    propagatedBuildInputs = with self; [ requests_oauth2 nose sh ];
 
     doCheck = false;
 
@@ -837,12 +1035,12 @@ rec {
 
   bitbucket-cli = buildPythonPackage rec {
     name = "bitbucket-cli-0.4.1";
-    src = fetchurl {
+    src = pkgs.fetchurl {
        url = "https://pypi.python.org/packages/source/b/bitbucket-cli/${name}.tar.gz";
        md5 = "79cdbdc6c95dfa313d12cbdef406c9f2";
     };
 
-    pythonPath = [ requests ];
+    pythonPath = [ self.requests ];
 
     meta = with stdenv.lib; {
       description = "Bitbucket command line interface";
@@ -855,7 +1053,7 @@ rec {
   bitstring = buildPythonPackage rec {
     name = "bitstring-3.1.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://python-bitstring.googlecode.com/files/${name}.zip";
       sha256 = "1i1p3rkj4ad108f23xyib34r4rcy571gy65paml6fk77knh0k66p";
     };
@@ -872,18 +1070,66 @@ rec {
     };
   };
 
+  bleach = buildPythonPackage rec {
+    version = "v1.4";
+    name = "bleach-${version}";
+
+    src = pkgs.fetchurl {
+      url = "http://github.com/jsocol/bleach/archive/${version}.tar.gz";
+      sha256 = "19v0zhvchz89w179rwkc4ah3cj2gbcng9alwa2yla89691g8b0b0";
+    };
+
+    propagatedBuildInputs = with self; [ six html5lib ];
+
+    meta = with stdenv.lib; {
+      description = "An easy, HTML5, whitelisting HTML sanitizer.";
+      longDescription = ''
+        Bleach is an HTML sanitizing library that escapes or strips markup and
+        attributes based on a white list. Bleach can also linkify text safely,
+        applying filters that Django's urlize filter cannot, and optionally
+        setting rel attributes, even on links already in the text.
+
+        Bleach is intended for sanitizing text from untrusted sources. If you
+        find yourself jumping through hoops to allow your site administrators
+        to do lots of things, you're probably outside the use cases. Either
+        trust those users, or don't.
+      '';
+      homepage = https://github.com/jsocol/bleach;
+      downloadPage = https://github.com/jsocol/bleach/releases;
+      license = licenses.asl20;
+      maintainers = with maintainers; [ prikhi ];
+      platforms = platforms.linux;
+    };
+  };
+
+  blinker = buildPythonPackage rec {
+    name = "blinker-${version}";
+    version = "1.3";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/blinker/${name}.tar.gz";
+      md5 = "66e9688f2d287593a0e698cd8a5fbc57";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = http://pythonhosted.org/blinker/;
+      description = "Fast, simple object-to-object and broadcast signaling";
+      license = licenses.mit;
+    };
+  };
+
 
   blockdiag = buildPythonPackage rec {
-    name = "blockdiag-1.3.2";
+    name = "blockdiag-1.4.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/b/blockdiag/${name}.tar.gz";
-      md5 = "602a8750f312eeee84d6d138055dfae7";
+      sha256 = "0bc29sh8hj3hmhclifh1by0n6vg2pl9wkxb7fmljyw0arjas54bf";
     };
 
-    buildInputs = [ pep8 nose unittest2 docutils ];
+    buildInputs = with self; [ pep8 nose unittest2 docutils ];
 
-    propagatedBuildInputs = [ pillow webcolors funcparserlib ];
+    propagatedBuildInputs = with self; [ pillow webcolors funcparserlib ];
 
     # One test fails:
     #   ...
@@ -902,12 +1148,12 @@ rec {
 
   bpython = buildPythonPackage rec {
      name = "bpython-0.12";
-     src = fetchurl {
+     src = pkgs.fetchurl {
        url = "http://www.bpython-interpreter.org/releases/bpython-0.12.tar.gz";
        sha256 = "1ilf58qq7sazmcgg4f1wswbhcn2gb8qbbrpgm6gf0j2lbm60gabl";
      };
 
-     propagatedBuildInputs = [ modules.curses pygments ];
+     propagatedBuildInputs = with self; [ modules.curses pygments ];
      doCheck = false;
 
      meta = {
@@ -922,15 +1168,21 @@ rec {
 
   boto = buildPythonPackage rec {
     name = "boto-${version}";
-    version = "2.32.0";
+    version = "2.36.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/boto/boto/archive/${version}.tar.gz";
-      sha256 = "0bl5y7m0m84rz4q7hx783kxpj1n9wcm7dhv54bnx8cnanyd13cxn";
+      sha256 = "1zrlmri89q2090yh9ylx798q4yk54y39v7w7xj101fnwc1r6jlqr";
     };
 
-    # The tests seem to require AWS credentials.
-    doCheck = false;
+    checkPhase = ''
+      ${python.interpreter} tests/test.py default
+    '';
+
+    buildInputs = [ self.nose self.mock ];
+    propagatedBuildInputs = [ self.requests self.httpretty ];
+
+    patches = [ ../development/python-modules/boto/content-length-str.patch ];
 
     meta = {
       homepage = https://github.com/boto/boto;
@@ -947,20 +1199,19 @@ rec {
     };
   };
 
-
   botocore = buildPythonPackage rec {
-    version = "0.33.0";
+    version = "0.102.0";
     name = "botocore-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/b/botocore/${name}.tar.gz";
-      md5 = "6743c73a2e148abaa9c487a6e2ee53a3";
+      sha256 = "1266hwkcchzr9r2z1q1150zmk20p3d4a75p6nppi6w9bhsywxhnr";
     };
 
     propagatedBuildInputs =
-      [ pythonPackages.dateutil
-        pythonPackages.requests
-        pythonPackages.jmespath
+      [ self.dateutil
+        self.requests
+        self.jmespath
       ];
 
     meta = {
@@ -973,16 +1224,89 @@ rec {
     };
   };
 
+  bottle = buildPythonPackage rec {
+    version = "0.12.8";
+    name = "bottle-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/bottle/${name}.tar.gz";
+      sha256 = "1b2hq0l4nwh75s2w6wgiqlkj4q1qvyx6a94axl2k4lsym1aifpfd";
+    };
+
+    propagatedBuildInputs = with self; [ setuptools ];
+
+    meta = with stdenv.lib; {
+      homepage = http://bottlepy.org;
+      description = "A fast and simple micro-framework for small web-applications";
+      license = licenses.mit;
+      platforms = platforms.all;
+      maintainers = [ maintainers.koral ];
+    };
+  };
+
+  box2d = buildPythonPackage rec {
+    name = "box2d-${version}";
+    version = "2.3b0";
+    disabled = (!isPy27);
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/B/Box2D/Box2D-2.3b0.zip";
+      md5="25fc4f69cd580bdca0022ac3ace53865";
+    };
+
+    patches = [ ../development/python-modules/box2d/disable-test.patch ];
+
+    propagatedBuildInputs = [ pkgs.swig pkgs.box2d ];
+
+    meta = with stdenv.lib; {
+      homepage = https://code.google.com/p/pybox2d/;
+      description = ''
+        A 2D game physics library for Python under
+        the very liberal zlib license
+      '';
+      license = licenses.zlib;
+      platforms = platforms.all;
+      maintainers = [ maintainers.sepi ];
+    };
+  };
+
+  bugwarrior = buildPythonPackage rec {
+    name = "bugwarrior-${version}";
+    version = "1.0.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/b/bugwarrior/${name}.tar.gz";
+      # md5 = "09c93f86a27ffc092e69b46889a3bf50"; # provided by pypi website.
+      sha256 = "efe41756c152789f39006f157add9bedfa2b85d2cac15c067e635e37c70cb8f8";
+    };
+
+    buildInputs = with self; [ mock unittest2 nose /* jira megaplan */ ];
+    propagatedBuildInputs = with self; [
+      twiggy requests2 offtrac bugzilla taskw dateutil pytz keyring six
+      jinja2 pycurl dogpile_cache lockfile click
+    ];
+
+    # for the moment jira>=0.22 and megaplan>=1.4 are missing for running the test suite.
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      homepage =  http://github.com/ralphbean/bugwarrior;
+      description = "Sync github, bitbucket, bugzilla, and trac issues with taskwarrior";
+      license = licenses.gpl3Plus;
+      platforms = platforms.all;
+      maintainers = [ maintainers.pierron ];
+    };
+  };
 
   # bugz = buildPythonPackage (rec {
   #   name = "bugz-0.9.3";
   #
-  #   src = fetchgit {
+  #   src = pkgs.fetchgit {
   #     url = "https://github.com/williamh/pybugz.git";
   #     rev = "refs/tags/0.9.3";
   #   };
   #
-  #   propagatedBuildInputs = [ pythonPackages.argparse modules.ssl ];
+  #   propagatedBuildInputs = with self; [ self.argparse ];
   #
   #   doCheck = false;
   #
@@ -992,20 +1316,48 @@ rec {
   #   };
   # });
 
+  bugzilla = buildPythonPackage rec {
+    name = "bugzilla-${version}";
+    version = "1.1.0";
 
-  buildout = zc_buildout;
-  buildout152 = zc_buildout152;
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/python-bugzilla/python-${name}.tar.gz";
+      # md5 = "c95befd1fecad21f742beaa8180538c0"; # provided by pypi website.
+      sha256 = "11361635a4f1613803a0b9b93ba9126f7fd36180653f953e2590b1536d107d46";
+    };
+
+    patches = [ ../development/python-modules/bugzilla/checkPhase-fix-cookie-compare.patch ];
+
+    buildInputs = with self; [ pep8 coverage logilab_common ];
+    propagatedBuildInputs = [ self.requests2 ];
+
+    preCheck = ''
+      mkdir -p check-phase
+      export HOME=$(pwd)/check-phase
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = https://fedorahosted.org/python-bugzilla/;
+      description = "Bugzilla XMLRPC access module";
+      license = licenses.gpl2;
+      platforms = platforms.all;
+      maintainers = [ maintainers.pierron ];
+    };
+  };
+
+  buildout = self.zc_buildout;
+  buildout152 = self.zc_buildout152;
 
   # A patched version of buildout, useful for buildout based development on Nix
   zc_buildout_nix = callPackage ../development/python-modules/buildout-nix { };
 
-  zc_recipe_egg = zc_recipe_egg_buildout171;
-  zc_buildout = zc_buildout171;
-  zc_buildout2 = zc_buildout221;
+  zc_recipe_egg = self.zc_recipe_egg_buildout171;
+  zc_buildout = self.zc_buildout171;
+  zc_buildout2 = self.zc_buildout221;
   zc_buildout221 = buildPythonPackage rec {
     name = "zc.buildout-2.2.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zc.buildout/${name}.tar.gz";
       md5 = "476a06eed08506925c700109119b6e41";
     };
@@ -1017,13 +1369,13 @@ rec {
       maintainers = [ stdenv.lib.maintainers.garbas ];
     };
   };
-  
+
   zc_buildout171 = buildPythonPackage rec {
     name = "zc.buildout-1.7.1";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zc.buildout/${name}.tar.gz";
       md5 = "8834a21586bf2be53dc412002241a996";
     };
@@ -1035,13 +1387,13 @@ rec {
       maintainers = [ stdenv.lib.maintainers.garbas ];
     };
   };
-  
+
   zc_buildout152 = buildPythonPackage rec {
     name = "zc.buildout-1.5.2";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zc.buildout/${name}.tar.gz";
       md5 = "87f7b3f8d13926c806242fd5f6fe36f7";
     };
@@ -1064,21 +1416,21 @@ rec {
     inherit version;
     name = "zc.recipe.egg-${version}";
 
-    buildInputs = [ buildout ];
+    buildInputs = with self; [ buildout ];
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       inherit md5;
       url = "https://pypi.python.org/packages/source/z/zc.recipe.egg/zc.recipe.egg-${version}.tar.gz";
     };
   };
-  zc_recipe_egg_buildout171 = zc_recipe_egg_fun {
-    buildout = zc_buildout171;
+  zc_recipe_egg_buildout171 = self.zc_recipe_egg_fun {
+    buildout = self.zc_buildout171;
     version = "1.3.2";
     md5 = "1cb6af73f527490dde461d3614a36475";
   };
-  zc_recipe_egg_buildout2 = zc_recipe_egg_fun {
-    buildout = zc_buildout2;
+  zc_recipe_egg_buildout2 = self.zc_recipe_egg_fun {
+    buildout = self.zc_buildout2;
     version = "2.0.1";
     md5 = "5e81e9d4cc6200f5b1abcf7c653dd9e3";
   };
@@ -1087,7 +1439,7 @@ rec {
     name = "bunch-1.0.1";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/b/bunch/${name}.tar.gz";
       sha256 = "1akalx2pd1fjlvrq69plvcx783ppslvikqdm93z2sdybq07pmish";
     };
@@ -1095,19 +1447,37 @@ rec {
   });
 
 
+  cairocffi = buildPythonPackage rec {
+    name = "cairocffi-0.5.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/cairocffi/${name}.tar.gz";
+      md5 = "e3fa4002583bfaa88b156e1af9c75bde";
+    };
+
+    propagatedBuildInputs = with self; [ cffi ];
+
+    meta = {
+      homepage = https://github.com/SimonSapin/cairocffi;
+      license = "bsd";
+      description = "cffi-based cairo bindings for Python";
+    };
+  };
+
+
   carrot = buildPythonPackage rec {
     name = "carrot-0.10.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/carrot/${name}.tar.gz";
       md5 = "530a0614de3a669314c3acd4995c54d5";
     };
 
-    buildInputs = [ pythonPackages.nose ];
+    buildInputs = with self; [ self.nose ];
 
     propagatedBuildInputs =
-      [ pythonPackages.amqplib
-        pythonPackages.anyjson
+      [ self.amqplib
+        self.anyjson
       ];
 
     doCheck = false; # depends on the network
@@ -1119,17 +1489,76 @@ rec {
   };
 
 
+  celery = buildPythonPackage rec {
+    name = "celery-${version}";
+    version = "3.1.17";
+
+    disabled = pythonOlder "2.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/celery/${name}.tar.gz";
+      sha256 = "0qh38xnbgbj7awpjxxvjlddyafxyyy3fhxcas3i8dmcb4r9vdqng";
+      md5 = "e37f5d93b960bf68fc26c1325f30fd16";
+    };
+
+    buildInputs = with self; [ mock nose unittest2 ];
+    propagatedBuildInputs = with self; [ kombu billiard pytz anyjson ];
+
+    # tests broken on python 2.6? https://github.com/nose-devs/nose/issues/806
+    doCheck = pythonAtLeast "2.7";
+
+    meta = {
+      homepage = https://github.com/celery/celery/;
+      description = "Distributed task queue";
+      license = licenses.bsd3;
+    };
+  };
+
+
+  certifi = buildPythonPackage rec {
+    name = "certifi-${version}";
+    version = "14.05.14";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/certifi/${name}.tar.gz";
+      sha256 = "0s8vxzfz6s4m6fvxc7z25k9j35w0rh6jkw3wwcd1az1mssncn6qy";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = http://certifi.io/;
+      description = "Python package for providing Mozilla's CA Bundle";
+      license = licenses.isc;
+      maintainers = [ maintainers.koral ];
+    };
+  };
+
+  characteristic = buildPythonPackage rec {
+    name = "characteristic-14.1.0";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/characteristic/${name}.tar.gz";
+      md5 = "68ea7e28997fc57d3631791ec0567a05";
+    };
+
+    buildInputs = with self; [ self.pytest ];
+
+    meta = {
+      description = "Python attributes without boilerplate";
+      homepage = https://characteristic.readthedocs.org;
+    };
+  };
+
+
   cheetah = buildPythonPackage rec {
     version = "2.4.4";
     name = "cheetah-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/C/Cheetah/Cheetah-${version}.tar.gz";
       md5 = "853917116e731afbc8c8a43c37e6ddba";
     };
 
-    propagatedBuildInputs = [ pythonPackages.markdown ];
+    propagatedBuildInputs = with self; [ self.markdown ];
 
     meta = {
       homepage = http://www.cheetahtemplate.org/;
@@ -1142,7 +1571,7 @@ rec {
     name = "cherrypy-${version}";
     version = "3.2.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://download.cherrypy.org/cherrypy/${version}/CherryPy-${version}.tar.gz";
       sha256 = "14dn129h69wj0h8yr0bjwbrk8kygl6mkfnxc5m3fxhlm4xb8hnnw";
     };
@@ -1157,29 +1586,74 @@ rec {
   });
 
 
-  click = buildPythonPackage {
-    name = "click-2.1";
-    src = fetchurl {
-      url = https://pypi.python.org/packages/source/c/click/click-2.1.tar.gz;
-      md5 = "0ba97ba09af82c56e2d35f3412d0aa6e";
+  cjson = buildPythonPackage rec {
+    name = "python-cjson-${version}";
+    version = "1.1.0";
+    disabled = isPy3k || isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/python-cjson/${name}.tar.gz";
+      sha256 = "a01fabb7593728c3d851e1cd9a3efbd18f72650a31a5aa8a74018640da3de8b3";
     };
-    meta = {
-      homepage = "http://click.pocoo.org/";
-      description = "Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary.";
-      license = "bsd, 3-clause";
+
+    meta = with stdenv.lib; {
+      description = "This module implements a very fast JSON encoder/decoder for Python.";
+      homepage    = "http://ag-projects.com/";
+      license     = licenses.lgpl2;
+      platforms   = platforms.all;
+    };
+  };
+
+  clf = buildPythonPackage rec {
+    name = "clf-${version}";
+    version = "0.5.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/clf/${name}.tar.gz";
+      sha256 = "04lqd2i4fjs606b0q075yi9xksk567m0sfph6v6j80za0hvzqyy5";
+    };
+
+    # Error when running tests:
+    # No local packages or download links found for requests
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/ncrocfer/clf;
+      description = "Command line tool to search snippets on Commandlinefu.com";
+      license = licenses.mit;
+      maintainers = [ maintainers.koral ];
     };
   };
 
+  click = buildPythonPackage rec {
+    name = "click-3.3";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/click/${name}.tar.gz";
+      sha256 = "1rfn8ml80rw3hkgpm1an5p3vdyhh7hzx4zynr8dhfl7bsw28r77p";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = http://click.pocoo.org/;
+      description = "Create beautiful command line interfaces in Python";
+      longDescription = ''
+        A Python package for creating beautiful command line interfaces in a
+        composable way, with as little code as necessary.
+      '';
+      license = with licenses; [ bsd3 ];
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
 
   clepy = buildPythonPackage rec {
     name = "clepy-0.3.20";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/c/clepy/${name}.tar.gz";
       sha256 = "16vibfxms5z4ld8gbkra6dkhqm2cc3jnn0fwp7mw70nlwxnmm51c";
     };
 
-    buildInputs = [ pythonPackages.mock pythonPackages.nose pythonPackages.decorator ];
+    buildInputs = with self; [ self.mock self.nose self.decorator ];
 
     meta = {
       homepage = http://code.google.com/p/clepy/;
@@ -1192,7 +1666,7 @@ rec {
     name = "clientform-0.2.10";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/C/ClientForm/ClientForm-0.2.10.tar.gz";
       sha256 = "0dydh3i1sx7rrj6d0gj375wkjpiivm7jjlsimw6hmwv4ck7yf1wm";
     };
@@ -1211,7 +1685,7 @@ rec {
     version = "2.3";
     name    = "cogapp-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://pypi.python.org/packages/source/c/cogapp/${name}.tar.gz";
       sha256 = "0gzmzbsk54r1qa6wd0yg4zzdxvn2f19ciprr2acldxaknzrpllnn";
     };
@@ -1232,12 +1706,12 @@ rec {
   colorama = buildPythonPackage rec {
     name = "colorama-0.2.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/c/colorama/colorama-0.2.5.tar.gz";
       md5 = "308c6e38917bdbfc4d3b0783c614897d";
     };
 
-    propagatedBuildInputs = [ pythonPackages.clientform ];
+    propagatedBuildInputs = with self; [ self.clientform ];
 
     doCheck = false;
 
@@ -1252,18 +1726,18 @@ rec {
   coilmq = buildPythonPackage (rec {
     name = "coilmq-0.6.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/C/CoilMQ/CoilMQ-0.6.1.tar.gz";
       md5 = "5f39727415b837abd02651eeb2721749";
     };
 
-    propagatedBuildInputs = [ pythonPackages.stompclient ];
+    propagatedBuildInputs = with self; [ self.stompclient ];
 
     preConfigure = ''
       sed -i '/distribute/d' setup.py
     '';
 
-    buildInputs = [ pythonPackages.coverage pythonPackages.sqlalchemy ];
+    buildInputs = with self; [ self.coverage self.sqlalchemy ];
 
     # ValueError: Could not parse auth file:
     # /tmp/nix-build-.../CoilMQ-0.6.1/coilmq/tests/resources/auth.ini
@@ -1278,14 +1752,14 @@ rec {
 
 
   colander = buildPythonPackage rec {
-    name = "colander-1.0b1";
+    name = "colander-1.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/colander/${name}.tar.gz";
-      md5 = "89f2cf4b5c87d43f7917d6a0d4872e6a";
+      md5 = "058576123da7216288c079c9f47693f8";
     };
 
-    propagatedBuildInputs = [ pythonPackages.translationstring ];
+    propagatedBuildInputs = with self; [ self.translationstring self.iso8601 ];
 
     meta = {
       maintainers = [
@@ -1296,23 +1770,43 @@ rec {
     };
   };
 
+  # Backported version of the ConfigParser library of Python 3.3
+  configparser = if isPy3k then null else buildPythonPackage rec {
+    name = "configparser-${version}";
+    version = "3.3.0r2";
+
+    # running install_egg_info
+    # error: [Errno 9] Bad file descriptor: '<stdout>'
+    disabled = isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/configparser/${name}.tar.gz";
+      sha256 = "6a2318590dfc4013fc5bf53c2bec14a8cb455a232295eb282a13f94786c4b0b2";
+    };
+
+    meta = {
+      maintainers = [ ];
+      platforms = stdenv.lib.platforms.all;
+    };
+  };
+
 
   ColanderAlchemy = buildPythonPackage rec {
     name = "ColanderAlchemy-0.2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/C/ColanderAlchemy/${name}.tar.gz";
       md5 = "b054837bd2753cbf15f7d5028cba421b";
     };
 
-    buildInputs = [ unittest2 ];
-    propagatedBuildInputs = [ colander sqlalchemy9 ];
+    buildInputs = with self; [ unittest2 ];
+    propagatedBuildInputs = with self; [ colander sqlalchemy9 ];
 
     # string: argument name cannot be overridden via info kwarg.
     doCheck = false;
 
     meta = {
-      description = "Autogenerate Colander schemas based on SQLAlchemy models.";
+      description = "Autogenerate Colander schemas based on SQLAlchemy models";
       homepage = https://github.com/stefanofontanelli/ColanderAlchemy;
       license = licenses.mit;
     };
@@ -1322,7 +1816,7 @@ rec {
   configobj = buildPythonPackage (rec {
     name = "configobj-5.0.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/configobj/${name}.tar.gz";
       md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
     };
@@ -1330,8 +1824,10 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
+    propagatedBuildInputs = with self; [ six ];
+
     meta = {
-      description = "Config file reading, writing and validation.";
+      description = "Config file reading, writing and validation";
       homepage = http://pypi.python.org/pypi/configobj;
       license = licenses.bsd3;
       maintainers = [ stdenv.lib.maintainers.garbas ];
@@ -1343,12 +1839,12 @@ rec {
     version = "1.1.fb10";
     name = "configshell-fb-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/agrover/configshell-fb/archive/v${version}.tar.gz";
       sha256 = "1dd87xvm98nk3jzybb041gjdahi2z9b53pwqhyxcfj4a91y82ndy";
     };
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       pyparsing
       modules.readline
       urwid
@@ -1363,14 +1859,14 @@ rec {
 
 
   construct = buildPythonPackage rec {
-    name = "construct-2.5.1";
+    name = "construct-2.5.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/c/construct/${name}.tar.gz";
-      sha256 = "08qksl87vr6g2wjxwsyrjh4w6v8bfmcgrcgln7irqvw5vv7qgqss";
+      sha256 = "084h02p0m8lhmlywlwjdg0kd0hd6sz481c96qwcm5wddxrqn4nv6";
     };
 
-    propagatedBuildInputs = [ six ];
+    propagatedBuildInputs = with self; [ six ];
 
     meta = with stdenv.lib; {
       description = "Powerful declarative parser (and builder) for binary data";
@@ -1385,18 +1881,18 @@ rec {
   contextlib2 = buildPythonPackage rec {
     name = "contextlib2-0.4.0";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "https://pypi.python.org/packages/source/c/contextlib2/${name}.tar.gz";
       md5 = "ea687207db25f65552061db4a2c6727d";
     };
   };
 
   coverage = buildPythonPackage rec {
-    name = "coverage-3.6";
+    name = "coverage-3.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/coverage/${name}.tar.gz";
-      md5 = "67d4e393f4c6a5ffc18605409d2aa1ac";
+      md5 = "055d82e6849d882ec6cf2ae1faca8e56";
     };
 
     meta = {
@@ -1407,28 +1903,41 @@ rec {
   };
 
   covCore = buildPythonPackage rec {
-    name = "cov-core-1.7";
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/c/cov-core/cov-core-1.7.tar.gz";
-      md5 = "59c1e22e636633e10120beacbf45b28c";
+    name = "cov-core-1.15.0";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/c/cov-core/${name}.tar.gz";
+      md5 = "f519d4cb4c4e52856afb14af52919fe6";
     };
     meta = {
       description = "plugin core for use by pytest-cov, nose-cov and nose2-cov";
     };
-    propagatedBuildInputs = [ pythonPackages.coverage ];
+    propagatedBuildInputs = with self; [ self.coverage ];
+  };
+
+  crcmod = buildPythonPackage rec {
+    name = "crcmod-1.7";
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/c/crcmod/crcmod-1.7.tar.gz;
+      sha256 = "07k0hgr42vw2j92cln3klxka81f33knd7459cn3d8aszvfh52w6w";
+    };
+    meta = {
+      description = "Python module for generating objects that compute the Cyclic Redundancy Check (CRC)";
+      homepage = http://crcmod.sourceforge.net/;
+      license = stdenv.lib.licenses.mit;
+    };
   };
 
   cython = buildPythonPackage rec {
     name = "Cython-0.20.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.cython.org/release/${name}.tar.gz";
       sha256 = "0v3nc9z5ynnnjdgcgkyy5g9wazmkjv53nnpjal1v3mr199s6799i";
     };
 
     setupPyBuildFlags = ["--build-base=$out"];
 
-    buildInputs = [ pkgs.pkgconfig ];
+    buildInputs = with self; [ pkgs.pkgconfig ];
 
     meta = {
       description = "An interpreter to help writing C extensions for Python 2";
@@ -1439,10 +1948,10 @@ rec {
   cryptacular = buildPythonPackage rec {
     name = "cryptacular-1.4.1";
 
-    buildInputs = [ coverage nose ];
-    propagatedBuildInputs = [ pbkdf2 modules.crypt ];
+    buildInputs = with self; [ coverage nose ];
+    propagatedBuildInputs = with self; [ pbkdf2 modules.crypt ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/cryptacular/${name}.tar.gz";
       md5 = "fe12232ac660185186dd8057d8ca7b0e";
     };
@@ -1455,12 +1964,49 @@ rec {
     };
   };
 
-  detox = pythonPackages.buildPythonPackage rec {
+  cryptography = buildPythonPackage rec {
+    name = "cryptography-0.6.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/cryptography/${name}.tar.gz";
+      sha256 = "17ij2acy28ryxahiq64lpf71d5z3sa9xhr4pjv7a1v81189i0j82";
+    };
+
+    buildInputs = [ pkgs.openssl self.pretend self.cryptography_vectors
+                    self.iso8601 self.pyasn1 self.pytest ];
+    propagatedBuildInputs = [ self.six self.cffi  ];
+  };
+
+  cryptography_vectors = buildPythonPackage rec {
+    name = "cryptography_vectors-0.6.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/c/cryptography-vectors/${name}.tar.gz";
+      sha256 = "1ks1xdb1ff74qmjdzqcfvkrwsbnwpsjgg3cy18zh37p8985cvl3r";
+    };
+  };
+
+  pretend = buildPythonPackage rec {
+    name = "pretend-1.0.8";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pretend/pretend-1.0.8.tar.gz";
+      sha256 = "0r5r7ygz9m6d2bklflbl84cqhjkc2q12xgis8268ygjh30g2q3wk";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/alex/pretend;
+      license = licenses.bsd3;
+    };
+  };
+
+
+  detox = self.buildPythonPackage rec {
     name = "detox-0.9.3";
 
-    propagatedBuildInputs = with pythonPackages; [ tox py eventlet ];
+    propagatedBuildInputs = with self; [ tox py eventlet ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/detox/detox-0.9.3.tar.gz";
       md5 = "b52588ec61cd4c2d33e419677a5eac8c";
     };
@@ -1475,7 +2021,7 @@ rec {
   pbkdf2 = buildPythonPackage rec {
     name = "pbkdf2-1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pbkdf2/${name}.tar.gz";
       md5 = "40cda566f61420490206597243dd869f";
     };
@@ -1491,12 +2037,12 @@ rec {
   bcrypt = buildPythonPackage rec {
     name = "bcrypt-1.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/b/bcrypt/${name}.tar.gz";
       md5 = "c5df008669d17dd6eeb5e2042d5e136f";
     };
 
-    buildInputs = [ cffi pycparser mock pytest py ];
+    buildInputs = with self; [ pycparser mock pytest py ] ++ optionals (!isPyPy) [ cffi ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -1504,14 +2050,14 @@ rec {
   };
 
   cffi = buildPythonPackage rec {
-    name = "cffi-0.7.2";
+    name = "cffi-0.8.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/cffi/${name}.tar.gz";
-      md5 = "d329f5cb2053fd31dafc02e2c9ef0299";
+      sha256 = "0406j3sgndmx88idv5zxkkrwfqxmjl18pj8gf47nsg4ymzixjci5";
     };
 
-    propagatedBuildInputs = [ pkgs.libffi pycparser ];
+    propagatedBuildInputs = with self; [ pkgs.libffi pycparser ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -1519,15 +2065,15 @@ rec {
   };
 
   pycollada = buildPythonPackage rec {
-    name = "pycollada-0.4";
+    name = "pycollada-0.4.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pycollada/${name}.tar.gz";
-      md5 = "5d0f00c035491b945cdccdfd8a698ad2";
+      sha256 = "0i50lh98550pwr95zgzrgiqzsspm09wl52xlv83y5nrsz4mblylv";
     };
 
     # pycollada-0.4 needs python-dateutil==1.5
-    buildInputs = [ dateutil_1_5 numpy ];
+    buildInputs = with self; [ dateutil_1_5 numpy ];
 
     # Some tests fail because they refer to test data files that don't exist
     # (upstream packaging issue)
@@ -1545,7 +2091,7 @@ rec {
   pycparser = buildPythonPackage rec {
     name = "pycparser-2.10";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pycparser/${name}.tar.gz";
       md5 = "d87aed98c8a9f386aa56d365fe4d515f";
     };
@@ -1559,46 +2105,124 @@ rec {
   };
 
   pytest = buildPythonPackage rec {
-    name = "pytest-2.5.1";
+    name = "pytest-2.6.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pytest/${name}.tar.gz";
-      md5 = "4e155a0134e6757b37cc6698c20f3e9f";
+      md5 = "0a1735fb1d481ef3864f34678607ba85";
     };
 
     preCheck = ''
-      # broken on python3, fixed in master, remove in next release
-      rm doc/en/plugins_index/test_plugins_index.py
-
       # don't test bash builtins
       rm testing/test_argcomplete.py
-
-      # yaml test are failing
-      rm doc/en/example/nonpython/test_simple.yml
     '';
 
-    propagatedBuildInputs = [ py ]
+    propagatedBuildInputs = with self; [ py ]
       ++ (optional isPy26 argparse)
       ++ stdenv.lib.optional
         pkgs.config.pythonPackages.pytest.selenium or false
-        pythonPackages.selenium;
+        self.selenium;
 
     meta = with stdenv.lib; {
-      maintainers = with maintainers; [ iElectric lovek323 ];
+      maintainers = with maintainers; [ iElectric lovek323 madjar ];
       platforms = platforms.unix;
     };
   };
 
+  pytestcache = buildPythonPackage rec {
+    name = "pytest-cache-1.0";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pytest-cache/pytest-cache-1.0.tar.gz";
+      sha256 = "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y";
+    };
+
+    propagatedBuildInputs = with self ; [ pytest execnet ];
+
+    meta = {
+      license = stdenv.lib.licenses.mit;
+      website = "https://pypi.python.org/pypi/pytest-cache/";
+      description = "pytest plugin with mechanisms for caching across test runs";
+    };
+  };
+
+  pytestflakes = buildPythonPackage rec {
+    name = "pytset-flakes-0.2";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pytest-flakes/pytest-flakes-0.2.zip";
+      sha256 = "0n4mc2kaqasxmj8jid7jlss7nwgz4qgglcwdyrqvh08dilnp354i";
+    };
+
+    propagatedBuildInputs = with self ; [ pytest pyflakes pytestcache ];
+
+    meta = {
+      license = stdenv.lib.licenses.mit;
+      website = "https://pypi.python.org/pypi/pytest-flakes";
+      description = "pytest plugin to check source code with pyflakes";
+    };
+  };
+
+  pytestpep8 = buildPythonPackage rec {
+    name = "pytest-pep8";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/p/pytest-pep8/pytest-pep8-1.0.6.tar.gz";
+      sha256 = "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3";
+    };
+
+    propagatedBuildInputs = with self ; [ pytest pytestcache pep8 ];
+
+    meta = {
+      license = stdenv.lib.licenses.mit;
+      website = "https://pypi.python.org/pypi/pytest-pep8";
+      description = "pytest plugin to check PEP8 requirements";
+    };
+  };
+
+  pytestquickcheck = buildPythonPackage rec {
+    name = "pytest-quickcheck-0.8.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pytest-quickcheck/pytest-quickcheck-0.8.2.tar.gz";
+      sha256 = "047w4zwdsnlzmsc5f3rapzbzd2frlvz9nnp8v4b48fjmqmxassh3";
+    };
+
+    propagatedBuildInputs = with self ; [ pytest pytestflakes pytestpep8 tox ];
+
+    meta = {
+      license = stdenv.lib.licenses.asl20;
+      website = "https://pypi.python.org/pypi/pytest-quickcheck";
+      description = "pytest plugin to generate random data inspired by QuickCheck";
+    };
+  };
+
+  pytestcov = buildPythonPackage (rec {
+    name = "pytest-cov-1.8.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pytest-cov/${name}.tar.gz";
+      md5 = "76c778afa2494088270348be42d759fc";
+    };
+
+   buildInputs = with self; [ covCore pytest ];
+
+    meta = {
+      description = "py.test plugin for coverage reporting with support for both centralised and distributed testing, including subprocesses and multiprocessing";
+
+      homepage = https://github.com/schlamar/pytest-cov;
+
+      license = stdenv.lib.licenses.mit;
+    };
+  });
+
   pytest_xdist = buildPythonPackage rec {
     name = "pytest-xdist-1.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pytest-xdist/pytest-xdist-1.8.zip";
       md5 = "9c0b8efe9d43b460f8cf049fa46ce14d";
     };
 
-    buildInputs = [ pytest ];
-    propagatedBuildInputs = [ execnet ];
+    buildInputs = with self; [ pytest ];
+    propagatedBuildInputs = with self; [ execnet ];
 
     meta = {
       description = "py.test xdist plugin for distributed testing and loop-on-failing modes";
@@ -1608,7 +2232,7 @@ rec {
 
   cssselect = buildPythonPackage rec {
     name = "cssselect-0.7.1";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/cssselect/cssselect-0.7.1.tar.gz";
       md5 = "c6c5e9a2e7ca226ce03f6f67a771379c";
     };
@@ -1619,12 +2243,12 @@ rec {
   cssutils = buildPythonPackage (rec {
     name = "cssutils-0.9.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://pypi.python.org/packages/source/c/cssutils/cssutils-0.9.9.zip;
       sha256 = "139yfm9yz9k33kgqw4khsljs10rkhhxyywbq9i82bh2r31cil1pp";
     };
 
-    buildInputs = [ pythonPackages.mock ];
+    buildInputs = with self; [ self.mock ];
 
     # couple of failing tests
     doCheck = false;
@@ -1642,12 +2266,12 @@ rec {
     name = "darcsver-1.7.4";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/darcsver/${name}.tar.gz";
       sha256 = "1yb1c3jxqvy4r3qiwvnb86qi5plw6018h15r3yk5ji3nk54qdcb6";
     };
 
-    buildInputs = [ pythonPackages.mock ];
+    buildInputs = with self; [ self.mock ];
 
     # Note: We don't actually need to provide Darcs as a build input.
     # Darcsver will DTRT when Darcs isn't available.  See news.gmane.org
@@ -1670,12 +2294,12 @@ rec {
   dateutil = buildPythonPackage (rec {
     name = "dateutil-2.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/python-dateutil/python-${name}.tar.gz";
       sha256 = "0s74ad6r789810s10dxgvaf48ni6adac2icrdad34zxygqq6bj7f";
     };
 
-    propagatedBuildInputs = [ pythonPackages.six ];
+    propagatedBuildInputs = with self; [ self.six ];
 
     meta = {
       description = "Powerful extensions to the standard datetime module";
@@ -1688,12 +2312,12 @@ rec {
   dateutil_1_5 = buildPythonPackage (rec {
     name = "dateutil-1.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/python-dateutil/python-${name}.tar.gz";
       sha256 = "02dhw57jf5kjcp7ng1if7vdrbnlpb9yjmz7wygwwvf3gni4766bg";
     };
 
-    propagatedBuildInputs = [ pythonPackages.six ];
+    propagatedBuildInputs = with self; [ self.six ];
 
     meta = {
       description = "Powerful extensions to the standard datetime module";
@@ -1702,11 +2326,55 @@ rec {
     };
   });
 
+  # flexget requires 2.1
+  dateutil_2_1 = buildPythonPackage (rec {
+    name = "dateutil-2.1";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/p/python-dateutil/python-${name}.tar.gz";
+      sha256 = "1vlx0lpsxjxz64pz87csx800cwfqznjyr2y7nk3vhmzhkwzyqi2c";
+    };
+
+    propagatedBuildInputs = with self; [ self.six ];
+
+    buildInputs = [ pkgs.glibcLocales ];
+
+    preBuild = ''
+      export LC_ALL="en_US.UTF-8"
+    '';
+
+    meta = {
+      description = "Powerful extensions to the standard datetime module";
+      homepage = http://pypi.python.org/pypi/python-dateutil;
+      license = "BSD-style";
+    };
+  });
+
+  ddar = buildPythonPackage {
+    name = "ddar-1.0";
+
+    src = pkgs.fetchurl {
+      url = "https://github.com/basak/ddar/archive/v1.0.tar.gz";
+      sha256 = "08lv7hrbhcv6hbl01sx8fgx3l8s2nn8rvcicdidafwm87bvi2nmr";
+    };
+
+    preBuild = ''
+      make -f Makefile.prep synctus/ddar_pb2.py
+    '';
+
+    propagatedBuildInputs = with self; [ protobuf modules.sqlite3 ];
+
+    meta = {
+      description = "Unix de-duplicating archiver";
+      license = licenses.gpl3;
+      homepage = https://github.com/basak/ddar;
+    };
+  };
 
   decorator = buildPythonPackage rec {
     name = "decorator-3.4.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/decorator/${name}.tar.gz";
       md5 = "1e8756f719d746e2fc0dd28b41251356";
     };
@@ -1720,22 +2388,22 @@ rec {
   deform = buildPythonPackage rec {
     name = "deform-0.9.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/deform/${name}.tar.gz";
       sha256 = "0ympsjhxz5v8h4hi1mv811h064221bh26d68l9hv1x6m7sxbxpd0";
     };
 
-    buildInputs = [] ++ optional isPy26 unittest2;
+    buildInputs = with self; [] ++ optional isPy26 unittest2;
 
     propagatedBuildInputs =
-      [ pythonPackages.beautifulsoup4
-        pythonPackages.peppercorn
-        pythonPackages.colander
-        pythonPackages.translationstring
-        pythonPackages.chameleon
-        pythonPackages.zope_deprecation
-        pythonPackages.coverage
-        pythonPackages.nose
+      [ self.beautifulsoup4
+        self.peppercorn
+        self.colander
+        self.translationstring
+        self.chameleon
+        self.zope_deprecation
+        self.coverage
+        self.nose
       ];
 
     meta = {
@@ -1746,26 +2414,26 @@ rec {
       platforms = stdenv.lib.platforms.all;
     };
   };
-  
+
   deform2 = buildPythonPackage rec {
     name = "deform-2.0a2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/deform/${name}.tar.gz";
       sha256 = "1gfaf1d8zp0mp4h229srlffxdp86w1nni9g4aqsshxysr23x591z";
     };
 
-    buildInputs = [] ++ optional isPy26 unittest2;
+    buildInputs = with self; [] ++ optional isPy26 unittest2;
 
     propagatedBuildInputs =
-      [ pythonPackages.beautifulsoup4
-        pythonPackages.peppercorn
-        pythonPackages.colander
-        pythonPackages.translationstring
-        pythonPackages.chameleon
-        pythonPackages.zope_deprecation
-        pythonPackages.coverage
-        pythonPackages.nose
+      [ self.beautifulsoup4
+        self.peppercorn
+        self.colander
+        self.translationstring
+        self.chameleon
+        self.zope_deprecation
+        self.coverage
+        self.nose
       ];
 
     meta = {
@@ -1781,12 +2449,12 @@ rec {
   deform_bootstrap = buildPythonPackage rec {
     name = "deform_bootstrap-0.2.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/deform_bootstrap/${name}.tar.gz";
       sha256 = "1hgq3vqsfqdmlyahnlc40w13viawhpzqf4jzigsggdb41x545fda";
     };
 
-    propagatedBuildInputs = [ deform ];
+    propagatedBuildInputs = with self; [ deform ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -1798,7 +2466,7 @@ rec {
   demjson = buildPythonPackage rec {
     name = "demjson-1.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/demjson/${name}.tar.gz";
       sha256 = "0abf7wqqq7rk1sycy47ayn5p93yy7gjq50cb2z69wmik1qqrr60x";
     };
@@ -1819,12 +2487,12 @@ rec {
     };
   };
 
-  derpconf = pythonPackages.buildPythonPackage rec {
+  derpconf = self.buildPythonPackage rec {
     name = "derpconf-0.4.9";
 
-    propagatedBuildInputs = [ six ];
+    propagatedBuildInputs = with self; [ six ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/derpconf/${name}.tar.gz";
       md5 = "a164807d7bf0c4adf1de781305f29b82";
     };
@@ -1836,12 +2504,145 @@ rec {
     };
   };
 
+  discogs_client = buildPythonPackage rec {
+    name = "discogs-client-2.0.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/discogs-client/${name}.tar.gz";
+      md5 = "2cc57e1d134aa93404e779b9311676fa";
+    };
+
+    propagatedBuildInputs = with self; [ oauth2 requests ];
+
+    meta = {
+      description = "Official Python API client for Discogs";
+      license = licenses.bsd2;
+      homepage = "https://github.com/discogs/discogs_client";
+    };
+  };
+
+  dns = buildPythonPackage rec {
+    name = "dnspython-${version}";
+    version = "1.12.0";
+
+    src = pkgs.fetchurl {
+      url = "http://www.dnspython.org/kits/1.12.0/dnspython-1.12.0.tar.gz";
+      sha256 = "0kvjlkp96qzh3j31szpjlzqbp02brixh4j4clnpw80b0hspq5yq3";
+    };
+  };
+
+  docker = buildPythonPackage rec {
+    name = "docker-py-0.4.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/docker-py/${name}.tar.gz";
+      md5 = "21ab8fd729105487e6423b654d6c0860";
+    };
+
+    propagatedBuildInputs = with self; [ six requests websocket_client ];
+
+    # Version conflict
+    doCheck = false;
+
+    meta = {
+      description = "An API client for docker written in Python";
+      homepage = https://github.com/docker/docker-py;
+      license = licenses.asl20;
+    };
+  };
+
+  dockerpty = buildPythonPackage rec {
+    name = "dockerpty-0.3.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/dockerpty/${name}.tar.gz";
+      md5 = "1f97b24d2f4b2c345f176f91655002dd";
+    };
+
+    meta = {
+      description = "Functionality needed to operate the pseudo-tty (PTY) allocated to a docker container";
+      homepage = https://github.com/d11wtq/dockerpty;
+      license = licenses.asl20;
+    };
+  };
+
+  docker_registry_core = buildPythonPackage rec {
+    name = "docker-registry-core-2.0.3";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/docker-registry-core/${name}.tar.gz";
+      md5 = "610ef9395f2e9a2f91c68d13325fce7b";
+    };
+
+    DEPS = "loose";
+
+    doCheck = false;
+    propagatedBuildInputs = with self; [
+      boto redis setuptools simplejson
+    ];
+
+    patchPhase = "> requirements/main.txt";
+
+    meta = {
+      description = "Docker registry core package";
+      homepage = https://github.com/docker/docker-registry;
+      license = licenses.asl20;
+    };
+  };
+
+  docker_registry = buildPythonPackage rec {
+    name = "docker-registry-0.9.1";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/docker-registry/${name}.tar.gz";
+      sha256 = "1svm1h59sg4bwj5cy10m016gj0xpiin15nrz5z66h47sbkndvlw3";
+    };
+
+    DEPS = "loose";
+
+    doCheck = false; # requires redis server
+    propagatedBuildInputs = with self; [
+      setuptools docker_registry_core blinker flask gevent gunicorn pyyaml
+      requests2 rsa sqlalchemy9 setuptools backports_lzma pyasn1 m2crypto
+    ];
+
+    patchPhase = "> requirements/main.txt";
+
+    # Default config uses needed env variables
+    postInstall = ''
+      ln -s $out/lib/python2.7/site-packages/config/config_sample.yml $out/lib/python2.7/site-packages/config/config.yml
+    '';
+
+    meta = {
+      description = "Docker registry core package";
+      homepage = https://github.com/docker/docker-registry;
+      license = licenses.asl20;
+    };
+  };
+
+  docopt = buildPythonPackage rec {
+    name = "docopt-0.6.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/docopt/${name}.tar.gz";
+      md5 = "4bc74561b37fad5d3e7d037f82a4c3b1";
+    };
+
+    meta = {
+      description = "Pythonic argument parser, that will make you smile";
+      homepage = http://docopt.org/;
+      license = licenses.mit;
+    };
+  };
+
   dogpile_cache = buildPythonPackage rec {
     name = "dogpile.cache-0.5.4";
 
-    propagatedBuildInputs = [ dogpile_core ];
+    propagatedBuildInputs = with self; [ dogpile_core ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/dogpile.cache/dogpile.cache-0.5.4.tar.gz";
       md5 = "513b77ba1bd0c31bb15dd9dd0d8471af";
     };
@@ -1849,7 +2650,7 @@ rec {
     doCheck = false;
 
     meta = {
-      description = "A caching front-end based on the Dogpile lock.";
+      description = "A caching front-end based on the Dogpile lock";
       homepage = http://bitbucket.org/zzzeek/dogpile.cache;
       license = licenses.bsd3;
     };
@@ -1858,7 +2659,7 @@ rec {
   dogpile_core = buildPythonPackage rec {
     name = "dogpile.core-0.4.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/dogpile.core/dogpile.core-0.4.1.tar.gz";
       md5 = "01cb19f52bba3e95c9b560f39341f045";
     };
@@ -1872,11 +2673,28 @@ rec {
     };
   };
 
+  dotfiles = buildPythonPackage rec {
+    name = "dotfiles-0.6.3";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/dotfiles/${name}.tar.gz";
+      md5 = "95a0792eb92a8fc0db8a7e59389470fe";
+    };
+
+    doCheck = true;
+
+    meta = {
+      description = "Easily manage your dotfiles";
+      homepage = https://github.com/jbernard/dotfiles;
+      license = licenses.isc;
+    };
+  };
+
   dpkt = buildPythonPackage rec {
     name = "dpkt-1.8";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://dpkt.googlecode.com/files/${name}.tar.gz";
       sha256 = "01q5prynymaqyfsfi2296xncicdpid2hs3yyasim8iigvkwy4vf5";
     };
@@ -1896,7 +2714,7 @@ rec {
   urllib3 = buildPythonPackage rec {
     name = "urllib3-1.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/u/urllib3/${name}.tar.gz";
       sha256 = "0pdigfxkq8mhzxxsn6isx8c4h9azqywr1k18yanwyxyj8cdzm28s";
     };
@@ -1909,7 +2727,7 @@ rec {
       nosetests --cover-min-percentage 70
     '';
 
-    buildInputs = [ coverage tornado mock nose ];
+    buildInputs = with self; [ coverage tornado mock nose ];
 
     meta = with stdenv.lib; {
       description = "A Python library for Dropbox's HTTP-based Core and Datastore APIs";
@@ -1920,14 +2738,15 @@ rec {
 
 
   dropbox = buildPythonPackage rec {
-    name = "dropbox-2.0.0";
+    name = "dropbox-2.2.0";
+    doCheck = false; # python 2.7.9 does verify ssl certificates
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/d/dropbox/${name}.zip";
-      sha256 = "1bi2z1lql6ryylfflmizhqn98ab55777vn7n5krhqz40pdcjilkx";
+      sha256 = "069jrwb67brqh0sics8fgqdf2mv5y5jl9k5729x8vf80pq2c9p36";
     };
 
-    propagatedBuildInputs = [ urllib3 mock setuptools ];
+    propagatedBuildInputs = with self; [ urllib3 mock setuptools ];
 
     meta = with stdenv.lib; {
       description = "A Python library for Dropbox's HTTP-based Core and Datastore APIs";
@@ -1937,17 +2756,62 @@ rec {
   };
 
 
+  elasticsearch = buildPythonPackage (rec {
+    name = "elasticsearch-1.4.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/e/elasticsearch/${name}.tar.gz";
+      md5 = "14a758debd2296d923cb6c958db98eba";
+    };
+
+    # Check is disabled because running them destroy the content of the local cluster!
+    # https://github.com/elasticsearch/elasticsearch-py/tree/master/test_elasticsearch
+    doCheck = false;
+
+    meta = {
+      description = "Official low-level client for Elasticsearch";
+
+      homepage = https://github.com/elasticsearch/elasticsearch-py;
+
+      license = stdenv.lib.licenses.asl20;
+    };
+  });
+
+
+  elasticsearchdsl = buildPythonPackage (rec {
+    name = "elasticsearch-dsl-0.0.3";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/e/elasticsearch-dsl/${name}.tar.gz";
+      md5 = "6cbc9ed7aefb3ef804be4e3b318b2570";
+    };
+
+    buildInputs = with self; [ covCore dateutil elasticsearch mock pytest pytestcov unittest2 urllib3 ];
+
+    # ImportError: No module named test_elasticsearch_dsl
+    doCheck = false;
+
+    meta = {
+      description = "Python client for Elasticsearch";
+
+      homepage = https://github.com/elasticsearch/elasticsearch-dsl-py;
+
+      license = stdenv.lib.licenses.asl20;
+    };
+  });
+
+
   evdev = buildPythonPackage rec {
-    version = "0.4.5";
+    version = "0.4.7";
     name = "evdev-${version}";
     disabled = isPy34;  # see http://bugs.python.org/issue21121
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/e/evdev/${name}.tar.gz";
-      sha256 = "0w8ib3ab4mpfc1rvd335l8xkd41qbh3iyb0vfiiapgcfvqk74aq7";
+      sha256 = "1mz8cfncpxc1wbk2nj7apl0ssqc0vfndysxchq3wabd9vzx5p71k";
     };
 
-    buildInputs = [ pkgs.linuxHeaders ];
+    buildInputs = with self; [ pkgs.linuxHeaders ];
 
     patchPhase = "sed -e 's#/usr/include/linux/input.h#${pkgs.linuxHeaders}/include/linux/input.h#' -i setup.py";
 
@@ -1963,16 +2827,37 @@ rec {
   };
 
 
+  eventlib = buildPythonPackage rec {
+    name = "python-eventlib-${version}";
+    version = "0.2.0";
+
+    src = pkgs.fetchurl {
+      url = "http://download.ag-projects.com/SipClient/${name}.tar.gz";
+      sha256 = "0fld5lb85ql4a5bgc38sdxi5pgzqljysp1p8f7abxnd6vymh4rgi";
+    };
+
+    propagatedBuildInputs = with self; [ greenlet ];
+
+    meta = with stdenv.lib; {
+      description = "Eventlib bindings for python.";
+      homepage    = "http://ag-projects.com/";
+      license     = licenses.lgpl2;
+      platforms   = platforms.all;
+    };
+  };
+
+
   eyeD3 = buildPythonPackage rec {
     version = "0.7.4";
     name    = "eyeD3-${version}";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://eyed3.nicfit.net/releases/${name}.tgz";
       sha256 = "001hzgqqnf2ig432mq78jsxidpky2rl2ilm28xwjp32vzphycf51";
     };
 
-    buildInputs = [ paver ];
+    buildInputs = with self; [ paver ];
 
     postInstall = ''
       for prog in "$out/bin/"*; do
@@ -2000,7 +2885,7 @@ rec {
   execnet = buildPythonPackage rec {
     name = "execnet-1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/e/execnet/${name}.zip";
       md5 = "be885ccd9612966bb81839670d2da099";
     };
@@ -2015,16 +2900,16 @@ rec {
 
   facebook-sdk = buildPythonPackage rec {
     name = "facebook-sdk-0.4.0";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/f/facebook-sdk/facebook-sdk-0.4.0.tar.gz";
       md5 = "ac9f38e197e54b8ba9f3a61988cc33b7";
     };
 
     meta = with pkgs.stdenv.lib; {
-      description = "Client library that supports the Facebook Graph API and the official Facebook JavaScript SDK.";
+      description = "Client library that supports the Facebook Graph API and the official Facebook JavaScript SDK";
       homepage = https://github.com/pythonforfacebook/facebook-sdk;
       license = licenses.asl20 ;
     };
@@ -2033,13 +2918,13 @@ rec {
   faker = buildPythonPackage rec {
     name = "faker-0.0.4";
     disabled = isPy3k;
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/F/Faker/Faker-0.0.4.tar.gz;
       sha256 = "09q5jna3j8di0gw5yjx0dvlndkrk2x9vvqzwyfsvg3nlp8h38js1";
     };
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose ];
     meta = with stdenv.lib; {
-      description = "A Python library for generating fake user data.";
+      description = "A Python library for generating fake user data";
       homepage    = http://pypi.python.org/pypi/Faker;
       license     = licenses.mit;
       maintainers = with maintainers; [ lovek323 ];
@@ -2049,12 +2934,12 @@ rec {
 
   fake_factory = buildPythonPackage rec {
     name = "fake-factory-0.2";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/f/fake-factory/fake-factory-0.2.tar.gz;
       sha256 = "0qdmk8p4anrj9mf95dh9v7bkhv1pz69hvhlw380kj4iz7b44b6zn";
     };
     meta = with stdenv.lib; {
-      description = "A Python package that generates fake data for you.";
+      description = "A Python package that generates fake data for you";
       homepage    = https://pypi.python.org/pypi/fake-factory;
       license     = licenses.mit;
       maintainers = with maintainers; [ lovek323 ];
@@ -2064,26 +2949,27 @@ rec {
 
   fabric = buildPythonPackage rec {
     name = "fabric-${version}";
-    version = "1.9.1";
-    src = fetchurl {
+    version = "1.10.0";
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/F/Fabric/Fabric-${version}.tar.gz";
-      sha256 = "103mzf0l15kyvw5nmf7bsdrqg6y3wpyxmkyl2h9lk7jxb5gdc9s1";
+      sha256 = "0nikc05iz1fx2c9pvxrhrs819cpmg566azm99450yq2m8qmp1cpd";
     };
     disabled = isPy3k;
-    propagatedBuildInputs = [ paramiko pycrypto ];
-    buildInputs = [ fudge nose ];
+    doCheck = (!isPyPy);  # https://github.com/fabric/fabric/issues/11891
+    propagatedBuildInputs = with self; [ paramiko pycrypto ];
+    buildInputs = with self; [ fudge nose ];
   };
 
   fedora_cert = stdenv.mkDerivation (rec {
     name = "fedora-cert-0.5.9.2";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://fedorahosted.org/releases/f/e/fedora-packager/fedora-packager-0.5.9.2.tar.bz2";
       sha256 = "105swvzshgn3g6bjwk67xd8pslnhpxwa63mdsw6cl4c7cjp2blx9";
     };
 
-    propagatedBuildInputs = [ python python_fedora wrapPython ];
+    propagatedBuildInputs = with self; [ python python_fedora wrapPython ];
     postInstall = "mv $out/bin/fedpkg $out/bin/fedora-cert-fedpkg";
     doCheck = false;
 
@@ -2094,30 +2980,30 @@ rec {
     name = "fedpkg-1.14";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://fedorahosted.org/releases/f/e/fedpkg/fedpkg-1.14.tar.bz2";
       sha256 = "0rj60525f2sv34g5llafnkmpvbwrfbmfajxjc14ldwzymp8clc02";
     };
 
     patches = [ ../development/python-modules/fedpkg-buildfix.diff ];
-    propagatedBuildInputs = [ rpkg offtrac urlgrabber fedora_cert ];
+    propagatedBuildInputs = with self; [ rpkg offtrac urlgrabber fedora_cert ];
   });
 
   fudge = buildPythonPackage rec {
-    name = "fudge-0.9.4";
-    src = fetchurl {
-      url = https://pypi.python.org/packages/source/f/fudge/fudge-0.9.4.tar.gz;
-      sha256 = "03sj2x6mpzm48swpa4hnn1gi6yilgniyjfg1ylz95wm1ijggi33w";
+    name = "fudge-0.9.6";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/f/fudge/${name}.tar.gz";
+      sha256 = "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l";
     };
-    buildInputs = [ nose nosejs ];
-    propagatedBuildInputs = [ sphinx ];
+    buildInputs = with self; [ nose nosejs ];
+    propagatedBuildInputs = with self; [ sphinx ];
   };
 
 
   funcparserlib = buildPythonPackage rec {
     name = "funcparserlib-0.3.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/f/funcparserlib/${name}.tar.gz";
       md5 = "3aba546bdad5d0826596910551ce37c0";
     };
@@ -2130,16 +3016,47 @@ rec {
     };
   };
 
+  singledispatch = buildPythonPackage rec {
+    name = "singledispatch-3.4.0.3";
+
+    propagatedBuildInputs = with self; [ six ];
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/s/singledispatch/${name}.tar.gz";
+      md5 = "af2fc6a3d6cc5a02d0bf54d909785fcb";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = http://docs.python.org/3/library/functools.html;
+    };
+  };
+
   gcutil = buildPythonPackage rec {
-    name = "gcutil-1.15.0";
+    name = "gcutil-1.16.1";
     meta.maintainers = [ stdenv.lib.maintainers.phreedom ];
 
-    src = fetchurl {
-      url = https://dl.google.com/dl/cloudsdk/release/artifacts/gcutil-1.15.0.tar.gz;
-      sha256 = "12c98ivhjr01iz6lkga574xm8p0bsil6arydvpblyw8sjkgim5sq";
+    src = pkgs.fetchurl {
+      url = https://dl.google.com/dl/cloudsdk/release/artifacts/gcutil-1.16.1.tar.gz;
+      sha256 = "00jaf7x1ji9y46fbkww2sg6r6almrqfsprydz3q2swr4jrnrsx9x";
     };
 
-    propagatedBuildInputs = [ gflags iso8601_0_1_4 ipaddr httplib2 google_apputils google_api_python_client ];
+    patchPhase = ''
+      substituteInPlace setup.py \
+        --replace "httplib2==0.8" "httplib2" \
+        --replace "iso8601==0.1.4" "iso8601"
+    '';
+
+    propagatedBuildInputs = with self; [ gflags iso8601 ipaddr httplib2 google_apputils google_api_python_client ];
+  };
+
+  gnutls = buildPythonPackage rec {
+    name = "python-gnutls";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/python-gnutls/python-gnutls-2.0.1.tar.gz";
+      sha256 = "d8fb368c6a4dd58bc6cd5e61d4a12d119c4506fd344a371b3429b3ac2623b9ac";
+    };
+
+    propagatedBuildInputs = with self; [ pkgs.gnutls ];
   };
 
   gitdb = buildPythonPackage rec {
@@ -2147,25 +3064,25 @@ rec {
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/g/gitdb/${name}.tar.gz";
       sha256 = "10rpmmlln59aq44cd5vkb77hslak5pa1rbmigg6ski5f1nn2spfy";
     };
 
-    propagatedBuildInputs = [ smmap async ];
+    propagatedBuildInputs = with self; [ smmap async ];
   };
 
   GitPython = buildPythonPackage rec {
     name = "GitPython-0.3.2";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/G/GitPython/GitPython-0.3.2.RC1.tar.gz";
       sha256 = "1q4lc2ps12l517mmrxc8iq6gxyhj6d77bnk1p7mxf38d99l8crzx";
     };
 
-    buildInputs = [ nose ];
-    propagatedBuildInputs = [ gitdb ];
+    buildInputs = with self; [ nose ];
+    propagatedBuildInputs = with self; [ gitdb ];
   };
 
   googlecl = buildPythonPackage rec {
@@ -2173,51 +3090,52 @@ rec {
     name    = "googlecl-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://googlecl.googlecode.com/files/${name}.tar.gz";
       sha256 = "0nnf7xkr780wivr5xnchfcrahlzy9bi2dxcs1w1bh1014jql0iha";
     };
 
     meta = with stdenv.lib; {
-      description = "Brings Google services to the command line.";
-      homepage    = "https://code.google.com/p/googlecl/";
+      description = "Brings Google services to the command line";
+      homepage    = https://code.google.com/p/googlecl/;
       license     = licenses.asl20;
       maintainers = with maintainers; [ lovek323 ];
       platforms   = platforms.unix;
     };
 
-    propagatedBuildInputs = [ gdata ];
+    propagatedBuildInputs = with self; [ gdata ];
   };
 
   gtimelog = buildPythonPackage rec {
     name = "gtimelog-${version}";
     version = "0.9.1";
-    
+
     disabled = isPy26;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/gtimelog/gtimelog/archive/${version}.tar.gz";
       sha256 = "0qk8fv8cszzqpdi3wl9vvkym1jil502ycn6sic4jrxckw5s9jsfj";
     };
-    
+
+    buildInputs = [ pkgs.glibcLocales ];
+
     preBuild = ''
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
       export LC_ALL="en_US.UTF-8"
     '';
 
     # TODO: AppIndicator
-    propagatedBuildInputs = [ pkgs.gobjectIntrospection pygobject3 pkgs.makeWrapper pkgs.gtk3 ];
+    propagatedBuildInputs = with self; [ pkgs.gobjectIntrospection pygobject3 pkgs.makeWrapper pkgs.gtk3 ];
 
     checkPhase = ''
       substituteInPlace runtests --replace "/usr/bin/env python" "${python}/bin/${python.executable}"
       ./runtests
     '';
-    
+
     preFixup = ''
         wrapProgram $out/bin/gtimelog \
           --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
           --prefix LD_LIBRARY_PATH ":" "${pkgs.gtk3}/lib" \
-     
+
     '';
 
     meta = with stdenv.lib; {
@@ -2229,10 +3147,34 @@ rec {
     };
   };
 
+  hovercraft = buildPythonPackage rec {
+    disabled = ! isPy3k;
+    name = "hovercraft-${version}";
+    version = "2.0b1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/h/hovercraft/${name}.zip";
+      sha256 = "1l88xp563miwwkahil1sxn4kz9khjcx6z85j8d6mq8gjc8rxz3j6";
+    };
+
+    propagatedBuildInputs = with self; [ docutils lxml manuel pygments svg-path watchdog ];
+
+    # one test assumes we have docutils 0.12
+    # TODO: enable tests after upgrading docutils to 0.12
+    doCheck = false;
+
+    meta = {
+      description = "A tool to make impress.js presentations from reStructuredText";
+      homepage = https://github.com/regebro/hovercraft;
+      license = licenses.mit;
+      maintainers = [ maintainers.goibhniu ];
+    };
+  };
+
   itsdangerous = buildPythonPackage rec {
     name = "itsdangerous-0.24";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/i/itsdangerous/${name}.tar.gz";
       sha256 = "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb";
     };
@@ -2243,59 +3185,144 @@ rec {
     };
   };
 
-  # TODO: this shouldn't use a buildPythonPackage
-  koji = buildPythonPackage (rec {
-    name = "koji-1.8";
-    meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
-    disabled = isPy3k;
+  jsonpatch = buildPythonPackage rec {
+    name = "jsonpatch-1.8";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/j/jsonpatch/jsonpatch-1.8.tar.gz";
+      sha256 = "0xhp6prvk219vnzixbj231wymd458nqbnmsf5fn4252092prvig5";
+    };
+
+    propagatedBuildInputs = with self; [ six jsonpointer ];
 
-    src = fetchurl {
-      url = "https://fedorahosted.org/released/koji/koji-1.8.0.tar.bz2";
-      sha256 = "10dph209h4jgajb5jmbjhqy4z4hd22i7s2d93vm3ikdf01i8iwf1";
+    meta = {
+      description = "Apply JSON-Patches (RFC 6902)";
+      homepage = "https://github.com/stefankoegl/python-json-patch";
+      license = stdenv.lib.licenses.bsd3;
+      platforms = stdenv.lib.platforms.all;
     };
+  };
 
-    configurePhase = ":";
-    buildPhase = ":";
-    installPhase = "make install DESTDIR=$out/ && cp -R $out/nix/store/*/* $out/ && rm -rf $out/nix";
-    doCheck = false;
-    propagatedBuildInputs = [ pythonPackages.pycurl ];
+  jsonpointer = buildPythonPackage rec {
+    name = "jsonpointer-1.4";
 
-  });
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/j/jsonpointer/jsonpointer-1.4.tar.gz";
+      sha256 = "1d0555smqwdbi0nm48hyqzywb9m2jlz5izgv56ll3zk7viz3b7fb";
+    };
+
+    #propagatedBuildInputs = with self; [ six jsonpointer ];
+
+    meta = {
+      description = "Identify specific nodes in a JSON document (RFC 6901)";
+      homepage = "https://github.com/stefankoegl/python-json-pointer";
+      license = stdenv.lib.licenses.bsd3;
+      platforms = stdenv.lib.platforms.all;
+    };
+  };
+
+  jsonwatch = buildPythonPackage rec {
+    name = "jsonwatch-0.2.0";
+
+    disabled = isPyPy; # doesn't find setuptools
+
+    src = pkgs.fetchurl {
+      url = "https://github.com/dbohdan/jsonwatch/archive/v0.2.0.tar.gz";
+      sha256 = "04b616ef97b9d8c3887004995420e52b72a4e0480a92dbf60aa6c50317261e06";
+    };
+
+    propagatedBuildInputs = with self; [ six ];
+
+    meta = {
+      description = "Like watch -d but for JSON";
+      longDescription = ''
+        jsonwatch is a command line utility with which you can track changes in
+        JSON data delivered by a shell command or a web (HTTP/HTTPS) API.
+        jsonwatch requests data from the designated source repeatedly at a set
+        interval and displays the differences when the data changes. It is
+        similar in its behavior to how watch(1) with the -d switch works
+        for plain-text data.
+      '';
+      homepage = "https://github.com/dbohdan/jsonwatch";
+      license = stdenv.lib.licenses.mit;
+      platforms = stdenv.lib.platforms.all;
+    };
+  };
 
   logilab_astng = buildPythonPackage rec {
     name = "logilab-astng-0.24.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://download.logilab.org/pub/astng/${name}.tar.gz";
       sha256 = "0np4wpxyha7013vkkrdy54dvnil67gzi871lg60z8lap0l5h67wn";
     };
 
-    propagatedBuildInputs = [ logilab_common ];
+    propagatedBuildInputs = with self; [ logilab_common ];
   };
 
+  mailchimp = buildPythonPackage rec {
+
+    version = "2.0.9";
+    name = "mailchimp-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/m/mailchimp/mailchimp-${version}.tar.gz";
+      sha256 = "0351ai0jqv3dzx0xxm1138sa7mb42si6xfygl5ak8wnfc95ff770";
+    };
+
+    # Test fails because specific version of docopt is searched
+    # (Possible fix: Needs upstream patching in the library)
+    doCheck = false;
+
+    buildInputs = with self; [ docopt ];
+
+    propagatedBuildInputs = with self; [ requests ];
+
+    meta = {
+      description = "A CLI client and Python API library for the MailChimp email platform";
+      homepage = "http://apidocs.mailchimp.com/api/2.0/";
+      license = stdenv.lib.licenses.mit;
+    };
+  };
 
   logster = buildPythonPackage {
     name = "logster-7475c53822";
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = git://github.com/etsy/logster;
       rev = "7475c53822";
       sha256 = "1ls007qmziwb50c5iikxhqin0xbn673gbd25m5k09861435cknvr";
     };
   };
 
+  pathtools = buildPythonPackage rec {
+    name = "pathtools-${version}";
+    version = "0.1.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pathtools/${name}.tar.gz";
+      sha256 = "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw";
+    };
+
+    meta = {
+      description = "Pattern matching and various utilities for file systems paths";
+      homepage = http://github.com/gorakhargosh/pathtools;
+      license = licenses.mit;
+      maintainers = [ maintainers.goibhniu ];
+    };
+  };
 
   paver = buildPythonPackage rec {
     version = "1.2.2";
     name    = "Paver-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://pypi.python.org/packages/source/P/Paver/Paver-${version}.tar.gz";
       sha256 = "0lix9d33ndb3yk56sm1zlj80fbmxp0w60yk0d9pr2xqxiwi88sqy";
     };
 
-    buildInputs = [ cogapp mock virtualenv ];
+    buildInputs = with self; [ cogapp mock virtualenv ];
 
-    propagatedBuildInputs = [ nose ];
+    propagatedBuildInputs = with self; [ nose ];
 
     # the tests do not pass
     doCheck = false;
@@ -2308,11 +3335,28 @@ rec {
     };
   };
 
+  passlib = buildPythonPackage rec {
+    version = "1.6.2";
+    name    = "passlib-${version}";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/p/passlib/passlib-${version}.tar.gz";
+      md5    = "2f872ae7c72ca338634c618f2cff5863";
+    };
+
+    buildInputs = with self; [ nose pybcrypt];
+
+    meta = with stdenv.lib; {
+      description = "A password hashing library for Python";
+      homepage    = https://code.google.com/p/passlib/;
+    };
+  };
+
 
   peppercorn = buildPythonPackage rec {
     name = "peppercorn-0.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/peppercorn/${name}.tar.gz";
       md5 = "464d6f2342eaf704dfb52046c1f5c320";
     };
@@ -2327,32 +3371,63 @@ rec {
   };
 
   pew = buildPythonPackage rec {
-    name = "pew-0.1.9";
+    name = "pew-0.1.14";
+    namePrefix = "";
 
-    src = fetchurl {
+    disabled = pythonOlder "3.4"; # old versions require backported libraries
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pew/${name}.tar.gz";
-      md5 = "90a82400074b50a9e73c3045ed9ac217";
+      md5 = "0a06ab0885b39f1ef3890893942f3225";
     };
 
-    propagatedBuildInputs = [ virtualenv virtualenv-clone ];
+    propagatedBuildInputs = with self; [ virtualenv virtualenv-clone ];
 
     meta = with stdenv.lib; {
       description = "Tools to manage multiple virtualenvs written in pure python, a virtualenvwrapper rewrite";
       license = licenses.mit;
       platforms = platforms.all;
+      maintainers = [ maintainers.berdario ];
     };
   };
 
+  poppler-qt4 = buildPythonPackage rec {
+    name = "poppler-qt4-${version}";
+    version = "0.18.1";
+    disabled = isPy3k || isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/python-poppler-qt4/" +
+            "python-poppler-qt4-${version}.tar.gz";
+      md5 = "9c4c5a59b878aed78e96a6ae58c6c185";
+    };
+
+    propagatedBuildInputs = [ pkgs.pyqt4 pkgs.pkgconfig pkgs.poppler_qt4 ];
+
+    preBuild = "${python}/bin/${python.executable} setup.py build_ext" +
+               " --include-dirs=${pkgs.poppler_qt4}/include/poppler/";
+
+    meta = with stdenv.lib; {
+      description = "A Python binding to Poppler-Qt4";
+      longDescription = ''
+        A Python binding to Poppler-Qt4 that aims for completeness
+        and for being actively maintained.
+      '';
+      license = licenses.lgpl21Plus;
+      maintainers = [ maintainers.sepi ];
+      platforms = platforms.all;
+    };
+  };
 
   pudb = buildPythonPackage rec {
     name = "pudb-2013.3.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pudb/${name}.tar.gz";
       md5 = "063030763bf914166a0b2bc8c011143b";
     };
 
-    propagatedBuildInputs = [ pythonPackages.pygments pythonPackages.urwid ];
+    propagatedBuildInputs = with self; [ self.pygments self.urwid ];
 
     meta = with stdenv.lib; {
       description = "A full-screen, console-based Python debugger";
@@ -2365,17 +3440,17 @@ rec {
   pyramid = buildPythonPackage rec {
     name = "pyramid-1.5.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid/${name}.tar.gz";
       md5 = "8a1ab3b773d8e22437828f7df22852c1";
     };
-    
+
     preCheck = ''
       # test is failing, see https://github.com/Pylons/pyramid/issues/1405
       rm pyramid/tests/test_response.py
     '';
 
-    buildInputs = [
+    buildInputs = with self; [
       docutils
       virtualenv
       webtest
@@ -2383,7 +3458,7 @@ rec {
       zope_interface
     ] ++ optional isPy26 unittest2;
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       paste_deploy
       repoze_lru
       repoze_sphinx_autointerface
@@ -2407,12 +3482,12 @@ rec {
   pyramid_beaker = buildPythonPackage rec {
     name = "pyramid_beaker-0.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_beaker/${name}.tar.gz";
       md5 = "acb863517a98b90b5f29648ce55dd563";
     };
 
-    propagatedBuildInputs = [ beaker pyramid ];
+    propagatedBuildInputs = with self; [ beaker pyramid ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2429,7 +3504,7 @@ rec {
       md5 = "5bb5938356dfd13fce06e095f132e137";
     };
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       chameleon
       pyramid
       zope_interface
@@ -2445,13 +3520,13 @@ rec {
   pyramid_jinja2 = buildPythonPackage rec {
     name = "pyramid_jinja2-1.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_jinja2/${name}.zip";
       md5 = "a6728117cad24749ddb39d2827cd9033";
     };
 
-    buildInputs = [ webtest ];
-    propagatedBuildInputs = [ jinja2 pyramid ];
+    buildInputs = with self; [ webtest ];
+    propagatedBuildInputs = with self; [ jinja2 pyramid ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2463,38 +3538,38 @@ rec {
   pyramid_debugtoolbar = buildPythonPackage rec {
     name = "pyramid_debugtoolbar-1.0.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_debugtoolbar/${name}.tar.gz";
       sha256 = "1vnzg1qnnyisv7znxg7pasayfyr3nz7rrs5nqr4fmdgwj9q2pyv0";
     };
 
-    buildInputs = [ ];
-    propagatedBuildInputs = [ pyramid pyramid_mako ];
+    buildInputs = with self; [ ];
+    propagatedBuildInputs = with self; [ pyramid pyramid_mako ];
   };
 
 
   pyramid_mako = buildPythonPackage rec {
     name = "pyramid_mako-0.3.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_mako/${name}.tar.gz";
       sha256 = "00811djmsc4rz20kpy2paam05fbx6dmrv2i5jf90f6xp6zw4isy6";
     };
 
-    buildInputs = [ webtest ];
-    propagatedBuildInputs = [ pyramid Mako ];
+    buildInputs = with self; [ webtest ];
+    propagatedBuildInputs = with self; [ pyramid Mako ];
   };
 
 
   pyramid_exclog = buildPythonPackage rec {
     name = "pyramid_exclog-0.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_exclog/${name}.tar.gz";
       md5 = "05df86758b0d30ee6f8339ff36cef7a0";
     };
 
-    propagatedBuildInputs = [ pyramid ];
+    propagatedBuildInputs = with self; [ pyramid ];
 
     meta = {
       maintainers = [
@@ -2509,7 +3584,7 @@ rec {
   pyramid_tm = buildPythonPackage rec {
     name = "pyramid_tm-0.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_tm/${name}.tar.gz";
       md5 = "6dc917d262c69366630c542bd21859a3";
     };
@@ -2517,7 +3592,7 @@ rec {
     # tests are failing in version 0.7 but are fixed in trunk
     doCheck = false;
 
-    propagatedBuildInputs = [ transaction pyramid ];
+    propagatedBuildInputs = with self; [ transaction pyramid ];
     meta = {
       maintainers = [
         stdenv.lib.maintainers.garbas
@@ -2533,12 +3608,12 @@ rec {
     name = "pyramid_multiauth-${version}";
     version = "0.3.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pyramid_multiauth/${name}.tar.gz";
       md5 = "044e423abc4fb76937ac0c21c1205e9c";
     };
 
-    propagatedBuildInputs = [ pyramid ];
+    propagatedBuildInputs = with self; [ pyramid ];
 
     meta = with stdenv.lib; {
       description = "Authentication policy for Pyramid that proxies to a stack of other authentication policies";
@@ -2546,17 +3621,29 @@ rec {
     };
   };
 
+  pyramid_hawkauth = buildPythonPackage rec {
+    name = "pyramidhawkauth-${version}";
+    version = "0.1.0";
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/pyramid_hawkauth.git;
+      rev = "refs/tags/v${version}";
+      sha256 = "1ic7xl72qnz382xaqhcy9ql17gx7pxbs78znp8xr66sp3dcx2s3c";
+    };
+
+    propagatedBuildInputs = with self; [ pyramid hawkauthlib tokenlib webtest ];
+  };
+
   radicale = buildPythonPackage rec {
     name = "radicale-${version}";
     namePrefix = "";
-    version = "0.9b1";
+    version = "0.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/R/Radicale/Radicale-${version}.tar.gz";
-      sha256 = "3a8451909de849f173f577ddec0a085f19040dbb6aa13d5256208a0f8e11d88d";
+      sha256 = "77bf813fd26f0d359c1a7b7bcce9b842b4503c5516989a4a0a4f648e299e41f7";
     };
 
-    propagatedBuildInputs = with pythonPackages; [
+    propagatedBuildInputs = with self; [
       flup
       ldap
       sqlalchemy
@@ -2566,6 +3653,7 @@ rec {
 
     meta = {
       homepage = "http://www.radicale.org/";
+      description = "CalDAV CardDAV server";
       longDescription = ''
         The Radicale Project is a complete CalDAV (calendar) and CardDAV
         (contact) server solution. Calendars and address books are available for
@@ -2581,7 +3669,7 @@ rec {
   raven = buildPythonPackage rec {
     name = "raven-3.4.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/raven/${name}.tar.gz";
       md5 = "6a9264133bf646149ffb9118d81445be";
     };
@@ -2599,12 +3687,12 @@ rec {
   hypatia = buildPythonPackage rec {
     name = "hypatia-0.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/h/hypatia/${name}.tar.gz";
       md5 = "d74c6dda31ff459a39fa5da9e98f2425";
     };
 
-    buildInputs = [ zope_interface zodb ];
+    buildInputs = with self; [ zope_interface zodb ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2615,12 +3703,12 @@ rec {
   zope_copy = buildPythonPackage rec {
     name = "zope.copy-4.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.copy/${name}.zip";
       md5 = "36aa2c96dec4cfeea57f54da2b733eb9";
     };
 
-    buildInputs = [ zope_interface zope_location zope_schema ];
+    buildInputs = with self; [ zope_interface zope_location zope_schema ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2631,32 +3719,43 @@ rec {
   statsd = buildPythonPackage rec {
     name = "statsd-2.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/statsd/${name}.tar.gz";
       md5 = "476ef5b9004f6e2cb25c7da440bb53d0";
     };
 
-    buildInputs = [ ];
+    buildInputs = with self; [ ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
     };
   };
 
+  py3status = buildPythonPackage rec {
+    name = "py3status-2.3";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/py3status/${name}.tar.gz";
+      md5 = "89ad395268c7791ff5d36412b1efeeb9";
+    };
+    propagatedBuildInputs = with self; [ requests2 ];
+    meta = {
+      maintainers = [ stdenv.lib.maintainers.garbas ];
+    };
+  };
 
   pyramid_zodbconn = buildPythonPackage rec {
     name = "pyramid_zodbconn-0.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_zodbconn/${name}.tar.gz";
       md5 = "3c7746a227fbcda3e138ab8bfab7700b";
     };
-    
+
     # should be fixed in next release
     doCheck = false;
 
-    buildInputs = [ pyramid mock ];
-    propagatedBuildInputs = [ zodb zodburi ];
+    buildInputs = with self; [ pyramid mock ];
+    propagatedBuildInputs = with self; [ zodb zodburi ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2667,13 +3766,13 @@ rec {
   pyramid_mailer = buildPythonPackage rec {
     name = "pyramid_mailer-0.13";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyramid_mailer/${name}.tar.gz";
       md5 = "43800c7c894097a23140da58e3638c93";
     };
 
-    buildInputs = [ pyramid transaction ];
-    propagatedBuildInputs = [ repoze_sendmail ];
+    buildInputs = with self; [ pyramid transaction ];
+    propagatedBuildInputs = with self; [ repoze_sendmail ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2683,7 +3782,7 @@ rec {
   pyrtlsdr = buildPythonPackage rec {
     name = "pyrtlsdr-0.2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyrtlsdr/${name}.zip";
       md5 = "646336675a00d38e6f54e77a17011b95";
     };
@@ -2705,12 +3804,12 @@ rec {
   repoze_sendmail = buildPythonPackage rec {
     name = "repoze.sendmail-4.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/repoze.sendmail/${name}.tar.gz";
       md5 = "81d15f1f03cc67d6f56f2091c594ef57";
     };
 
-    buildInputs = [ transaction ];
+    buildInputs = with self; [ transaction ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2721,24 +3820,24 @@ rec {
   zodburi = buildPythonPackage rec {
     name = "zodburi-2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zodburi/${name}.tar.gz";
       md5 = "7876893829c2f784506c80d49f861b67";
     };
 
-    buildInputs = [ zodb mock ZEO ];
+    buildInputs = with self; [ zodb mock ZEO ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
     };
   };
-  
-  ZEO = pythonPackages.buildPythonPackage rec {
+
+  ZEO = self.buildPythonPackage rec {
     name = "ZEO-4.0.0";
 
-    propagatedBuildInputs = [ random2 zodb six transaction persistent zc_lockfile zconfig zdaemon zope_interface ];
+    propagatedBuildInputs = with self; [ random2 zodb six transaction persistent zc_lockfile zconfig zdaemon zope_interface ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/Z/ZEO/${name}.tar.gz";
       md5 = "494d8320549185097ba4a6b6b76017d6";
     };
@@ -2747,11 +3846,13 @@ rec {
       homepage = https://pypi.python.org/pypi/ZEO;
     };
   };
-  
-  random2 = pythonPackages.buildPythonPackage rec {
+
+  random2 = self.buildPythonPackage rec {
     name = "random2-1.0.1";
 
-    src = fetchurl {
+    doCheck = !isPyPy;
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/random2/${name}.zip";
       md5 = "48a0a86fe00e447212d0095de8cf3e21";
     };
@@ -2763,15 +3864,15 @@ rec {
     rev = "089818bc61c3dc5eca023254e37a280b041ea8cc";
     name = "substanced-${rev}";
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       inherit rev;
       url = "https://github.com/Pylons/substanced.git";
       sha256 = "17s7sdvydw9a9d2d36c70lq962ryny3dv9nzdxqpfvwiry9iy3jx";
     };
 
-    buildInputs = [ mock ];
+    buildInputs = with self; [ mock ];
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       pyramid
       pytz
       zodb
@@ -2798,10 +3899,28 @@ rec {
   };
 
 
+  svg-path = buildPythonPackage rec {
+    name = "svg.path-${version}";
+    version = "2.0b1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/s/svg.path/${name}.zip";
+      sha256 = "038x4wqkbvcs71x6n6kzr4kn99csyv8v4gqzssr8pqylqpxi56bm";
+    };
+
+    meta = {
+      description = "SVG path objects and parser";
+      homepage = https://github.com/regebro/svg.path;
+      license = licenses.cc0;
+      maintainers = [ maintainers.goibhniu ];
+    };
+  };
+
+
   repoze_lru = buildPythonPackage rec {
     name = "repoze.lru-0.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/repoze.lru/${name}.tar.gz";
       md5 = "2c3b64b17a8e18b405f55d46173e14dd";
     };
@@ -2820,12 +3939,12 @@ rec {
   repoze_sphinx_autointerface = buildPythonPackage rec {
     name = "repoze.sphinx.autointerface-0.7.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/repoze.sphinx.autointerface/${name}.tar.gz";
       md5 = "f2fee996ae28dc16eb48f1a3e8f64801";
     };
 
-    propagatedBuildInputs = [ zope_interface sphinx ];
+    propagatedBuildInputs = with self; [ zope_interface sphinx ];
 
     meta = {
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -2838,7 +3957,7 @@ rec {
     version = "0.3a";
     name = "rtmidi-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://chrisarndt.de/projects/python-rtmidi/download/python-${name}.tar.bz2";
       sha256 = "0d2if633m3kbiricd5hgn1csccd8xab6lnab1bq9prdr9ks9i8h6";
     };
@@ -2847,7 +3966,7 @@ rec {
       sed -i "/use_setuptools/d" setup.py
     '';
 
-    buildInputs = [ pkgs.alsaLib pkgs.jack2 ];
+    buildInputs = with self; [ pkgs.alsaLib pkgs.jack2 ];
 
     meta = with stdenv.lib; {
       description = "A Python wrapper for the RtMidi C++ library written with Cython";
@@ -2857,12 +3976,34 @@ rec {
     };
   };
 
+  watchdog = buildPythonPackage rec {
+    name = "watchdog-${version}";
+    version = "0.8.3";
+
+    propagatedBuildInputs = with self; [ argh pathtools pyyaml ];
+
+    doCheck = false;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/w/watchdog/${name}.tar.gz";
+      sha256 = "0qj1vqszxwfx6d1s66s96jmfmy2j94bywxiqdydh6ikpvcm8hrby";
+    };
+
+    meta = {
+      description = "Python API and shell utilities to monitor file system events";
+      homepage = http://github.com/gorakhargosh/watchdog;
+      license = licenses.asl20;
+      maintainers = [ maintainers.goibhniu ];
+    };
+  };
+
+
   zope_tales = buildPythonPackage rec {
     name = "zope.tales-4.0.2";
 
-    propagatedBuildInputs = [ zope_interface six zope_testrunner ];
+    propagatedBuildInputs = with self; [ zope_interface six zope_testrunner ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/z/zope.tales/${name}.zip";
       md5 = "902b03a5f9774f6e2decf3f06d18a09d";
     };
@@ -2872,12 +4013,12 @@ rec {
   zope_deprecation = buildPythonPackage rec {
     name = "zope.deprecation-3.5.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.deprecation/${name}.tar.gz";
       md5 = "836cfea5fad548cd5a0d9af1300ec05e";
     };
 
-    buildInputs = [ zope_testing ];
+    buildInputs = with self; [ zope_testing ];
 
     meta = {
       maintainers = [
@@ -2892,7 +4033,7 @@ rec {
   venusian = buildPythonPackage rec {
     name = "venusian-1.0a7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/v/venusian/${name}.tar.gz";
       md5 = "6f67506dd3cf77116f1c01682a6c3f27";
     };
@@ -2913,12 +4054,12 @@ rec {
   chameleon = buildPythonPackage rec {
     name = "Chameleon-2.15";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/C/Chameleon/${name}.tar.gz";
       md5 = "0214647152fcfcb9ce357624f8f9f203";
     };
 
-    buildInputs = [] ++ optionals isPy26 [ ordereddict unittest2 ];
+    buildInputs = with self; [] ++ optionals isPy26 [ ordereddict unittest2 ];
 
     # TODO: https://github.com/malthe/chameleon/issues/139
     doCheck = false;
@@ -2932,10 +4073,27 @@ rec {
     };
   };
 
+  ddt = buildPythonPackage (rec {
+    name = "ddt-1.0.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/ddt/${name}.tar.gz";
+      md5 = "29688456f9ee42d09d7d7c864ce6e17b";
+    };
+
+    meta = {
+      description = "Data-Driven/Decorated Tests, a library to multiply test cases";
+
+      homepage = https://github.com/txels/ddt;
+
+      license = stdenv.lib.licenses.mit;
+    };
+  });
+
   distutils_extra = buildPythonPackage rec {
     name = "distutils-extra-2.26";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://launchpad.net/python-distutils-extra/trunk/2.26/+download/python-${name}.tar.gz";
       md5 = "7caded30a45907b5cdb10ac4182846eb";
     };
@@ -2947,15 +4105,15 @@ rec {
   };
 
   deluge = buildPythonPackage rec {
-    name = "deluge-1.3.6";
+    name = "deluge-1.3.11";
 
-    src = fetchurl {
-      url = "http://download.deluge-torrent.org/source/${name}.tar.gz";
-      md5 = "33557678bf2f320de670ddaefaea009d";
+    src = pkgs.fetchurl {
+      url = "http://download.deluge-torrent.org/source/${name}.tar.bz2";
+      sha256 = "16681sg7yi03jqyifhalnw4vavb8sj94cisldal7nviai8dz9qc3";
     };
 
-    propagatedBuildInputs = with pkgs; [
-      pyGtkGlade libtorrentRasterbar twisted Mako chardet pyxdg pyopenssl modules.curses
+    propagatedBuildInputs = with self; [
+      pyGtkGlade pkgs.libtorrentRasterbar twisted Mako chardet pyxdg self.pyopenssl modules.curses
     ];
 
     postInstall = ''
@@ -2976,7 +4134,7 @@ rec {
   pyxdg = buildPythonPackage rec {
     name = "pyxdg-0.25";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyxdg/${name}.tar.gz";
       md5 = "bedcdb3a0ed85986d40044c87f23477c";
     };
@@ -2995,7 +4153,7 @@ rec {
   chardet = buildPythonPackage rec {
     name = "chardet-2.1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/chardet/${name}.tar.gz";
       md5 = "295367fd210d20f3febda615a88e1ef0";
     };
@@ -3008,15 +4166,34 @@ rec {
     };
   };
 
-  django = django_1_6;
+  django = self.django_1_7;
+
+  django_1_7 = buildPythonPackage rec {
+    name = "Django-${version}";
+    version = "1.7.7";
+    disabled = pythonOlder "2.7";
+
+    src = pkgs.fetchurl {
+      url = "http://www.djangoproject.com/m/releases/1.7/${name}.tar.gz";
+      sha256 = "0crfpnf246c25887by2fjlxinp4rnhya4ksqfydcls9m0s9gh5j8";
+    };
+
+    # error: invalid command 'test'
+    doCheck = false;
+
+    meta = {
+      description = "A high-level Python Web framework";
+      homepage = https://www.djangoproject.com/;
+    };
+  };
 
   django_1_6 = buildPythonPackage rec {
     name = "Django-${version}";
-    version = "1.6.6";
+    version = "1.6.11";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.djangoproject.com/m/releases/1.6/${name}.tar.gz";
-      sha256 = "143yp984n8a2bs1dflxjp1s7skmji0cwkw05s9ikbfikwmabsv2k";
+      sha256 = "0misvia78c14y07zs5xsb9lv54q0v217jpaindrmhhw4wiryal3y";
     };
 
     # error: invalid command 'test'
@@ -3030,11 +4207,11 @@ rec {
 
   django_1_5 = buildPythonPackage rec {
     name = "Django-${version}";
-    version = "1.5.9";
+    version = "1.5.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.djangoproject.com/m/releases/1.5/${name}.tar.gz";
-      sha256 = "1lm0pa6m9f4cd6pv239lqj32z1snf8xjbvlbh8bqihs6a1f51kj7";
+      sha256 = "1vbcvn6ncg7hq5i1w95h746vkq9lmp120vx63h3p56z5nsz7gpmk";
     };
 
     # error: invalid command 'test'
@@ -3048,11 +4225,11 @@ rec {
 
   django_1_4 = buildPythonPackage rec {
     name = "Django-${version}";
-    version = "1.4.14";
+    version = "1.4.20";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.djangoproject.com/m/releases/1.4/${name}.tar.gz";
-      sha256 = "173ci9ml2vs1z2x51wahssfn8mrmhd02varmg9kibm8z460svvc1";
+      sha256 = "1cgb23afinmbvbaryvy3yj5m40h68mq6gvadcqyv3j64cja73b2q";
     };
 
     # error: invalid command 'test'
@@ -3067,7 +4244,7 @@ rec {
   django_1_3 = buildPythonPackage rec {
     name = "Django-1.3.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.djangoproject.com/m/releases/1.3/${name}.tar.gz";
       sha256 = "12pv8y2x3fhrcrjayfm6z40r57iwchfi5r19ajs8q8z78i3z8l7f";
     };
@@ -3086,12 +4263,12 @@ rec {
     name = "django_evolution-0.6.9";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://downloads.reviewboard.org/releases/django-evolution/${name}.tar.gz";
       md5 = "c0d7d10bc41898c88b14d434c48766ff";
     };
 
-    propagatedBuildInputs = [ django_1_5 ];
+    propagatedBuildInputs = with self; [ django_1_5 ];
 
     meta = {
       description = "A database schema evolution tool for the Django web framework";
@@ -3103,7 +4280,7 @@ rec {
   django_tagging = buildPythonPackage rec {
     name = "django-tagging-0.3.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/django-tagging/${name}.tar.gz";
       md5 = "a0855f2b044db15f3f8a025fa1016ddf";
     };
@@ -3111,7 +4288,7 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
-    propagatedBuildInputs = [ django_1_3 ];
+    propagatedBuildInputs = with self; [ django_1_3 ];
 
     meta = {
       description = "A generic tagging application for Django projects";
@@ -3120,15 +4297,59 @@ rec {
   };
 
 
+  django_classytags = buildPythonPackage rec {
+    name = "django-classy-tags-${version}";
+    version = "0.6.1";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/d/django-classy-tags/${name}.tar.gz";
+      md5 = "eb686aa767ad8cf88c1fa0f400a42516";
+      sha256 = "0wxvpmjdzk0aajk33y4himn3wqjx7k0aqlka9j8ay3yfav78bdq0";
+    };
+
+    propagatedBuildInputs = with self; [ django_1_7 ];
+    
+    # tests appear to be broken on 0.6.1 at least
+    doCheck = ( version != "0.6.1" );
+
+    meta = with stdenv.lib; {
+      description = "Class based template tags for Django";
+      homepage = https://github.com/ojii/django-classy-tags;
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
+
+  django_reversion = buildPythonPackage rec {
+    name = "django-reversion-${version}";
+    version = "1.8.5";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/d/django-reversion/${name}.tar.gz";
+      md5 = "2de5a3fe82aaf505c134570f96fcc7a8";
+      sha256 = "0z8fxvxgbxfnalr5br74rsw6g42nry2q656rx7rsgmicd8n42v2r";
+    };
+
+    propagatedBuildInputs = with self; [ django_1_7 ] ++
+      (optionals (pythonOlder "2.7") [ importlib ordereddict ]);
+
+    meta = with stdenv.lib; {
+      description = "An extension to the Django web framework that provides comprehensive version control facilities";
+      homepage = https://github.com/etianen/django-reversion;
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
+
   djblets = buildPythonPackage rec {
     name = "Djblets-0.6.28";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://downloads.reviewboard.org/releases/Djblets/0.6/${name}.tar.gz";
       sha256 = "11fsi911cqkjgv9j7646ljc2fgxsdfyq44kzmv01xhysm50fn6xx";
     };
 
-    propagatedBuildInputs = [ pil django_1_3 feedparser ];
+    propagatedBuildInputs = with self; [ pil django_1_3 feedparser ];
 
     meta = {
       description = "A collection of useful extensions for Django";
@@ -3138,40 +4359,41 @@ rec {
 
 
   dulwich = buildPythonPackage rec {
-    name = "dulwich-0.8.7";
-    disabled = isPy3k || isPyPy;
+    name = "dulwich-${version}";
+    version = "0.9.8";
 
-    src = fetchurl {
-      url = "http://samba.org/~jelmer/dulwich/${name}.tar.gz";
-      sha256 = "041qp5v2x8fbwkmws6hwwiny74lavkz723dj8gwbm40b2383d8vv";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/dulwich/${name}.tar.gz";
+      sha256 = "0iwxp9n2c09wahq8bqnc5z431kq5bs75vbwl93nzwm2grj00l6lb";
     };
 
-    buildPhase = "make build";
+    # Only test dependencies
+    buildInputs = with self; [ pkgs.git gevent geventhttpclient mock fastimport ];
 
-    # For some reason "python setup.py test" doesn't work with Python 2.6.
-    # pretty sure that is about import behaviour.
-    doCheck = python.majorVersion != "2.6";
-
-    meta = {
+    meta = with stdenv.lib; {
       description = "Simple Python implementation of the Git file formats and protocols.";
       homepage = http://samba.org/~jelmer/dulwich/;
+      license = licenses.gpl2Plus;
+      maintainers = [ maintainers.koral ];
     };
   };
 
 
-  hggit = buildPythonPackage rec {
-    name = "hg-git-0.3.1";
+  hg-git = buildPythonPackage rec {
+    name = "hg-git-${version}";
+    version = "0.7.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/h/hg-git/${name}.tar.gz";
-      md5 = "4b15867a07abb0be985177581ce64cee";
+      sha256 = "1ab1phaqa8jrba6dqsf3b0lgx912j41b8dlkna9c2wxip63wvfcx";
     };
 
-    propagatedBuildInputs = [ dulwich ];
+    propagatedBuildInputs = with self; [ pkgs.mercurial dulwich ];
 
-    meta = {
+    meta = with stdenv.lib; {
       description = "Push and pull from a Git server using Mercurial.";
       homepage = http://hg-git.github.com/;
+      maintainers = [ maintainers.koral ];
     };
   };
 
@@ -3179,7 +4401,7 @@ rec {
   docutils = buildPythonPackage rec {
     name = "docutils-0.11";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/docutils/${name}.tar.gz";
       sha256 = "1jbybs5a396nrjy9m13pgvsxdwaj7jw7nsawkhl4fi1nvxm1dx4s";
     };
@@ -3189,14 +4411,14 @@ rec {
 
     meta = {
       homepage = http://docutils.sourceforge.net/;
-      description = "Docutils is an open-source text processing system for processing plaintext documentation into useful formats, such as HTML or LaTeX.";
+      description = "An open-source text processing system for processing plaintext documentation into useful formats, such as HTML or LaTeX";
     };
   };
 
   doxypy = buildPythonPackage rec {
     name = "doxypy-0.4.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://code.foosel.org/files/${name}.tar.gz";
       sha256 = "1afmb30zmy7942b53qa5vd3js883wwqqls35n8xfb3rnj0qnll8g";
     };
@@ -3213,7 +4435,7 @@ rec {
   dtopt = buildPythonPackage rec {
     name = "dtopt-0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/d/dtopt/${name}.tar.gz";
       md5 = "9a41317149e926fcc408086aedee6bab";
     };
@@ -3227,15 +4449,15 @@ rec {
 
   ecdsa = buildPythonPackage rec {
     name = "ecdsa-${version}";
-    version = "0.10";
+    version = "0.11";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/e/ecdsa/${name}.tar.gz";
-      md5 = "e95941b3bcbf1726472bb724d7478551";
+      md5 = "8ef586fe4dbb156697d756900cb41d7c";
     };
 
     # Only needed for tests
-    buildInputs = [ pkgs.openssl ];
+    buildInputs = with self; [ pkgs.openssl ];
 
     meta = {
       description = "ECDSA cryptographic signature library";
@@ -3248,12 +4470,11 @@ rec {
 
   elpy = buildPythonPackage rec {
     name = "elpy-1.0.1";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/e/elpy/elpy-1.0.1.tar.gz";
       md5 = "5453f085f7871ed8fc11d51f0b68c785";
     };
-    buildInputs = [  ];
-    propagatedBuildInputs = [ flake8 ];
+    propagatedBuildInputs = with self; [ flake8 ];
 
     doCheck = false; # there are no tests
 
@@ -3268,41 +4489,50 @@ rec {
     name = "enum-0.4.4";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/e/enum/${name}.tar.gz";
       md5 = "ce75c7c3c86741175a84456cc5bd531e";
     };
-    
+
     doCheck = !isPyPy;
 
-    buildInputs = [ ];
+    buildInputs = with self; [ ];
 
-    propagatedBuildInputs = [ ];
+    propagatedBuildInputs = with self; [ ];
 
     meta = {
       homepage = http://pypi.python.org/pypi/enum/;
-      description = "Robust enumerated type support in Python.";
+      description = "Robust enumerated type support in Python";
     };
   };
 
   enum34 = buildPythonPackage rec {
-    name = "enum34-1.0";
+    name = "enum34-${version}";
+    version = "1.0.4";
+    disabled = pythonAtLeast "3.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/e/enum34/${name}.tar.gz";
-      md5 = "9d57f5454c70c11707998ea26c1b0a7c";
+      sha256 = "0iz4jjdvdgvfllnpmd92qxj5fnfxqpgmjpvpik0jjim3lqk9zhfk";
     };
 
+    buildInputs = optional isPy26 self.ordereddict;
+
+    meta = {
+      homepage = https://pypi.python.org/pypi/enum34;
+      description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4";
+      license = "BSD";
+    };
   };
 
   epc = buildPythonPackage rec {
     name = "epc-0.0.3";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/e/epc/${name}.tar.gz";
       md5 = "04a93c0cd32b496969ead09f414dac74";
     };
 
-    propagatedBuildInputs = [ sexpdata ];
+    propagatedBuildInputs = with self; [ sexpdata ];
     doCheck = false;
 
     meta = {
@@ -3311,22 +4541,19 @@ rec {
     };
   };
 
-
   eventlet = buildPythonPackage rec {
-    name = "eventlet-0.15.1";
+    name = "eventlet-0.16.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/e/eventlet/${name}.tar.gz";
-      md5 = "7155780824bb6344651a573838416f21";
+      md5 = "58f6e5cd1bcd8ab78e32a2594aa0abad";
     };
 
-    buildInputs = [ nose httplib2  ];
-
-    propagatedBuildInputs = [ greenlet ];
+    buildInputs = with self; [ nose httplib2 pyopenssl  ];
 
-    PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
+    doCheck = false;  # too much transient errors to bother
 
-    doCheck = false; # !!! fix; tests access the network
+    propagatedBuildInputs = optionals (!isPyPy) [ self.greenlet ];
 
     meta = {
       homepage = http://pypi.python.org/pypi/eventlet/;
@@ -3334,11 +4561,49 @@ rec {
     };
   };
 
+  fastimport = buildPythonPackage rec {
+    name = "fastimport-${version}";
+    version = "0.9.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/f/fastimport/${name}.tar.gz";
+      sha256 = "0k8x7552ypx9rc14vbsvg2lc6z0r8pv9laah28pdwyynbq10825d";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = https://launchpad.net/python-fastimport;
+      description = "VCS fastimport/fastexport parser";
+      maintainers = [ maintainers.koral ];
+      license = licenses.gpl2Plus;
+    };
+  };
+
+  feedgenerator = buildPythonPackage (rec {
+    name = "feedgenerator-1.7";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/f/feedgenerator/${name}.tar.gz";
+      md5 = "92978492871342ad64e8ae0ccfcf200c";
+    };
+
+    buildInputs = [ pkgs.glibcLocales ];
+
+    preConfigure = ''
+      export LC_ALL="en_US.UTF-8"
+    '';
+
+    propagatedBuildInputs = with self; [ six pytz ];
+
+    meta = {
+      homepage = https://github.com/dmdm/feedgenerator-py3k.git;
+      description = "Standalone version of django.utils.feedgenerator,  compatible with Py3k";
+    };
+  });
 
   feedparser = buildPythonPackage (rec {
     name = "feedparser-5.1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/f/feedparser/${name}.tar.gz";
       md5 = "f2253de78085a1d5738f626fcc1d8f71";
     };
@@ -3351,23 +4616,91 @@ rec {
     };
   });
 
+  fig = buildPythonPackage rec {
+    name = "fig-1.0.1";
+    disabled = isPy3k || isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/f/fig/${name}.tar.gz";
+      md5 = "e1c82296fe2362fae21b3cb0dfee8cb2";
+    };
+
+    propagatedBuildInputs = with self; [
+      six requests2 pyyaml texttable docopt
+      (dockerpty.override {
+        src = pkgs.fetchurl {
+          url = "https://pypi.python.org/packages/source/d/dockerpty/dockerpty-0.3.2.tar.gz";
+          md5 = "1f97b24d2f4b2c345f176f91655002dd";
+        };
+      })
+      (docker.override {
+        src = pkgs.fetchurl {
+          url = "https://pypi.python.org/packages/source/d/docker-py/docker-py-0.5.3.tar.gz";
+          md5 = "809b7b8c144f5e37787e72b030ee353f";
+        };
+      })
+      (websocket_client.override {
+        src = pkgs.fetchurl {
+          url = "https://pypi.python.org/packages/source/w/websocket-client/websocket-client-0.11.0.tar.gz";
+          md5 = "fcffbb5ac10941d9ace416d14d1e3ec8";
+        };
+      })
+    ];
+
+    doCheck = false;
+
+    meta = {
+      homepage = http://www.fig.sh/;
+      description = "Fast, isolated development environments using Docker";
+      license = stdenv.lib.licenses.asl20;
+    };
+  };
+
+  filebrowser_safe = buildPythonPackage rec {
+    version = "0.3.6";
+    name = "filebrowser_safe-${version}";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/f/filebrowser_safe/${name}.tar.gz";
+      md5 = "12a1ad3a1ed6a9377e758c4fa7fee570";
+    };
+
+    meta = with stdenv.lib; {
+      description = "A snapshot of django-filebrowser for the Mezzanine CMS";
+      longDescription = ''
+        filebrowser_safe was created to provide a snapshot of the FileBrowser
+        asset manager for Django, to be referenced as a dependency for the
+        Mezzanine CMS for Django.
+
+        At the time of filebrowser_safe's creation, FileBrowser was incorrectly
+        packaged on PyPI, and had also dropped compatibility with Django 1.1 -
+        filebrowser_safe was therefore created to address these specific
+        issues.
+      '';
+      homepage = https://github.com/stephenmcd/filebrowser-safe;
+      downloadPage = https://pypi.python.org/pypi/filebrowser_safe/;
+      license = licenses.free;
+      maintainers = with maintainers; [ prikhi ];
+      platforms = platforms.linux;
+    };
+  };
 
   flake8 = buildPythonPackage (rec {
     name = "flake8-2.1.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/f/flake8/${name}.tar.gz";
       md5 = "cf326cfb88a1db6c5b29a3a6d9efb257";
     };
 
-    buildInputs = [ nose mock ];
-    propagatedBuildInputs = [ pyflakes pep8 mccabe ];
+    buildInputs = with self; [ nose mock ];
+    propagatedBuildInputs = with self; [ pyflakes pep8 mccabe ];
 
     # 3 failing tests
     #doCheck = false;
 
     meta = {
-      description = "code checking using pep8 and pyflakes.";
+      description = "Code checking using pep8 and pyflakes";
       homepage = http://pypi.python.org/pypi/flake8;
       license = licenses.mit;
       maintainers = [ stdenv.lib.maintainers.garbas ];
@@ -3378,12 +4711,12 @@ rec {
   flask = buildPythonPackage {
     name = "flask-0.10.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz";
       md5 = "378670fe456957eb3c27ddaef60b2b24";
     };
 
-    propagatedBuildInputs = [ werkzeug jinja2 ];
+    propagatedBuildInputs = with self; [ werkzeug jinja2 ];
 
     meta = {
       homepage = http://flask.pocoo.org/;
@@ -3392,47 +4725,116 @@ rec {
     };
   };
 
+  flask_cache = buildPythonPackage rec {
+    name = "Flask-Cache-0.13.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/F/Flask-Cache/${name}.tar.gz";
+      md5 = "ab82a9cd0844891ccdb54fbb93fd6c59";
+    };
+
+    propagatedBuildInputs = with self; [ werkzeug flask ];
+
+    meta = {
+      homepage = https://github.com/thadeusb/flask-cache;
+      description = "Adds cache support to your Flask application";
+      license = "BSD";
+    };
+  };
+
+  wtforms = buildPythonPackage rec {
+    version = "2.0.2";
+    name = "wtforms-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/W/WTForms/WTForms-${version}.zip";
+      md5 = "613cf723ab40537705bec02733c78d95";
+    };
+
+    propagatedBuildInputs = with self; [ ordereddict Babel ];
+
+    meta = {
+      homepage = https://github.com/wtforms/wtforms;
+      description = "A flexible forms validation and rendering library for Python";
+      license = licenses.bsd3;
+    };
+  };
+
   flexget = buildPythonPackage rec {
-    name = "FlexGet-1.2.161";
+    version = "1.2.278";
+    name = "FlexGet-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/F/FlexGet/${name}.tar.gz";
-      md5 = "f7533e7b1df49cc8027fc4a2cde0290d";
+      md5 = "9c8e41d9e59d53cf2c720661b2880719";
     };
 
-    buildInputs = [ nose ];
-    # dateutil dependancy: requirement is dateutil !=2.0 and != 2.2,
-    # dateutil_1_5 is used as it's supported, but a newer version could be used
-    propagatedBuildInputs = [ paver feedparser sqlalchemy pyyaml rpyc
+    doCheck = false;
+
+    buildInputs = with self; [ nose ];
+    propagatedBuildInputs = with self; [ paver feedparser sqlalchemy9 pyyaml rpyc
 	    beautifulsoup4 html5lib pyrss2gen pynzb progressbar jinja2 flask
-	    cherrypy requests dateutil_1_5 jsonschema python_tvrage tmdb3 ]
+	    cherrypy requests dateutil_2_1 jsonschema python_tvrage tmdb3
+      guessit pathpy apscheduler ]
 	# enable deluge and transmission plugin support, if they're installed
 	++ stdenv.lib.optional (pkgs.config.pythonPackages.deluge or false)
 	    pythonpackages.deluge
 	++ stdenv.lib.optional (pkgs.transmission != null)
-	    pythonPackages.transmissionrpc;
+	    self.transmissionrpc;
 
     meta = {
       homepage = http://flexget.com/;
-      description = "Multipurpose automation tool for content like torrents, ...";
+      description = "Multipurpose automation tool for content like torrents";
       license = stdenv.lib.licenses.mit;
       maintainers = [ stdenv.lib.maintainers.iElectric ];
     };
   };
 
+  # py3k disabled, see https://travis-ci.org/NixOS/nixpkgs/builds/48759067
+  graph-tool = if isPy3k then throw "graph-tool in Nix doesn't support py3k yet"
+    else callPackage ../development/python-modules/graph-tool/2.x.x.nix { };
+
+  grappelli_safe = buildPythonPackage rec {
+    version = "0.3.13";
+    name = "grappelli_safe-${version}";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/g/grappelli_safe/${name}.tar.gz";
+      md5 = "5c8c681a0b1df94ecd6dc0b3a8b80892";
+    };
+
+    meta = with stdenv.lib; {
+      description = "A snapshot of django-grappelli for the Mezzanine CMS";
+      longDescription = ''
+        grappelli_safe was created to provide a snapshot of the Grappelli admin
+        skin for Django, to be referenced as a dependency for the Mezzanine CMS
+        for Django.
+
+        At the time of grappelli_safe's creation, Grappelli was incorrectly
+        packaged on PyPI, and had also dropped compatibility with Django 1.1 -
+        grappelli_safe was therefore created to address these specific issues.
+      '';
+      homepage = https://github.com/stephenmcd/grappelli-safe;
+      downloadPage = http://pypi.python.org/pypi/grappelli_safe/;
+      license = licenses.free;
+      maintainers = with maintainers; [ prikhi ];
+      platforms = platforms.linux;
+    };
+  };
+
   python_tvrage = buildPythonPackage (rec {
     version = "0.4.1";
     name = "tvrage-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/python-tvrage/python-tvrage-${version}.tar.gz";
       md5 = "cdfec252158c5047b626861900186dfb";
     };
 
     # has mostly networking dependent tests
     doCheck = false;
-    propagatedBuildInputs = [ beautifulsoup ];
+    propagatedBuildInputs = with self; [ beautifulsoup ];
 
     meta = {
       homepage = https://github.com/ckreutzer/python-tvrage;
@@ -3446,13 +4848,13 @@ rec {
     version = "2.4.0";
     name = "jsonschema-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-${version}.tar.gz";
       md5 = "661f85c3d23094afbb9ac3c0673840bf";
     };
 
-    buildInputs = [ nose mock ];
-    
+    buildInputs = with self; [ nose mock ];
+
     patchPhase = ''
       substituteInPlace jsonschema/tests/test_jsonschema_test_suite.py --replace "python" "${python}/bin/${python.executable}"
     '';
@@ -3469,11 +4871,30 @@ rec {
     };
   });
 
+  falcon = buildPythonPackage (rec {
+    name = "falcon-0.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/f/falcon/${name}.tar.gz";
+      md5 = "bf9e8bdd20700f1ff7ce6397cd441fbd";
+    };
+
+    propagatedBuildInputs = with self; [ coverage ddt nose pyyaml requests2 six testtools python_mimeparse ];
+
+    meta = {
+      description = "An unladen web framework for building APIs and app backends";
+
+      homepage = http://falconframework.org;
+
+      license = stdenv.lib.licenses.asl20;
+    };
+  });
+
   flup = buildPythonPackage (rec {
     name = "flup-1.0.2";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.saddi.com/software/flup/dist/${name}.tar.gz";
       sha256 = "1nbx174g40l1z3a8arw72qz05a1qxi3didp9wm7kvkn1bxx33bab";
     };
@@ -3484,16 +4905,35 @@ rec {
     };
   });
 
+  fonttools = buildPythonPackage (rec {
+    version = "2.4";
+    name = "fonttools-${version}";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/F/FontTools/FontTools-${version}.tar.gz";
+      sha256 = "13ggkzcj34kcca6bsxjkaqsxkp2bvxxf6ijiyhq1xlyb0z37z4qa";
+    };
+
+    buildInputs = with self; [
+      numpy
+    ];
+
+    meta = {
+      homepage = "http://sourceforge.net/projects/fonttools/";
+      description = "Font file processing tools";
+    };
+  });
 
   foolscap = buildPythonPackage (rec {
     name = "foolscap-0.6.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://foolscap.lothar.com/releases/${name}.tar.gz";
       sha256 = "16cddyk5is0gjfn0ia5n2l4lhdzvbjzlx6sfpy7ddjd3d3fq7ckl";
     };
 
-    propagatedBuildInputs = [ twisted pkgs.pyopenssl ];
+    propagatedBuildInputs = [ self.twisted self.pyopenssl ];
 
     meta = {
       homepage = http://foolscap.lothar.com/;
@@ -3517,7 +4957,7 @@ rec {
   fs = buildPythonPackage rec {
     name = "fs-0.5.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://pypi.python.org/packages/source/f/fs/${name}.tar.gz";
       sha256 = "144f4yn2nvnxh2vrnmiabpwx3s637np0d1j1w95zym790d66shir";
     };
@@ -3540,25 +4980,85 @@ rec {
     name = "${baseName}-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/fuse/fuse-python-${version}.tar.gz";
       sha256 = "06rmp1ap6flh64m81j0n3a357ij2vj9zwcvvw0p31y6hz1id9shi";
     };
 
-    buildInputs = [ pkgs.pkgconfig pkgs.fuse ];
+    buildInputs = with self; [ pkgs.pkgconfig pkgs.fuse ];
 
     meta = {
-      description = "Python bindings for FUSE.";
+      description = "Python bindings for FUSE";
       license = stdenv.lib.licenses.lgpl21;
     };
   });
 
+  fusepy = buildPythonPackage rec {
+    name = "fusepy-2.0.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/f/fusepy/${name}.tar.gz";
+      sha256 = "1z0va3z1hzjw167skl21k9dsklbmr46k66j80qadibjc8vajjnda";
+    };
+
+    propagatedBuildInputs = [ pkgs.fuse ];
+
+    patchPhase = ''
+      substituteInPlace fuse.py --replace \
+        "find_library('fuse')" "'${pkgs.fuse}/lib/libfuse.so'"
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Simple ctypes bindings for FUSE";
+      longDescription = ''
+        Python module that provides a simple interface to FUSE and MacFUSE.
+        It's just one file and is implemented using ctypes.
+      '';
+      homepage = http://github.com/terencehonles/fusepy;
+      license = with licenses; isc;
+      platforms = with platforms; linux;
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
+
+  future = buildPythonPackage rec {
+    version = "v0.14.3";
+    name = "future-${version}";
+
+    src = pkgs.fetchurl {
+      url = "http://github.com/PythonCharmers/python-future/archive/${version}.tar.gz";
+      sha256 = "0hgp9kq7h4ipw8ax5xvvkyh3bkqw361d3rndvb9xix01h9j9mi3p";
+    };
+
+    propagatedBuildInputs = with self; optionals isPy26 [ importlib argparse ];
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      description = "Clean single-source support for Python 3 and 2";
+      longDescription = ''
+        python-future is the missing compatibility layer between Python 2 and
+        Python 3. It allows you to use a single, clean Python 3.x-compatible
+        codebase to support both Python 2 and Python 3 with minimal overhead.
+
+        It provides future and past packages with backports and forward ports
+        of features from Python 3 and 2. It also comes with futurize and
+        pasteurize, customized 2to3-based scripts that helps you to convert
+        either Py2 or Py3 code easily to support both Python 2 and 3 in a
+        single clean Py3-style codebase, module by module.
+      '';
+      homepage = https://python-future.org;
+      downloadPage = https://github.com/PythonCharmers/python-future/releases;
+      license = licenses.mit;
+      maintainers = with maintainers; [ prikhi ];
+      platforms = platforms.linux;
+    };
+  };
+
   futures = buildPythonPackage rec {
     name = "futures-2.1.6";
 
-    propagatedBuildInputs = with pythonPackages; [  ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/f/futures/futures-2.1.6.tar.gz";
       md5 = "cfab9ac3cd55d6c7ddd0546a9f22f453";
     };
@@ -3573,7 +5073,7 @@ rec {
   gcovr = buildPythonPackage rec {
     name = "gcovr-2.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/g/gcovr/${name}.tar.gz";
       md5 = "672db629469882b93c40016aebff50ac";
     };
@@ -3584,10 +5084,48 @@ rec {
     };
   };
 
+  gdrivefs = buildPythonPackage rec {
+    version = "0.14.3";
+    name = "gdrivefs-${version}";
+    disabled = !isPy27;
+
+    src = pkgs.fetchFromGitHub {
+      sha256 = "1ljkh1871lwzn5lhhgbmbf2hfnbnajr3ddz3q5n1kid25qb3l086";
+      rev = version;
+      repo = "GDriveFS";
+      owner = "dsoprea";
+    };
+
+    buildInputs = with self; [ gipc greenlet httplib2 six ];
+    propagatedBuildInputs = with self; [ dateutil fusepy google_api_python_client ];
+
+    patchPhase = ''
+      substituteInPlace gdrivefs/resources/requirements.txt \
+        --replace "==" ">="
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Mount Google Drive as a local file system";
+      longDescription = ''
+        GDriveFS is a FUSE wrapper for Google Drive developed. Design goals:
+        - Thread for monitoring changes via "changes" functionality of API.
+        - Complete stat() implementation.
+        - Seamlessly work around duplicate-file allowances in Google Drive.
+        - Seamlessly manage file-type versatility in Google Drive
+          (Google Doc files do not have a particular format).
+        - Allow for the same file at multiple paths.
+      '';
+      homepage = https://github.com/dsoprea/GDriveFS;
+      license = with licenses; gpl2;
+      platforms = with platforms; linux;
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
+
   genshi = buildPythonPackage {
     name = "genshi-0.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://ftp.edgewall.com/pub/genshi/Genshi-0.7.tar.gz;
       sha256 = "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x";
     };
@@ -3596,7 +5134,7 @@ rec {
     # FAIL: test_sanitize_remove_src_javascript (genshi.filters.tests.html.HTMLSanitizerTestCase)
     doCheck = false;
 
-    buildInputs = [ pkgs.setuptools ];
+    buildInputs = with self; [ pkgs.setuptools ];
 
     meta = {
       description = "Python components for parsing HTML, XML and other textual content";
@@ -3613,15 +5151,17 @@ rec {
 
   gevent = buildPythonPackage rec {
     name = "gevent-1.0.1";
-    disabled = isPy3k;
-    
-    src = fetchurl {
+    disabled = isPy3k || isPyPy;  # see https://github.com/surfly/gevent/issues/248
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/g/gevent/${name}.tar.gz";
       sha256 = "0hyzfb0gcx9pm5c2igan8y57hqy2wixrwvdjwsaivxsqs0ay49s6";
     };
 
-    buildInputs = [ pkgs.libev ];
-    propagatedBuildInputs = [ greenlet ];
+    patches = [ ../development/python-modules/gevent_sslwrap.patch ];
+
+    buildInputs = with self; [ pkgs.libev ];
+    propagatedBuildInputs = optionals (!isPyPy) [ self.greenlet ];
 
     meta = with stdenv.lib; {
       description = "Coroutine-based networking library";
@@ -3632,41 +5172,59 @@ rec {
     };
   };
 
+  geventhttpclient = buildPythonPackage rec {
+    name = "geventhttpclient-${version}";
+    version = "1.1.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/g/geventhttpclient/${name}.tar.gz";
+      sha256 = "1k7s4dnkmcfqqkmbqi0vvb2ns53r9cl2652mq20bgg65zj26j2l6";
+    };
+
+    propagatedBuildInputs = with self; [ gevent certifi backports_ssl_match_hostname_3_4_0_2 ];
+
+    meta = with stdenv.lib; {
+      homepage = http://github.com/gwik/geventhttpclient;
+      description = "HTTP client library for gevent";
+      license = licenses.mit;
+      maintainers = [ maintainers.koral ];
+    };
+  };
 
   gevent-socketio = buildPythonPackage rec {
     name = "gevent-socketio-0.3.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/g/gevent-socketio/${name}.tar.gz";
       sha256 = "1zra86hg2l1jcpl9nsnqagy3nl3akws8bvrbpgdxk15x7ywllfak";
     };
 
-    buildInputs = [ versiontools gevent-websocket mock pytest ];
-    propagatedBuildInputs = [ gevent ];
+    buildInputs = with self; [ versiontools gevent-websocket mock pytest ];
+    propagatedBuildInputs = with self; [ gevent ];
 
   };
 
   gevent-websocket = buildPythonPackage rec {
     name = "gevent-websocket-0.9.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/g/gevent-websocket/${name}.tar.gz";
       sha256 = "07rqwfpbv13mk6gg8mf0bmvcf6siyffjpgai1xd8ky7r801j4xb4";
     };
 
-    propagatedBuildInputs = [ gevent ];
+    propagatedBuildInputs = with self; [ gevent ];
 
   };
 
   genzshcomp = buildPythonPackage {
     name = "genzshcomp-0.5.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/g/genzshcomp/genzshcomp-0.5.1.tar.gz";
       md5 = "7a954f1835875002e9044fe55ed1b488";
     };
 
-    buildInputs = [ pkgs.setuptools ] ++ (optional isPy26 argparse);
+    buildInputs = with self; [ pkgs.setuptools ] ++ (optional isPy26 argparse);
 
     meta = {
       description = "automatically generated zsh completion function for Python's option parser modules";
@@ -3678,7 +5236,7 @@ rec {
   gflags = buildPythonPackage rec {
     name = "gflags-2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://python-gflags.googlecode.com/files/python-${name}.tar.gz";
       sha256 = "1mkc7315bpmh39vbn0jq237jpw34zsrjr1sck98xi36bg8hnc41i";
     };
@@ -3689,21 +5247,47 @@ rec {
     };
   };
 
+  gipc = buildPythonPackage rec {
+    name = "gipc-0.5.0";
+    disabled = !isPy26 && !isPy27;
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/g/gipc/${name}.zip";
+      sha256 = "08c35xzv7nr12d9xwlywlbyzzz2igy0yy6y52q2nrkmh5d4slbpc";
+    };
+
+    propagatedBuildInputs = with self; [ gevent ];
+
+    meta = with stdenv.lib; {
+      description = "gevent-cooperative child processes and IPC";
+      longDescription = ''
+        Usage of Python's multiprocessing package in a gevent-powered
+        application may raise problems and most likely breaks the application
+        in various subtle ways. gipc (pronunciation "gipsy") is developed with
+        the motivation to solve many of these issues transparently. With gipc,
+        multiprocessing. Process-based child processes can safely be created
+        anywhere within your gevent-powered application.
+      '';
+      homepage = http://gehrcke.de/gipc;
+      license = with licenses; mit;
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
 
   glance = buildPythonPackage rec {
     name = "glance-0.1.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/g/glance/${name}.tar.gz";
       md5 = "e733713ccd23e4a6253386a47971cfb5";
     };
 
-    buildInputs = [ nose mox ];
+    buildInputs = with self; [ nose mox ];
 
     # tests fail for python2.6
     doCheck = python.majorVersion != "2.6";
 
-    propagatedBuildInputs = [ gflags sqlalchemy webob routes eventlet ];
+    propagatedBuildInputs = with self; [ gflags sqlalchemy webob routes eventlet ];
 
     PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
 
@@ -3714,25 +5298,27 @@ rec {
   };
 
   glances = buildPythonPackage rec {
-    name = "glances-${meta.version}";
+    name = "glances-${version}";
+    version = "2.1";
+    disabled = isPyPy;
 
-    src = fetchurl {
-      url = "https://github.com/nicolargo/glances/archive/v${meta.version}.tar.gz";
-      sha256 = "19pin04whc1z4gmwv2rqa7mh08d6007r8dyrhihnxj0v35ghp5i0";
+    src = pkgs.fetchFromGitHub {
+      owner = "nicolargo";
+      repo = "glances";
+      rev = "v${version}";
+      sha256 = "1bgr7lif0bpnz39arcdrsfdy7ra4c3ay2pxz1lvh4fqxyxwp3gm6";
     };
 
-    buildInputs = [ pkgs.hddtemp ];
-
-    propagatedBuildInputs = [ psutil jinja2 modules.curses modules.curses_panel];
-
     doCheck = false;
 
+    buildInputs = with self; [ unittest2 ];
+    propagatedBuildInputs = with self; [ modules.curses modules.curses_panel psutil setuptools bottle batinfo pkgs.hddtemp pysnmp ];
+
     preConfigure = ''
-      sed -i -r -e '/data_files.append[(][(](conf|etc)_path/ietc_path="etc/glances"; conf_path="etc/glances"' setup.py;
+      sed -i 's/data_files\.append((conf_path/data_files.append(("etc\/glances"/' setup.py;
     '';
 
     meta = {
-      version = "1.7.4";
       homepage = "http://nicolargo.github.io/glances/";
       description = "Cross-platform curses-based monitoring tool";
     };
@@ -3742,37 +5328,37 @@ rec {
     name = "goobook-1.5";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://pypi.python.org/packages/source/g/goobook/${name}.tar.gz";
       sha256 = "05vpriy391l5i05ckl5ja5bswqyvl3rwrbmks9pi46w1813j7p5z";
     };
 
-    buildInputs = [ six ];
+    buildInputs = with self; [ six ];
 
     preConfigure = ''
       sed -i '/distribute/d' setup.py
     '';
 
     meta = with stdenv.lib; {
-      description = "Search your google contacts from the command-line or mutt.";
-      homepage    = "https://pypi.python.org/pypi/goobook";
+      description = "Search your google contacts from the command-line or mutt";
+      homepage    = https://pypi.python.org/pypi/goobook;
       license     = licenses.gpl3;
       maintainers = with maintainers; [ lovek323 ];
       platforms   = platforms.unix;
     };
 
-    propagatedBuildInputs = [ gdata hcs_utils keyring simplejson ];
+    propagatedBuildInputs = with self; [ gdata hcs_utils keyring simplejson ];
   };
 
   google_api_python_client = buildPythonPackage rec {
     name = "google-api-python-client-1.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://google-api-python-client.googlecode.com/files/google-api-python-client-1.2.tar.gz";
       sha256 = "0xd619w71xk4ldmikxqhaaqn985rc2hy4ljgwfp50jb39afg7crw";
     };
 
-    propagatedBuildInputs = [ httplib2 ];
+    propagatedBuildInputs = with self; [ httplib2 ];
 
     meta = with stdenv.lib; {
       description = "The core Python library for accessing Google APIs";
@@ -3782,16 +5368,26 @@ rec {
     };
   };
 
-   google_apputils = buildPythonPackage rec {
-    name = "google-apputils-0.4.0";
+  google_apputils = buildPythonPackage rec {
+    name = "google-apputils-0.4.1";
     disabled = isPy3k;
 
-    src = fetchurl {
-      url = http://pypi.python.org/packages/source/g/google-apputils/google-apputils-0.4.0.tar.gz;
-      sha256 = "18wlivnqxvx1wsw177lckpl32nmr6cq7f5nhk8r72fvjy8wynq5j";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/g/google-apputils/${name}.tar.gz";
+      sha256 = "1sxsm5q9vr44qzynj8l7p3l7ffb0zl1jdqhmmzmalkx941nbnj1b";
     };
 
-    propagatedBuildInputs = [ pytz gflags dateutil_1_5 mox ];
+    preConfigure = ''
+      sed -i '/ez_setup/d' setup.py
+    '';
+
+    propagatedBuildInputs = with self; [ pytz gflags dateutil mox ];
+
+    checkPhase = ''
+      ${python.executable} setup.py google_test
+    '';
+
+    doCheck = true;
 
     meta = with stdenv.lib; {
       description = "Google Application Utilities for Python";
@@ -3799,29 +5395,49 @@ rec {
     };
   };
 
+
   greenlet = buildPythonPackage rec {
-    name = "greenlet-0.4.3";
+    name = "greenlet-${version}";
+    version = "0.4.5";
+    disabled = isPyPy;  # builtin for pypy
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/g/greenlet/${name}.zip";
-      md5 = "a5e467a5876c415cd357c1ab9027e06c";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/g/greenlet/${name}.zip";
+      sha256 = "1gidivqcpn6i6k01bf3hgcn0m68h4b9srhpff9kgnk0c287z145r";
     };
 
-    meta = {
+    meta = with stdenv.lib; {
       homepage = http://pypi.python.org/pypi/greenlet;
       description = "Module for lightweight in-process concurrent programming";
+      license     = licenses.lgpl2;
+      platforms   = platforms.all;
     };
   };
 
+  gspread = buildPythonPackage rec {
+    version = "0.2.3";
+    name = "gspread-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/g/gspread/${name}.tar.gz";
+      md5 = "5a71e4e3fc509dc1c4d34722f102dec1";
+    };
+
+    meta = {
+      description = "Google Spreadsheets client library";
+      homepage = "https://github.com/burnash/gspread";
+      license = licenses.mit;
+    };
+  };
 
   gyp = buildPythonPackage rec {
-    rev = "1944";
+    rev = "1977";
     name = "gyp-r${rev}";
 
-    src = fetchsvn {
+    src = pkgs.fetchsvn {
       url = "http://gyp.googlecode.com/svn/trunk";
       inherit rev;
-      sha256 = "15k3ivk3jyhx4rwdf1mn6qpyrwixvy01jpkir8d14c4g9hax1dx1";
+      sha256 = "0vnr75yd3bidysiwl9lljvf1dv6v9m9xqdnx0hdgyl92w689n9j8";
     };
 
     patches = optionals pkgs.stdenv.isDarwin [
@@ -3835,15 +5451,39 @@ rec {
     };
   };
 
+  guessit = buildPythonPackage rec {
+    version = "0.9.4";
+    name = "guessit-${version}";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/g/guessit/${name}.tar.gz";
+      sha256 = "068d3dmyk4v04p2zna0340lsdnpkm10gyza62apd9akgjh9rfs48";
+    };
+
+    propagatedBuildInputs = with self; [
+      dateutil_2_1 requests stevedore babelfish pyyaml
+    ];
+
+    # A unicode test fails
+    doCheck = false;
+
+    meta = {
+      homepage = http://pypi.python.org/pypi/guessit;
+      license = stdenv.lib.licenses.lgpl3;
+      description = "A library for guessing information from video files.";
+    };
+  };
+
   gunicorn = buildPythonPackage rec {
     name = "gunicorn-19.1.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/g/gunicorn/${name}.tar.gz";
       md5 = "3d759bec3c46a680ff010775258c4c56";
     };
 
-    buildInputs = [ pytest ];
+    buildInputs = with self; [ pytest ];
 
     meta = {
       homepage = http://pypi.python.org/pypi/gunicorn;
@@ -3851,20 +5491,31 @@ rec {
     };
   };
 
+  hawkauthlib = buildPythonPackage rec {
+    name = "hawkauthlib-${version}";
+    version = "0.1.1";
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/hawkauthlib.git;
+      rev = "refs/tags/v${version}";
+      sha256 = "0b3xydii50ifs8qkgbpdlidfs2rzw63f807ahrq9flz90ahf582h";
+    };
+
+    propagatedBuildInputs = with self; [ requests webob ];
+  };
+
   hcs_utils = buildPythonPackage rec {
     name = "hcs_utils-1.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://pypi.python.org/packages/source/h/hcs_utils/${name}.tar.gz";
       sha256 = "1d2za9crkgzildx610w3zif2i8phcqhh6n8nzg3yvy2mg0s18mkl";
     };
 
     preBuild = ''
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
       export LC_ALL="en_US.UTF-8"
     '';
 
-    buildInputs = [ six ];
+    buildInputs = with self; [ six pkgs.glibcLocales ];
 
     meta = with stdenv.lib; {
       description = "Library collecting some useful snippets";
@@ -3878,12 +5529,12 @@ rec {
 
   hetzner = buildPythonPackage rec {
     name = "hetzner-${version}";
-    version = "0.7.0";
+    version = "0.7.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/RedMoonStudios/hetzner/archive/"
           + "v${version}.tar.gz";
-      sha256 = "1ldbhwy6yk18frv6n9znvdsrqfnpch4mfvc70jrpq3f9fw236src";
+      sha256 = "07jnrgy9fkh1hwgsa8491ljz9spazmifqsg92m3xnamja1536qfl";
     };
 
     # not there yet, but coming soon.
@@ -3901,13 +5552,13 @@ rec {
   htmllaundry = buildPythonPackage rec {
     name = "htmllaundry-2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/h/htmllaundry/${name}.tar.gz";
       md5 = "6db6909de76c4b259e65d90b5debdbda";
     };
 
-    buildInputs = [ nose ];
-    propagatedBuildInputs = [ six lxml ];
+    buildInputs = with self; [ nose ];
+    propagatedBuildInputs = with self; [ six lxml ];
 
     # some tests fail, probably because of changes in lxml
     # not relevant for me, if releavnt for you, fix it...
@@ -3921,18 +5572,32 @@ rec {
 
 
   html5lib = buildPythonPackage (rec {
-    name = "html5lib-0.95";
+    version = "0.999";
+    name = "html5lib-${version}";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/h/html5lib/${name}.tar.gz";
-      md5 = "fe607f9917d81763e842f818f23464ee";
+    src = pkgs.fetchurl {
+      url = "http://github.com/html5lib/html5lib-python/archive/${version}.tar.gz";
+      sha256 = "1kxl36p0csssaf37zbbc9p4h8l1s7yb1qnfv3d4nixplvrxqkybp";
     };
 
-    meta = {
-      homepage = http://code.google.com/p/html5lib/;
+    buildInputs = with self; [ nose flake8 ];
+    propagatedBuildInputs = with self; [
+      six
+    ] ++ optionals isPy26 [ ordereddict ];
+
+    checkPhase = "nosetests";
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/html5lib/html5lib-python;
+      downloadPage = https://github.com/html5lib/html5lib-python/releases;
       description = "HTML parser based on WHAT-WG HTML5 specification";
-      license = stdenv.lib.licenses.mit;
-      maintainers = [ stdenv.lib.maintainers.iElectric ];
+      longDescription = ''
+        html5lib is a pure-python library for parsing HTML. It is designed to
+        conform to the WHATWG HTML specification, as is implemented by all
+        major web browsers.
+      '';
+      license = licenses.mit;
+      maintainers = with maintainers; [ iElectric prikhi ];
     };
   });
 
@@ -3940,12 +5605,12 @@ rec {
     name = "http_signature-0.1.4";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/h/http_signature/${name}.tar.gz";
       md5 = "015061846254bd5d8c5dbc2913985153";
     };
 
-    propagatedBuildInputs = [pycrypto];
+    propagatedBuildInputs = with self; [pycrypto];
 
     meta = {
       homepage = https://github.com/atl/py-http-signature;
@@ -3957,12 +5622,12 @@ rec {
   httpbin = buildPythonPackage rec {
     name = "httpbin-0.2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/h/httpbin/${name}.tar.gz";
       md5 = "9b2bb2fab45f5fa839e9a776a64d6089";
     };
 
-    propagatedBuildInputs = [ flask markupsafe decorator itsdangerous six ];
+    propagatedBuildInputs = with self; [ flask markupsafe decorator itsdangerous six ];
 
     meta = {
       homepage = https://github.com/kennethreitz/httpbin;
@@ -3973,11 +5638,11 @@ rec {
   };
 
   httplib2 = buildPythonPackage rec {
-    name = "httplib2-0.8";
+    name = "httplib2-0.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/h/httplib2/${name}.tar.gz";
-      sha256 = "174w6rz4na1sdlfz37h95l0pkfm9igf9nqmhbd8aqh3sm7d9zrff";
+      sha256 = "1asi5wpncnc6ki3bz33mhb9xh2lrkb24y4qng8bmqnczdmm8rsir";
     };
 
     meta = {
@@ -3988,19 +5653,37 @@ rec {
     };
   };
 
+  hypothesis = pythonPackages.buildPythonPackage rec {
+    name = "hypothesis-0.7.0";
+
+    doCheck = false;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/h/hypothesis/hypothesis-0.7.0.tar.gz";
+      md5 = "0c4112bab04b71979286387b033921b5";
+    };
+
+    meta = with stdenv.lib; {
+      description = "A Python library for property based testing";
+      homepage = https://github.com/DRMacIver/hypothesis;
+      license = licenses.mpl20;
+    };
+  };
+
   httpretty = buildPythonPackage rec {
     name = "httpretty-${version}";
     version = "0.8.3";
     disabled = isPy3k;
+    doCheck = !isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/h/httpretty/${name}.tar.gz";
       md5 = "50b02560a49fe928c90c53a49791f621";
     };
 
-    buildInputs = [ tornado requests httplib2 sure nose coverage ];
+    buildInputs = with self; [ tornado requests httplib2 sure nose coverage ];
 
-    propagatedBuildInputs = [ urllib3 ];
+    propagatedBuildInputs = with self; [ urllib3 ];
 
     postPatch = ''
       sed -i -e 's/==.*$//' *requirements.txt
@@ -4021,28 +5704,67 @@ rec {
     };
   };
 
+  icalendar = buildPythonPackage rec {
+    version = "3.8.4";
+    name = "icalendar-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/i/icalendar/${name}.zip";
+      md5 = "d700e6e75613fd1ee882c4b11c58940c";
+    };
+
+    buildInputs = with self; [ setuptools ];
+    propagatedBuildInputs = with self; [ pytz ];
+
+    meta = with stdenv.lib; {
+      description = "A parser/generator of iCalendar files";
+      homepage = "http://icalendar.readthedocs.org/";
+      license = licenses.bsd2;
+      maintainers = [ maintainers.olcai ];
+    };
+  };
+
   importlib = if isPy26 then (buildPythonPackage {
     name = "importlib-1.0.2";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/i/importlib/importlib-1.0.2.tar.gz";
       md5 = "4aa23397da8bd7c7426864e88e4db7e1";
     };
     doCheck = false;
   }) else null;
 
+  influxdb = buildPythonPackage rec {
+    name = "influxdb-0.1.12";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/i/influxdb/${name}.tar.gz";
+      md5 = "6c975058ccc4df41dad8d8234c52d754";
+    };
+
+    # ImportError: No module named tests
+    doCheck = false;
+    propagatedBuildInputs = with self; [ requests ];
+
+    meta = {
+      description = "Python client for InfluxDB";
+      homepage = https://github.com/influxdb/influxdb-python;
+      license = licenses.mit;
+    };
+  };
+
   iptools = buildPythonPackage rec {
     version = "0.6.1";
     name = "iptools-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/i/iptools/iptools-${version}.tar.gz";
       md5 = "aed4045638fd40c16f8d9bb04606f700";
     };
-    
-    buildInputs = [ nose ];
+
+    buildInputs = with self; [ nose ];
 
     meta = {
-      description = "Utilities for manipulating IP addresses including a class that can be used to include CIDR network blocks in Django's INTERNAL_IPS setting.";
+      description = "Utilities for manipulating IP addresses including a class that can be used to include CIDR network blocks in Django's INTERNAL_IPS setting";
       homepage = http://pypi.python.org/pypi/iptools;
     };
   };
@@ -4052,7 +5774,7 @@ rec {
     version = "0.74";
     name = "ipy-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/I/IPy/IPy-${version}.tar.gz";
       md5 = "f4f7ddc7c5e55a47222a5cc6c0a87b6d";
     };
@@ -4071,7 +5793,7 @@ rec {
     name = "ipaddr-2.1.10";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/i/ipaddr/${name}.tar.gz";
       sha256 = "18ycwkfk3ypb1yd09wg20r7j7zq2a73d7j6j10qpgra7a7abzhyj";
     };
@@ -4083,29 +5805,30 @@ rec {
     };
   };
 
-  ipdb = buildPythonPackage {
-    name = "ipdb-0.7";
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/i/ipdb/ipdb-0.7.tar.gz";
-      md5 = "d879f9b2b0f26e0e999809585dcaec61";
+  ipdb = buildPythonPackage rec {
+    name = "ipdb-0.8";
+    disabled = isPyPy;  # setupterm: could not find terminfo database
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/i/ipdb/${name}.zip";
+      md5 = "96dca0712efa01aa5eaf6b22071dd3ed";
     };
-    propagatedBuildInputs = [ pythonPackages.ipythonLight ];
+    propagatedBuildInputs = with self; [ self.ipythonLight ];
   };
 
   ipdbplugin = buildPythonPackage {
     name = "ipdbplugin-1.4";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/i/ipdbplugin/ipdbplugin-1.4.tar.gz";
       md5 = "f9a41512e5d901ea0fa199c3f648bba7";
     };
-    propagatedBuildInputs = [ pythonPackages.nose pythonPackages.ipythonLight ];
+    propagatedBuildInputs = with self; [ self.nose self.ipythonLight ];
   };
 
-  iso8601_0_1_4 = buildPythonPackage {
-    name = "iso8601-0.1.4";
-    src = fetchurl {
-      url = https://pypi.python.org/packages/source/i/iso8601/iso8601-0.1.4.tar.gz;
-      sha256 = "03gnjxpfq0wwimqnsvz32xcngq0hrdqryn3zm8qh95hnnggwqa3s";
+  iso8601 = buildPythonPackage {
+    name = "iso8601-0.1.10";
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/i/iso8601/iso8601-0.1.10.tar.gz;
+      sha256 = "1qf01afxh7j4gja71vxv345if8avg6nnm0ry0zsk6j3030xgy4p7";
     };
 
     meta = {
@@ -4116,53 +5839,56 @@ rec {
   };
 
   jedi = buildPythonPackage (rec {
-    name = "jedi-0.8.0-final0";
+    name = "jedi-0.8.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/j/jedi/${name}.tar.gz";
-      sha256 = "0jnhwh0b1hy5cssi3n5a4j7z9pgpcckyv5s52ba4jnq5bwgdpbcf";
+      sha256 = "1a7bg159mc1la5p1zsblzpr9hmypa7nz0mpvf7dww57cgi2sw8sd";
     };
 
     meta = {
-      homepage = "https://github.com/davidhalter/jedi";
-      description = "An autocompletion tool for Python that can be used for text editors.";
+      homepage = https://github.com/davidhalter/jedi;
+      description = "An autocompletion tool for Python that can be used for text editors";
       license = licenses.lgpl3Plus;
       maintainers = [ stdenv.lib.maintainers.garbas ];
     };
   });
 
   jinja2 = buildPythonPackage rec {
-    name = "Jinja2-2.7.1";
+    name = "Jinja2-2.7.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/J/Jinja2/${name}.tar.gz";
-      sha256 = "12scn3zmmj76rzyc0axjzf6dsazyj9xgp0l46q41rjhxm23s1h2w";
+      # md5 = "b9dffd2f3b43d673802fe857c8445b1a"; # provided by pypi website.
+      sha256 = "2e24ac5d004db5714976a04ac0e80c6df6e47e98c354cb2c0d82f8879d4f8fdb";
     };
 
-    propagatedBuildInputs = [ pythonPackages.markupsafe ];
+    propagatedBuildInputs = with self; [ self.markupsafe ];
 
     meta = {
       homepage = http://jinja.pocoo.org/;
       description = "Stand-alone template engine";
-      license = "BSD";
+      license = licenses.bsd3;
       longDescription = ''
         Jinja2 is a template engine written in pure Python. It provides a
         Django inspired non-XML syntax but supports inline expressions and
         an optional sandboxed environment.
       '';
+      platforms = platforms.all;
+      maintainers = [ maintainers.pierron ];
     };
   };
 
 
   jmespath = buildPythonPackage rec {
-    name = "jmespath-0.2.1";
+    name = "jmespath-0.6.1";
 
-    src = fetchurl {
-      url = "https://pypi.python.org/packages/source/j/jmespath/jmespath-0.2.1.tar.gz";
-      md5 = "7800775aa12c6303f9ad597b6a8fa03c";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/j/jmespath/${name}.tar.gz";
+      sha256 = "1f7nxk62yifh6zwhf34w4fgwxvyls8x2daphljgrg4lh0i2sgwgr";
     };
 
-    propagatedBuildInputs = [ ply ];
+    propagatedBuildInputs = with self; [ ply ];
 
     meta = {
       homepage = "https://github.com/boto/jmespath";
@@ -4171,15 +5897,38 @@ rec {
     };
   };
 
+
+  jrnl = buildPythonPackage rec {
+    name = "jrnl-1.9.7";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/j/jrnl/${name}.tar.gz";
+      md5 = "395faff36de8a08a5bfeedbf123e9067";
+    };
+
+    propagatedBuildInputs = with self; [
+      pytz six tzlocal keyring modules.readline argparse dateutil_1_5
+      parsedatetime
+    ];
+
+    meta = with stdenv.lib; {
+      homepage = http://maebert.github.io/jrnl/;
+      description = "A simple command line journal application that stores your journal in a plain text file.";
+      license = licenses.mit;
+    };
+  };
+
+
   keyring = buildPythonPackage rec {
-    name = "keyring-3.2";
+    name = "keyring-3.3";
 
-    src = fetchurl {
-      url    = "https://pypi.python.org/packages/source/k/keyring/${name}.zip";
-      sha256 = "1flccphpyrb8y8dra2fq2s2v3fg615d77kjjmzl0gmiidabkkdqf";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/k/keyring/${name}.zip";
+      md5 = "81291e0c7337affb71442e6c7671e77f";
     };
 
-    buildInputs =
+    buildInputs = with self;
       [ fs gdata python_keyczar mock pyasn1 pycrypto pytest six ];
 
     meta = with stdenv.lib; {
@@ -4191,13 +5940,64 @@ rec {
     };
   };
 
+  kombu = buildPythonPackage rec {
+    name = "kombu-${version}";
+    version = "3.0.24";
+
+    disabled = pythonOlder "2.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/k/kombu/${name}.tar.gz";
+      sha256 = "13dzybciispin9c4znpiyvgha354mz124lgx06ksw4vic0vh9zxr";
+      md5 = "37c8b5084ac83b8a6f5ff9f157cac0e9";
+    };
+
+    buildInputs = with self; optionals (!isPy3k) [ anyjson mock unittest2 nose ];
+
+    propagatedBuildInputs = with self; [ amqp ] ++
+      (optionals (pythonOlder "2.7") [ importlib ordereddict ]);
+
+    # tests broken on python 2.6? https://github.com/nose-devs/nose/issues/806
+    # tests also appear to depend on anyjson, which has Py3k problems
+    doCheck = (pythonAtLeast "2.7") && !isPy3k ;
+
+    meta = with stdenv.lib; {
+      description = "Messaging library for Python";
+      homepage    = "http://github.com/celery/kombu";
+      license     = licenses.bsd3;
+    };
+  };
+
+  konfig = buildPythonPackage rec {
+    name = "konfig-${version}";
+    version = "0.9";
+
+    # konfig unconditionaly depend on configparser, even if it is part of
+    # the standard library in python 3.2 or above.
+    disabled = isPy3k;
+
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/konfig.git;
+      rev = "refs/tags/${version}";
+      sha256 = "1v9pjb9idapjlc75p6h06kx7bi8zxhfgj93yxq1bn337kmyk1xdf";
+    };
+
+    propagatedBuildInputs = with self; [ configparser argparse ];
+
+    meta = with stdenv.lib; {
+      description = "Yet Another Config Parser";
+      homepage    = "https://github.com/mozilla-services/konfig";
+      license     = licenses.mpl20;
+    };
+  };
+
   kitchen = buildPythonPackage (rec {
     name = "kitchen-1.1.1";
     disabled = isPy3k;
 
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/k/kitchen/kitchen-1.1.1.tar.gz";
       sha256 = "0ki840hjk1q19w6icv0dj2jxb00966nwy9b1jib0dgdspj00yrr5";
     };
@@ -4207,7 +6007,7 @@ rec {
     name = "pylast-${version}";
     version = "0.5.11";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pylast/${name}.tar.gz";
       md5 = "506cf1b13020b3ed2f3c845ea0c9830e";
     };
@@ -4226,14 +6026,14 @@ rec {
   libcloud = buildPythonPackage (rec {
     name = "libcloud-0.14.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/a/apache-libcloud/apache-libcloud-0.14.1.tar.bz2;
       sha256 = "1l6190pjv54c7y8pzr089ij727qv7bqhhaznr2mkvimgr1wzsql5";
     };
 
-    buildInputs = [  mock ];
+    buildInputs = with self; [ mock ];
 
-    propagatedBuildInputs = [ pycrypto ];
+    propagatedBuildInputs = with self; [ pycrypto ];
     preConfigure = "cp libcloud/test/secrets.py-dist libcloud/test/secrets.py";
 
     # failing tests for 26 and 27
@@ -4249,14 +6049,14 @@ rec {
   limnoria = buildPythonPackage (rec {
     name = "limnoria-20130327";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/l/limnoria/limnoria-2013-06-01T10:32:51+0200.tar.gz;
       name = "limnoria-2013-06-01.tar.gz";
       sha256 = "1i8q9zzf43sr3n1q4h6h1z8nz31g4aa8dq94ywvfbh7hklmchq6n";
     };
 
-    buildInputs = [ pkgs.git ];
-    propagatedBuildInputs = [ modules.sqlite3 ];
+    buildInputs = with self; [ pkgs.git ];
+    propagatedBuildInputs = with self; [ modules.sqlite3 ];
 
     doCheck = false;
 
@@ -4269,10 +6069,65 @@ rec {
   });
 
 
+  linode = buildPythonPackage rec {
+    name = "linode-${version}";
+    version = "0.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/l/linode/linode-${version}.tar.gz";
+      md5 = "03a306575cf274719b3206ecee0bda9e";
+    };
+
+    propagatedBuildInputs = with self; [ requests2 ];
+
+    meta = with stdenv.lib; {
+      homepage = "https://github.com/ghickman/linode";
+      description = "A thin python wrapper around Linode's API";
+      license = licenses.mit;
+      maintainers = [ maintainers.nslqqq ];
+    };
+  };
+
+  llfuse = buildPythonPackage rec {
+    name = "llfuse-0.40";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/l/llfuse/${name}.tar.bz2";
+      sha256 = "0mx87n6j2g63mgiimjqn0gj6jgqfdkc04xkxc56r1azjlqji32zf";
+    };
+
+    buildInputs = [ pkgs.pkgconfig pkgs.fuse pkgs.attr ];
+
+    meta = with stdenv.lib; {
+      description = "Python bindings for the low-level FUSE API";
+      homepage = https://code.google.com/p/python-llfuse/;
+      license = licenses.lgpl2Plus;
+      platforms = platforms.unix;
+      maintainers = [ maintainers.bjornfor ];
+    };
+  };
+
+  locustio = buildPythonPackage rec {
+    name = "locustio-0.7.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/l/locustio/${name}.tar.gz";
+      md5 = "90cf4d029d58ad58d19ea17a16e59c34";
+    };
+
+    propagatedBuildInputs = [ self.msgpack self.requests2 self.flask self.gevent self.pyzmq ];
+    buildInputs = [ self.mock self.unittest2 ];
+
+    meta = {
+      homepage = http://locust.io/;
+      description = "A load testing tool";
+    };
+  };
+
   lockfile = buildPythonPackage rec {
     name = "lockfile-0.9.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pylockfile.googlecode.com/files/${name}.tar.gz";
       sha1 = "1eebaee375641c9f29aeb21768f917dd2b985752";
     };
@@ -4287,42 +6142,46 @@ rec {
   };
 
   logilab_common = buildPythonPackage rec {
-    name = "logilab-common-0.61.0";
+    name = "logilab-common-0.63.2";
 
-    src = fetchurl {
-      url = "http://download.logilab.org/pub/common/${name}.tar.gz";
-      sha256 = "09apsrcvjliawbxmfrmi1l8hlbaj87mb7n4lrlivy5maxs6yg4hd";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/l/logilab-common/${name}.tar.gz";
+      sha256 = "1rr81zlmlgdma3s75i5c1l8q2m25v4ac41i9pniik4mhkc6a0fv0";
     };
 
-    propagatedBuildInputs = [ unittest2 ];
+    propagatedBuildInputs = with self; [ unittest2 six ];
   };
 
-  "lxml-2.3.6" = buildPythonPackage rec {
-    name = "lxml-2.3.6";
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/l/lxml/lxml-2.3.6.tar.gz";
-      md5 = "d5d886088e78b1bdbfd66d328fc2d0bc";
+  loxodo = buildPythonPackage {
+    name = "loxodo-0.20150124";
+    disabled = isPy3k;
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/sommer/loxodo.git";
+      rev = "6c56efb4511fd6f645ad0f8eb3deafc8071c5795";
+      sha256 = "02whmv4am8cz401rplplqzbipkyf0wd69z43sd3yw05rh7f3xbs2";
     };
-    buildInputs = [ pkgs.libxml2 pkgs.libxslt ];
-    propagatedBuildInputs = [  ];
-    doCheck = false;
 
-    meta = {
-      description = "Pythonic binding for the libxml2 and libxslt libraries";
-      homepage = http://codespeak.net/lxml/index.html;
-      license = "BSD";
+    propagatedBuildInputs = with self; [ wxPython modules.readline ];
+    postInstall = "mv $out/bin/loxodo.py $out/bin/loxodo";
+
+    meta = with stdenv.lib; {
+      description = "A Password Safe V3 compatible password vault";
+      homepage = http://www.christoph-sommer.de/loxodo/;
+      license = licenses.gpl2Plus;
+      platforms = platforms.linux;
     };
   };
 
   lxml = buildPythonPackage ( rec {
-    name = "lxml-3.0.2";
+    name = "lxml-3.3.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/l/lxml/${name}.tar.gz";
-      md5 = "38b15b0dd5e9292cf98be800e84a3ce4";
+      md5 = "a804b36864c483fe7abdd7f493a0c379";
     };
 
-    buildInputs = [ pkgs.libxml2 pkgs.libxslt ];
+    buildInputs = with self; [ pkgs.libxml2 pkgs.libxslt ];
 
     meta = {
       description = "Pythonic binding for the libxml2 and libxslt libraries";
@@ -4335,17 +6194,17 @@ rec {
   python_magic = buildPythonPackage rec {
     name = "python-magic-0.4.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/python-magic/${name}.tar.gz";
       md5 = "07e7a0fea78dd81ed609414c3484df58";
     };
 
-    propagatedBuildInputs = [ pkgs.file ];
+    propagatedBuildInputs = with self; [ pkgs.file ];
 
     patchPhase = ''
       substituteInPlace magic.py --replace "ctypes.CDLL(dll)" "ctypes.CDLL('${pkgs.file}/lib/libmagic.so')"
     '';
-    
+
     doCheck = false;
 
     # TODO: tests are failing
@@ -4365,7 +6224,7 @@ rec {
     src = pkgs.file.src;
 
     patches = [ ../tools/misc/file/python.patch ];
-    buildInputs = [ python pkgs.file ];
+    buildInputs = with self; [ python pkgs.file ];
 
     preConfigure = "cd python";
 
@@ -4380,12 +6239,12 @@ rec {
     version = "0.21.1";
     name = "m2crypto-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-${version}.tar.gz";
       md5 = "f93d8462ff7646397a9f77a2fe602d17";
     };
 
-    buildInputs = [ pkgs.swig pkgs.openssl ];
+    buildInputs = with self; [ pkgs.swig pkgs.openssl ];
 
     preBuild = "${python}/bin/${python.executable} setup.py build_ext --openssl=${pkgs.openssl}";
 
@@ -4399,18 +6258,18 @@ rec {
 
 
   Mako = buildPythonPackage rec {
-    name = "Mako-0.9.1";
+    name = "Mako-1.0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/M/Mako/${name}.tar.gz";
-      md5 = "fe3f394ef714776d09ec6133923736a7";
+      md5 = "9f0aafd177b039ef67b90ea350497a54";
     };
 
-    buildInputs = [ markupsafe nose ];
-    propagatedBuildInputs = [ markupsafe ];
+    buildInputs = with self; [ markupsafe nose mock ];
+    propagatedBuildInputs = with self; [ markupsafe ];
 
     meta = {
-      description = "Super-fast templating language.";
+      description = "Super-fast templating language";
       homepage = http://www.makotemplates.org;
       license = stdenv.lib.licenses.mit;
       maintainers = [ stdenv.lib.maintainers.iElectric ];
@@ -4421,7 +6280,7 @@ rec {
   markupsafe = buildPythonPackage rec {
     name = "markupsafe-0.15";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/M/MarkupSafe/${name}.tar.gz";
       md5 = "4e7c4d965fe5e033fa2d7bb7746bb186";
     };
@@ -4438,17 +6297,17 @@ rec {
     name = "manuel-${version}";
     version = "1.8.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/manuel/${name}.tar.gz";
       sha256 = "1diyj6a8bvz2cdf9m0g2bbx9z2yjjnn3ylbg1zinpcjj6vldfx59";
     };
 
-    propagatedBuildInputs = [ six zope_testing ];
+    propagatedBuildInputs = with self; [ six zope_testing ];
 
     meta = {
       description = "A documentation builder";
       homepage = http://pypi.python.org/pypi/manuel;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
     };
   };
 
@@ -4456,7 +6315,7 @@ rec {
     version = "2.3.1";
     name = "markdown-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/M/Markdown/Markdown-${version}.tar.gz";
       sha256 = "147j9hznv2r187a86d28glmg3pckfrdp0nz9yh7s1aqpawwdkszz";
     };
@@ -4470,39 +6329,21 @@ rec {
   };
 
 
-  matplotlib = buildPythonPackage rec {
-    name = "matplotlib-1.3.1";
-
-    src = fetchurl {
-      url = "mirror://sourceforge/matplotlib/${name}.tar.gz";
-      sha256 = "0smgpn7lwbn02nbyhawyn0n6r3pb65zk501f21bjgavnjjfnf5pa";
-    };
-
-    buildInputs = [ python pkgs.which pkgs.ghostscript ] ++
-        (if stdenv.isDarwin then [ pkgs.clangStdenv ] else [ pkgs.stdenv ]);
-
-    propagatedBuildInputs =
-      [ dateutil nose numpy pyparsing tornado pkgs.freetype pkgs.libpng pkgs.pkgconfig
-      ];
-
-    meta = with stdenv.lib; {
-      description = "python plotting library, making publication quality plots";
-      homepage    = "http://matplotlib.sourceforge.net/";
-      maintainers = with maintainers; [ lovek323 ];
-      platforms   = platforms.unix;
-    };
+  matplotlib = callPackage ../development/python-modules/matplotlib/default.nix {
+    stdenv = if stdenv.isDarwin then pkgs.clangStdenv else pkgs.stdenv;
+    enableGhostscript = true;
   };
 
 
   mccabe = buildPythonPackage (rec {
     name = "mccabe-0.2.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/mccabe/${name}.tar.gz";
       md5 = "5a3f3fa6a4bad126c88aaaa7dab682f5";
     };
 
-    buildInputs = [ ];
+    buildInputs = with self; [ ];
 
     meta = {
       description = "McCabe checker, plugin for flake8";
@@ -4517,12 +6358,12 @@ rec {
     name = "mechanize-0.1.11";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://wwwsearch.sourceforge.net/mechanize/src/${name}.tar.gz";
       sha256 = "1h62mwy4iz09jqz17nrb9j8y0djd500zdfqwrz9xmdwqzqwixkj2";
     };
 
-    propagatedBuildInputs = [ clientform ];
+    propagatedBuildInputs = with self; [ clientform ];
 
     meta = {
       description = "Stateful programmatic web browsing in Python";
@@ -4537,7 +6378,7 @@ rec {
   meld3 = buildPythonPackage rec {
     name = "meld3-1.0.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/m/meld3/meld3-1.0.0.tar.gz;
       md5 = "ca270506dd4ecb20ae26fa72fbd9b0be";
     };
@@ -4547,18 +6388,17 @@ rec {
     meta = {
       description = "An HTML/XML templating engine used by supervisor";
       homepage = https://github.com/supervisor/meld3;
-      license = "free-non-copyleft";
+      license = stdenv.lib.licenses.free;
     };
   };
 
-
   memcached = buildPythonPackage rec {
     name = "memcached-1.51";
 
-    src = if isPy3k then fetchurl {
+    src = if isPy3k then pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/python3-memcached/python3-${name}.tar.gz";
       sha256 = "0na8b369q8fivh3y0nvzbvhh3lgvxiyyv9xp93cnkvwfsr8mkgkw";
-    } else fetchurl {
+    } else pkgs.fetchurl {
       url = "http://ftp.tummy.com/pub/python-memcached/old-releases/python-${name}.tar.gz";
       sha256 = "124s98m6hvxj6x90d7aynsjfz878zli771q96ns767r2mbqn7192";
     };
@@ -4573,7 +6413,7 @@ rec {
   memory_profiler = buildPythonPackage rec {
     name = "memory_profiler-0.27";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/m/memory_profiler/memory_profiler-0.27.tar.gz";
       md5 = "212c0d7452dbaffb6b09474ac07b0668";
     };
@@ -4587,16 +6427,68 @@ rec {
     };
   };
 
+  mezzanine = buildPythonPackage rec {
+    version = "3.1.10";
+    name = "mezzanine-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://github.com/stephenmcd/mezzanine/archive/${version}.tar.gz";
+      sha256 = "1cd7d3dji8q4mvcnf9asxn8j109pd5g5d5shr6xvn0iwr35qprgi";
+    };
+
+    buildInputs = with self; [ pyflakes pep8 ];
+    propagatedBuildInputs = with self; [
+      django_1_6 filebrowser_safe grappelli_safe bleach tzlocal beautifulsoup4
+      requests2 requests_oauthlib future pillow modules.sqlite3
+    ];
+
+    # Tests Fail Due to Syntax Warning, Fixed for v3.1.11+
+    doCheck = false;
+    # sed calls will be unecessary in v3.1.11+
+    preConfigure = ''
+      sed -i 's/future == 0.9.0/future>=0.9.0/' setup.py
+      sed -i 's/tzlocal == 1.0/tzlocal>=1.0/' setup.py
+      sed -i 's/pep8==1.4.1/pep8>=1.4.1/' setup.py
+      sed -i 's/pyflakes==0.6.1/pyflakes>=0.6.1/' setup.py
+      export LC_ALL="en_US.UTF-8"
+    '';
+
+    meta = with stdenv.lib; {
+      description = ''
+        A content management platform built using the Django framework.
+      '';
+      longDescription = ''
+        Mezzanine is a powerful, consistent, and flexible content management
+        platform. Built using the Django framework, Mezzanine provides a
+        simple yet highly extensible architecture that encourages diving in and
+        hacking on the code. Mezzanine is BSD licensed and supported by a
+        diverse and active community.
+
+        In some ways, Mezzanine resembles tools such as Wordpress that provide
+        an intuitive interface for managing pages, blog posts, form data, store
+        products, and other types of content. But Mezzanine is also different.
+        Unlike many other platforms that make extensive use of modules or
+        reusable applications, Mezzanine provides most of its functionality by
+        default. This approach yields a more integrated and efficient platform.
+      '';
+      homepage = http://mezzanine.jupo.org/;
+      downloadPage = https://github.com/stephenmcd/mezzanine/releases;
+      license = licenses.free;
+      maintainers = with maintainers; [ prikhi ];
+      platforms = platforms.linux;
+    };
+  };
+
   minimock = buildPythonPackage rec {
     version = "1.2.8";
     name = "minimock-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://bitbucket.org/jab/minimock/get/${version}.zip";
       sha256 = "c88fa8a7120623f23990a7f086a9657f6ced09025a55e3be8649a30b4945441a";
     };
 
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose ];
 
     checkPhase = "./test";
 
@@ -4606,17 +6498,52 @@ rec {
     };
   };
 
+  rainbowstream = buildPythonPackage rec {
+    name = "rainbowstream-${version}";
+    version = "1.1.6";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/r/rainbowstream/${name}.tar.gz";
+      sha256 = "04i2a8a5k6n6lgfpa9bzzbkhvywgd4bn3qlspl97pn8ply9kgszm";
+    };
+
+    doCheck = false;
+
+    preBuild = ''
+      export LC_ALL="en_US.UTF-8"
+    '';
+
+    postInstall = ''
+      for prog in "$out/bin/"*; do
+        wrapProgram "$prog" \
+          --prefix PYTHONPATH : "$PYTHONPATH"
+      done
+    '';
+
+    buildInputs = with self; [
+      pkgs.libjpeg pkgs.freetype pkgs.zlib pkgs.glibcLocales
+      pillow twitter pyfiglet requests arrow dateutil modules.readline pysocks
+    ];
+
+    meta = {
+      description = "Streaming command-line twitter client";
+      homepage    = "http://www.rainbowstream.org/";
+      license     = licenses.mit;
+      maintainers = [ maintainers.thoughtpolice ];
+    };
+  };
+
   mitmproxy = buildPythonPackage rec {
     baseName = "mitmproxy";
     name = "${baseName}-${meta.version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "${meta.homepage}/download/${name}.tar.gz";
       sha256 = "0mpyw8iw4l4jv175qlbn0rrlgiz1k79m44jncbdxfj8ddvvvyz2j";
     };
 
-    buildInputs = [
-      pkgs.pyopenssl pyasn1 urwid pil lxml flask protobuf netlib
+    buildInputs = with self; [
+      pyopenssl pyasn1 urwid pil lxml flask protobuf netlib
     ];
 
     doCheck = false;
@@ -4639,12 +6566,12 @@ rec {
   mock = buildPythonPackage (rec {
     name = "mock-1.0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/mock/${name}.tar.gz";
       md5 = "c3971991738caa55ec7c356bbc154ee2";
     };
 
-    buildInputs = [ unittest2 ];
+    buildInputs = with self; [ unittest2 ];
 
     meta = {
       description = "Mock objects for Python";
@@ -4660,7 +6587,7 @@ rec {
     disabled = isPy3k;
     ver = "1.9.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://static.moinmo.in/files/moin-${ver}.tar.gz";
       sha256 = "f4ba1b5c956bd96d2a61e27e68d297aa63d1afbc80d5740e139dcdf0affb4db5";
     };
@@ -4674,11 +6601,29 @@ rec {
     };
   });
 
+  moretools = buildPythonPackage rec {
+    name = "moretools-0.1a41";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/m/moretools/${name}.tar.gz";
+      sha256 = "1n442wprbl3cmg08233m1sr3g4z0i8hv9g6bhch7kzdmbl21399f";
+    };
+
+    buildInputs = with self; [ six pathpy setuptools ];
+    propagatedBuildInputs = with self; [ decorator ];
+
+    meta = with stdenv.lib; {
+      description = "Many more basic tools for python 2/3 extending itertools, functools, operator and collections";
+      homepage = https://bitbucket.org/userzimmermann/python-moretools;
+      license = licenses.gpl3Plus;
+      platforms = platforms.linux;
+    };
+  };
 
   mox = buildPythonPackage rec {
     name = "mox-0.5.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pymox.googlecode.com/files/${name}.tar.gz";
       sha1 = "b71aeaacf31898c3b38d8b9ca5bcc0664499c0de";
     };
@@ -4688,15 +6633,38 @@ rec {
 
     meta = {
       homepage = http://code.google.com/p/pymox/;
-      description = "A mock object framework for Python.";
+      description = "A mock object framework for Python";
     };
   };
 
+  mozsvc = buildPythonPackage rec {
+    name = "mozsvc-${version}";
+    version = "0.8";
+
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/mozservices.git;
+      rev = "refs/tags/${version}";
+      sha256 = "0k1d7v8aa4xd3f9h8m5crl647136ba15i9nzdrpxg5aqmv2n0i0p";
+    };
+
+    patches = singleton (pkgs.fetchurl {
+      url = https://github.com/nbp/mozservices/commit/f86c0b0b870cd8f80ce90accde9e16ecb2e88863.diff;
+      sha256 = "1lnghx821f6dqp3pa382ka07cncdz7hq0mkrh44d0q3grvrlrp9n";
+    });
+
+    doCheck = false; # lazy packager
+    propagatedBuildInputs = with self; [ pyramid simplejson konfig ];
+
+    meta = {
+      homepage = https://github.com/mozilla-services/mozservices;
+      description = "Various utilities for Mozilla apps";
+    };
+  };
 
   mpmath = buildPythonPackage rec {
     name = "mpmath-0.17";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://mpmath.googlecode.com/files/${name}.tar.gz";
       sha256 = "1blgzwq4irzaf8abb4z0d2r48903n9zxf51fhnv3gv09bgxjqzxh";
     };
@@ -4718,14 +6686,14 @@ rec {
     name = "python-mpd-0.3.0";
 
     disabled = isPy3k;
-    
-    src = fetchurl {
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/python-mpd/python-mpd-0.3.0.tar.gz";
       md5 = "5b3849b131e2fb12f251434597d65635";
     };
 
     meta = with pkgs.stdenv.lib; {
-      description = "An MPD (Music Player Daemon) client library written in pure Python.";
+      description = "An MPD (Music Player Daemon) client library written in pure Python";
       homepage = http://jatreuman.indefero.net/p/python-mpd/;
       license = licenses.gpl3;
     };
@@ -4735,18 +6703,19 @@ rec {
     name = "mrbob-${version}";
     version = "0.1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/mr.bob/mr.bob-${version}.zip";
       md5 = "84a117c9a75b86842b0fa5f5c9c767f3";
     };
 
+    buildInputs = [ pkgs.glibcLocales ];
+
     # some files in tests dir include unicode names
     preBuild = ''
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
       export LC_ALL="en_US.UTF-8"
     '';
 
-    propagatedBuildInputs = [ argparse jinja2 six modules.readline ] ++
+    propagatedBuildInputs = with self; [ argparse jinja2 six modules.readline ] ++
                             (optionals isPy26 [ importlib ordereddict ]);
 
     meta = {
@@ -4755,11 +6724,35 @@ rec {
     };
   };
 
+  msgpack = buildPythonPackage rec {
+    name = "msgpack-python-${version}";
+    version = "0.4.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/m/msgpack-python/${name}.tar.gz";
+      md5 = "8b317669314cf1bc881716cccdaccb30";
+    };
+
+    propagatedBuildInputs = with self; [ ];
+  };
+
+  msrplib = buildPythonPackage rec {
+    name = "python-msrplib-${version}";
+    version = "0.15.0";
+
+    src = pkgs.fetchurl {
+      url = "http://download.ag-projects.com/SipClient/${name}.tar.gz";
+      sha256 = "1sm03jcz663xkbhfmrk7rr5l3wlkydn8xs56fvqjxyapx0m5sw6f";
+    };
+
+    propagatedBuildInputs = with self; [ eventlib application gnutls ];
+  };
+
 
   munkres = buildPythonPackage rec {
     name = "munkres-1.0.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/munkres/${name}.tar.gz";
       md5 = "d7ba3b8c5001578ae229a2d5a655872f";
     };
@@ -4779,13 +6772,14 @@ rec {
   musicbrainzngs = buildPythonPackage rec {
     name = "musicbrainzngs-0.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/musicbrainzngs/${name}.tar.gz";
       md5 = "9e17a181af72d04a291c9a960bc73d44";
     };
-    
+
+    buildInputs = [ pkgs.glibcLocales ];
+
     preCheck = ''
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
       export LC_ALL="en_US.UTF-8"
     '';
 
@@ -4797,17 +6791,34 @@ rec {
     };
   };
 
+  mutag = buildPythonPackage rec {
+    disabled = ! isPy3k;
+    name = "mutag-0.0.2-2ffa0258ca";
+    src = pkgs.fetchgit {
+      url = "https://github.com/aroig/mutag.git";
+      sha256 = "0azq2sb32mv6wyjlw1hk01c23isl4x1hya52lqnhknak299s5fml";
+      rev = "2ffa0258cadaf79313241f43bf2c1caaf197d9c2";
+    };
+
+    propagatedBuildInputs = with self; [ pyparsing ];
+
+    meta = {
+      homepage = https://github.com/aroig/mutag;
+      license = stdenv.lib.licenses.gpl3;
+      maintainers = [ stdenv.lib.maintainers.DamienCassou ];
+    };
+  };
 
   mutagen = buildPythonPackage (rec {
-    name = "mutagen-1.23";
+    name = "mutagen-1.27";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/mutagen/${name}.tar.gz";
-      sha256 = "12f70aaf5ggdzll76bhhkn64b27xy9s1acx417dbsaqnnbis8s76";
+      md5 = "6a9bb5cc33214add35348f1bb3448340";
     };
-    
-    # one unicode test fails
-    doCheck = false;
+
+    # Needed for tests only
+    buildInputs = [ pkgs.faad2 pkgs.flac pkgs.vorbisTools pkgs.liboggz ];
 
     meta = {
       description = "Python multimedia tagging library";
@@ -4821,7 +6832,7 @@ rec {
     name = "muttils-1.3";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://www.blacktrash.org/hg/muttils/archive/8bb26094df06.tar.bz2;
       sha256 = "1a4kxa0fpgg6rdj5p4kggfn8xpniqh8v5kbiaqc6wids02m7kag6";
     };
@@ -4836,23 +6847,50 @@ rec {
     };
   });
 
+  pymysql = buildPythonPackage rec {
+    name = "pymysql-${version}";
+    version = "0.6.3";
+    src = pkgs.fetchgit {
+      url = https://github.com/PyMySQL/PyMySQL.git;
+      rev = "refs/tags/pymysql-${version}";
+      sha256 = "1m9fr2x49s3aixlmccr3w80skl19dya9h3x69wgl6ly1z27iyg24";
+    };
+  };
+
+  pymysqlsa = self.buildPythonPackage rec {
+    name = "pymysqlsa-${version}";
+    version = "1.0";
+
+    propagatedBuildInputs = with self; [ pymysql sqlalchemy9 ];
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pymysql_sa/pymysql_sa-1.0.tar.gz";
+      sha256 = "a2676bce514a29b2d6ab418812259b0c2f7564150ac53455420a20bd7935314a";
+    };
+
+    meta = {
+      description = "PyMySQL dialect for SQL Alchemy";
+      homepage = https://pypi.python.org/pypi/pymysql_sa;
+      license = licenses.mit;
+    };
+  };
 
   MySQL_python = buildPythonPackage {
     name = "MySQL-python-1.2.3";
-    
+
     disabled = isPy3k;
 
     # plenty of failing tests
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = mirror://sourceforge/mysql-python/MySQL-python-1.2.3.tar.gz;
       sha256 = "0vkyg9dmj29hzk7fy77f42p7bfj28skyzsjsjry4wqr3z6xnzrkx";
     };
 
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose pkgs.openssl ];
 
-    propagatedBuildInputs = [ pkgs.mysql pkgs.zlib ];
+    propagatedBuildInputs = with self; [ pkgs.mysql pkgs.zlib ];
 
     meta = {
       description = "MySQL database binding for Python";
@@ -4865,7 +6903,7 @@ rec {
   mysql_connector_repackaged = buildPythonPackage rec {
     name = "mysql-connector-repackaged-0.3.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/m/mysql-connector-repackaged/${name}.tar.gz";
       md5 = "0b17ad1cb3fe763fd44487cb97cf45b2";
     };
@@ -4884,7 +6922,7 @@ rec {
     name = "namebench-1.0.5";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://namebench.googlecode.com/files/${name}.tgz";
       sha256 = "6cbde35ce94d1f31e7d48f5d8eec13238b4dbc505675a33f1e183e600c1482c3";
     };
@@ -4916,13 +6954,29 @@ rec {
   });
 
 
+  nameparser = buildPythonPackage rec {
+    name = "nameparser-${version}";
+    version = "0.3.4";
+    
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/n/nameparser/${name}.tar.gz";
+      sha256 = "1zi94m99ziwwd6kkip3w2xpnl05r2cfv9iq68inz7np81c3g8vag";
+    };
+    
+    meta = {
+      description = "A simple Python module for parsing human names into their individual components";
+      homepage = https://github.com/derek73/python-nameparser;
+      license = stdenv.lib.licenses.lgpl21Plus;
+    };
+  };
+
   nbxmpp = buildPythonPackage rec {
-    name = "nbxmpp-0.5";
+    name = "nbxmpp-0.5.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       name = "${name}.tar.gz";
-      url = "https://python-nbxmpp.gajim.org/downloads/5";
-      sha256 = "0y270c9v4i9n58p4ghlm18h50qcfichmfkgcpqd3bypx4fkmdx90";
+      url = "https://python-nbxmpp.gajim.org/downloads/7";
+      sha256 = "0q2iph07aahwn6hlr38v0cvzlfc9hrf5mz6qs1kp4b4x9l8x5mqn";
     };
 
     meta = {
@@ -4936,7 +6990,7 @@ rec {
   netaddr = buildPythonPackage rec {
     name = "netaddr-0.7.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/downloads/drkjam/netaddr/${name}.tar.gz";
       sha256 = "0ssxic389rdc79zkz8dxcjpqdi5qs80h12khkag410cl9cwk11f2";
     };
@@ -4954,7 +7008,7 @@ rec {
     version = "0.10.4";
     name = "netifaces-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/n/netifaces/${name}.tar.gz";
       sha256 = "1plw237a4zib4z8s62g0mrs8gm3kjfrp5sxh6bbk9nl3rdls2mln";
     };
@@ -4970,14 +7024,14 @@ rec {
     name = "${baseName}-${meta.version}";
     disabled = (!isPy27);
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/cortesi/netlib/archive/v${meta.version}.tar.gz";
       name = "${name}.tar.gz";
       sha256 = "1x2n126b7fal64fb5fzkp4by7ym0iswn3w9mh6pm4c1vjdpnk592";
     };
 
-    buildInputs = [
-      pkgs.pyopenssl pyasn1
+    buildInputs = with self; [
+      pyopenssl pyasn1
     ];
 
     doCheck = false;
@@ -4994,13 +7048,13 @@ rec {
     name = "nevow-${version}";
     version = "0.10.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/N/Nevow/Nevow-${version}.tar.gz";
       sha256 = "90631f68f626c8934984908d3df15e7c198939d36be7ead1305479dfc67ff6d0";
       name = "${name}.tar.gz";
     };
 
-    propagatedBuildInputs = [ twisted ];
+    propagatedBuildInputs = with self; [ twisted ];
 
     postInstall = "twistd --help > /dev/null";
 
@@ -5032,17 +7086,17 @@ rec {
   });
 
   nose = buildPythonPackage rec {
-    version = "1.3.3";
+    version = "1.3.4";
     name = "nose-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/n/nose/${name}.tar.gz";
-      sha256 = "09h3a74hzw1cfx4ic19ibxq8kg6sl1n64px2mmb57f5yd3r2y35l";
+      sha256 = "00qymfgwg4iam4xi0w9bnv7lcb3fypq1hzfafzgs1rfmwaj67g3n";
     };
 
-    buildInputs = [ coverage ];
+    buildInputs = with self; [ coverage ];
 
-    doCheck = ! stdenv.isDarwin;
+    doCheck = false;  # lot's of transient errors, too much hassle
     checkPhase = if python.is_py3k or false then ''
       ${python}/bin/${python.executable} setup.py build_tests
     '' else "" + ''
@@ -5059,12 +7113,12 @@ rec {
     version = "0.4";
     name = "nose-selecttests-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/n/nose-selecttests/${name}.zip";
       sha256 = "0lgrfgp3sq8xi8d9grrg0z8jsyk0wl8a3rxw31hb7vdncin5b7n5";
     };
 
-    propagatedBuildInputs = [ nose ];
+    propagatedBuildInputs = with self; [ nose ];
 
     meta = {
       description = "Simple nose plugin that enables developers to run subset of collected tests to spare some waiting time for better things";
@@ -5074,53 +7128,91 @@ rec {
 
   nose2 = if isPy26 then null else (buildPythonPackage rec {
     name = "nose2-0.4.5";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/n/nose2/${name}.tar.gz";
       md5 = "d7e51c848227488e3cc0424faf5511cd";
     };
     meta = {
       description = "nose2 is the next generation of nicer testing for Python";
     };
-    propagatedBuildInputs = [ six ];
+    propagatedBuildInputs = with self; [ six ];
     # AttributeError: 'module' object has no attribute 'collector'
     doCheck = false;
   });
 
+  nose-cover3 = buildPythonPackage rec {
+    name = "nose-cover3-${version}";
+    version = "0.1.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/n/nose-cover3/${name}.tar.gz";
+      sha256 = "1la4hhc1yszjpcchvkqk5xmzlb2g1b3fgxj9wwc58qc549whlcc1";
+      md5 = "82f981eaa007b430679899256050fa0c";
+    };
+
+    propagatedBuildInputs = with self; [ nose ];
+
+    meta = {
+      description = "Coverage 3.x support for Nose";
+      homepage = https://github.com/ask/nosecover3;
+      license = stdenv.lib.licenses.lgpl21;
+    };
+  };
+
+  nosexcover = buildPythonPackage (rec {
+    name = "nosexcover-1.0.10";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/n/nosexcover/${name}.tar.gz";
+      md5 = "12bf494a801b376debeb6a167c247391";
+    };
+
+    propagatedBuildInputs = with self; [ coverage nose ];
+
+    meta = {
+      description = "Extends nose.plugins.cover to add Cobertura-style XML reports";
+
+      homepage = http://github.com/cmheisel/nose-xcover/;
+
+      license = stdenv.lib.licenses.bsd3;
+    };
+  });
+
   nosejs = buildPythonPackage {
     name = "nosejs-0.9.4";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/N/NoseJS/NoseJS-0.9.4.tar.gz;
       sha256 = "0qrhkd3sga56qf6k0sqyhwfcladwi05gl6aqmr0xriiq1sgva5dy";
     };
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose ];
   };
 
   nose-cprof = buildPythonPackage rec {
     name = "nose-cprof-0.1-0";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/n/nose-cprof/${name}.tar.gz";
       md5 = "5db27c3b8f01915335ae6fc5fd3afd44";
     };
 
     meta = {
-      description = "A python nose plugin to profile using cProfile rather than the default Hotshot profiler.";
+      description = "A python nose plugin to profile using cProfile rather than the default Hotshot profiler";
     };
 
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose ];
   };
 
 
   notify = pkgs.stdenv.mkDerivation (rec {
     name = "python-notify-0.1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://www.galago-project.org/files/releases/source/notify-python/notify-python-0.1.1.tar.bz2;
       sha256 = "1kh4spwgqxm534qlzzf2ijchckvs0pwjxl1irhicjmlg7mybnfvx";
     };
 
-    patches = singleton (fetchurl {
+    patches = singleton (pkgs.fetchurl {
       name = "libnotify07.patch";
       url = "http://pkgs.fedoraproject.org/cgit/notify-python.git/plain/"
           + "libnotify07.patch?id2=289573d50ae4838a1658d573d2c9f4c75e86db0c";
@@ -5128,11 +7220,11 @@ rec {
     });
 
     postPatch = ''
-      sed -i -e '/^PYGTK_CODEGEN/s|=.*|="${pygtk}/bin/pygtk-codegen-2.0"|' \
+      sed -i -e '/^PYGTK_CODEGEN/s|=.*|="${self.pygtk}/bin/pygtk-codegen-2.0"|' \
         configure
     '';
 
-    buildInputs = [ python pkgs.pkgconfig pkgs.libnotify pygobject pygtk pkgs.glib pkgs.gtk pkgs.dbus_glib ];
+    buildInputs = with self; [ python pkgs.pkgconfig pkgs.libnotify pygobject pygtk pkgs.glib pkgs.gtk pkgs.dbus_glib ];
 
     postInstall = "cd $out/lib/python*/site-packages && ln -s gtk-*/pynotify .";
 
@@ -5147,9 +7239,9 @@ rec {
 
     src = pkgs.notmuch.src;
 
-    sourceRoot = "${pkgs.notmuch.name}/bindings/python";
+    sourceRoot = pkgs.notmuch.pythonSourceRoot;
 
-    buildInputs = [ python pkgs.notmuch ];
+    buildInputs = with self; [ python pkgs.notmuch ];
 
     meta = {
       description = "A Python wrapper around notmuch";
@@ -5158,17 +7250,29 @@ rec {
     };
   };
 
+  ntplib = buildPythonPackage rec {
+    name = "ntplib-0.3.2";
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/n/ntplib/ntplib-0.3.2.tar.gz;
+      md5 = "0f386dc00c0056ac4d77af0b4c21bb8e";
+    };
+
+    meta = {
+      description = "Python NTP library";
+    };
+  };
+
   numexpr = buildPythonPackage rec {
     version = "2.4";
     name = "numexpr-${version}";
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = https://github.com/pydata/numexpr.git;
       rev = "606cc9a110711e947d35ac2770749c00dab184c8";
       sha256 = "1gxgkg7ncgjhnifn444iha5nrjhyr8sr6w5yp204186a1ysz858g";
     };
 
-    propagatedBuildInputs = with pkgs; [ numpy ];
+    propagatedBuildInputs = with self; [ numpy ];
 
     # Run the test suite.
     # It requires the build path to be in the python search path.
@@ -5197,20 +7301,22 @@ rec {
   };
 
   numpy = buildPythonPackage ( rec {
-    name = "numpy-1.7.1";
+    name = "numpy-1.8.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/numpy/${name}.tar.gz";
-      sha256 = "0jh832j439jj2b7m1z5a4rv5cpdn1yiw1r6gwrhdihw562d029am";
+      sha256 = "1gcxlk3mf43pzpxvbw8kcfg173g4105j9szsfc1kxwablail6myf";
     };
 
+    disabled = isPyPy;  # WIP
+
     preConfigure = ''
       sed -i 's/-faltivec//' numpy/distutils/system_info.py
       sed -i '0,/from numpy.distutils.core/s//import setuptools;from numpy.distutils.core/' setup.py
     '';
 
     preBuild = ''
-      export BLAS=${pkgs.blas} LAPACK=${pkgs.liblapack}
+      export BLAS=${pkgs.openblas} LAPACK=${pkgs.openblas}
     '';
 
     setupPyBuildFlags = ["--fcompiler='gnu95'"];
@@ -5218,8 +7324,8 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
-    buildInputs = [ pkgs.gfortran ];
-    propagatedBuildInputs = [ pkgs.liblapack pkgs.blas ];
+    buildInputs = with self; [ pkgs.gfortran ];
+    propagatedBuildInputs = with self; [  pkgs.openblas ];
 
     meta = {
       description = "Scientific tools for Python";
@@ -5229,16 +7335,16 @@ rec {
 
 
   nwdiag = buildPythonPackage rec {
-    name = "nwdiag-1.0.0";
+    name = "nwdiag-1.0.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/n/nwdiag/${name}.tar.gz";
-      md5 = "d81581a028840f8f7362ab21bf73e941";
+      sha256 = "0n7ary1fngxk8bk15vabc8fhnmxlh098piciwaviwn7l4a5q1zys";
     };
 
-    buildInputs = [ pep8 nose unittest2 docutils ];
+    buildInputs = with self; [ pep8 nose unittest2 docutils ];
 
-    propagatedBuildInputs = [ blockdiag ];
+    propagatedBuildInputs = with self; [ blockdiag ];
 
     # tests fail
     doCheck = false;
@@ -5252,17 +7358,18 @@ rec {
     };
   };
 
-  livestreamer = if isPy34 then null else (buildPythonPackage rec {
-    version = "1.8.2";
+  livestreamer = buildPythonPackage rec {
+    version = "1.11.1";
     name = "livestreamer-${version}";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/chrippa/livestreamer/archive/v${version}.tar.gz";
-      sha256 = "130h97qdb7qx8xg0gz54p5a6cb2zbffi5hsi305xf0ah9nf4rbrc";
+      sha256 = "1hic3z5any64gn2b0gs1b7m34bzgzv71inr8wgjq59pwf8mbrqk9";
     };
 
-    buildInputs = [ pkgs.makeWrapper ];
-    propagatedBuildInputs = [ requests pkgs.rtmpdump pycrypto ];
+    buildInputs = with self; [ pkgs.makeWrapper ];
+    propagatedBuildInputs = with self; [ requests2 pkgs.rtmpdump pycrypto singledispatch futures ];
     postInstall = ''
       wrapProgram $out/bin/livestreamer --prefix PATH : ${pkgs.rtmpdump}/bin
     '';
@@ -5273,7 +7380,23 @@ rec {
         Livestreamer is CLI program that extracts streams from various
         services and pipes them into a video player of choice.
       '';
-      license = "bsd";
+      license = stdenv.lib.licenses.bsd2;
+    };
+  };
+
+  oauth = buildPythonPackage (rec {
+    name = "oauth-1.0.1";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/o/oauth/oauth-1.0.1.tar.gz";
+      sha256 = "0pdgi35hczsslil4890xqawnbpdazkgf2v1443847h5hy2gq2sg7";
+    };
+
+    meta = {
+      homepage = "http://code.google.com/p/oauth";
+      description = "Library for OAuth version 1.0a.";
+      license = licenses.mit;
+      platforms = stdenv.lib.platforms.all;
     };
   });
 
@@ -5281,14 +7404,14 @@ rec {
     name = "oauth2-1.5.211";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/o/oauth2/oauth2-1.5.211.tar.gz";
       sha256 = "82a38f674da1fa496c0fc4df714cbb058540bed72a30c50a2e344b0d984c4d21";
     };
 
-    propagatedBuildInputs = [ httplib2 ];
+    propagatedBuildInputs = with self; [ httplib2 ];
 
-    buildInputs = [ mock coverage ];
+    buildInputs = with self; [ mock coverage ];
 
     # ServerNotFoundError: Unable to find the server at oauth-sandbox.sevengoslings.net
     doCheck = false;
@@ -5304,37 +7427,45 @@ rec {
 
 
   oauthlib = buildPythonPackage rec {
-    name = "oauthlib-0.5.0";
+    version = "0.7.2";
+    name = "oauthlib-${version}";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/o/oauthlib/${name}.tar.gz";
-      md5 = "d12c507de33403ebdf290fbffdb98213";
+    src = pkgs.fetchurl {
+      url = "https://github.com/idan/oauthlib/archive/${version}.tar.gz";
+      sha256 = "08b7swyswhxh90k9mp54rk1qks2l2s2pdcjap6x118y27p7dhp4h";
     };
 
-    buildInputs = [ mock nose unittest2 ];
+    buildInputs = with self; [ mock nose unittest2 ];
 
-    propagatedBuildInputs = [ pycrypto ];
+    propagatedBuildInputs = with self; [ pycrypto blinker pyjwt ];
 
     meta = {
       homepage = https://github.com/idan/oauthlib;
+      downloadPage = https://github.com/idan/oauthlib/releases;
       description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic";
+      maintainers = with maintainers; [ prikhi ];
     };
   };
 
 
   obfsproxy = buildPythonPackage ( rec {
-    name = "obfsproxy-0.2.2";
-    src = fetchgit {
-      url = https://git.torproject.org/pluggable-transports/obfsproxy.git;
-      rev = "3c4e843a30c430aec1de03e0e09ef654072efc03";
-      sha256 = "8fd1e63a37bc42add7609d97d50ecd81da81881bcf7015a9e2958531dbf39018";
+    name = "obfsproxy-${version}";
+    version = "0.2.12";
+
+    src = pkgs.fetchgit {
+      url = meta.repositories.git;
+      rev = "refs/tags/${name}";
+      sha256 = "82d694aa7f3de7327fc4dc517fb262ab076f536ed6d4377573c76df8cf019dcf";
     };
 
-    propagatedBuildInputs = [ pyptlib argparse twisted pycrypto ];
+    propagatedBuildInputs = with self;
+      [ pyptlib argparse twisted pycrypto pyyaml ];
 
     meta = {
       description = "a pluggable transport proxy";
       homepage = https://www.torproject.org/projects/obfsproxy;
+      repositories.git = https://git.torproject.org/pluggable-transports/obfsproxy.git;
+      maintainers = with stdenv.lib.maintainers; [ phreedom thoughtpolice ];
     };
   });
 
@@ -5342,7 +7473,7 @@ rec {
     name = "offtrac-0.1.0";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/o/offtrac/${name}.tar.gz";
       sha256 = "06vd010pa1z7lyfj1na30iqzffr4kzj2k2sba09spik7drlvvl56";
     };
@@ -5373,7 +7504,7 @@ rec {
 
   ordereddict = if isPy26 then (buildPythonPackage {
     name = "ordereddict-1.1";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz";
       md5 = "a0ed854ee442051b249bfad0f638bbec";
     };
@@ -5383,7 +7514,7 @@ rec {
   ply = buildPythonPackage (rec {
     name = "ply-3.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://www.dabeaz.com/ply/${name}.tar.gz";
       sha256 = "0sslnbpws847r1j1f41fjpn76w0asywfqgxwzyjrvmmxnw8myhxg";
     };
@@ -5417,7 +7548,7 @@ rec {
     name = "osc-0.133+git";
     disabled = isPy3k;
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = git://gitorious.org/opensuse/osc.git;
       rev = "6cd541967ee2fca0b89e81470f18b97a3ffc23ce";
       sha256 = "a39ce0e321e40e9758bf7b9128d316c71b35b80eabc84f13df492083bb6f1cc6";
@@ -5427,20 +7558,31 @@ rec {
     doCheck = false;
     postInstall = "ln -s $out/bin/osc-wrapper.py $out/bin/osc";
 
-    propagatedBuildInputs = [ pythonPackages.m2crypto ];
+    propagatedBuildInputs = with self; [ self.m2crypto ];
 
   });
 
+  pagerduty = buildPythonPackage rec {
+    name = "pagerduty-${version}";
+    version = "0.2.1";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+        url = "https://pypi.python.org/packages/source/p/pagerduty/pagerduty-${version}.tar.gz";
+        md5 = "8109a330d16751a7f4041c0ccedec787";
+    };
+  };
+
   pandas = buildPythonPackage rec {
-    name = "pandas-0.14.0";
+    name = "pandas-0.15.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pandas/${name}.tar.gz";
-      sha256 = "f7997debca756c4dd5ccdf5a010dfe3d1c7dac98ee706b715d994cf7c9d35528";
+      sha256 = "1w3wjnn3v37hf3hrd24lfgk6vpykarv9mihhpcfq6y7rg586bgjk";
     };
 
-    buildInputs = [ nose ];
-    propagatedBuildInputs = [ dateutil numpy pytz modules.sqlite3 ];
+    buildInputs = with self; [ nose ];
+    propagatedBuildInputs = with self; [ dateutil numpy pytz modules.sqlite3 ];
 
     # Tests require networking to pass
     doCheck = false;
@@ -5454,20 +7596,34 @@ rec {
     };
   };
 
+  parsedatetime = buildPythonPackage rec {
+    name = "parsedatetime-${version}";
+    version = "1.4";
+
+    src = pkgs.fetchurl {
+        url = "https://pypi.python.org/packages/source/p/parsedatetime/${name}.tar.gz";
+        md5 = "3aca729761be5259a508ed184df73c68";
+    };
+  };
+
   paramiko = buildPythonPackage rec {
-    name = "paramiko-1.14.0";
+    name = "paramiko-1.15.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/paramiko/${name}.tar.gz";
-      md5 = "e26324fd398af68ad506fe98853835c3";
+      md5 = "48c274c3f9b1282932567b21f6acf3b5";
     };
 
-    propagatedBuildInputs = [ pycrypto ecdsa ];
+    propagatedBuildInputs = with self; [ pycrypto ecdsa ];
 
-    # tests failures since 1.14.0 release..
-    doCheck = false;
-    
-    checkPhase = "${python}/bin/${python.executable} test.py";
+    # https://github.com/paramiko/paramiko/issues/449
+    doCheck = !(isPyPy || isPy33);
+    checkPhase = ''
+      # test_util needs to resolve an hostname, thus failing when the fw blocks it
+      sed '/UtilTest/d' -i test.py
+
+      ${python}/bin/${python.executable} test.py --no-sftp --no-big-file
+    '';
 
     meta = {
       homepage = "https://github.com/paramiko/paramiko/";
@@ -5489,12 +7645,12 @@ rec {
     name = "paste-1.7.5.1";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://pypi.python.org/packages/source/P/Paste/Paste-1.7.5.1.tar.gz;
       md5 = "7ea5fabed7dca48eb46dc613c4b6c4ed";
     };
 
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose ];
 
     doCheck = false; # some files required by the test seem to be missing
 
@@ -5509,12 +7665,12 @@ rec {
     version = "1.5.2";
     name = "paste-deploy-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/P/PasteDeploy/PasteDeploy-${version}.tar.gz";
       md5 = "352b7205c78c8de4987578d19431af3b";
     };
 
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose ];
 
     meta = {
       description = "Load, configure, and compose WSGI applications and servers";
@@ -5523,15 +7679,68 @@ rec {
     };
   };
 
+   pasteScript = buildPythonPackage rec {
+    version = "1.7.5";
+    name = "PasterScript-${version}";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/P/PasteScript/${name}.tar.gz";
+      sha256 = "2b685be69d6ac8bc0fe6f558f119660259db26a15e16a4943c515fbee8093539";
+    };
+
+    doCheck = false;
+    buildInputs = with self; [ nose ];
+    propagatedBuildInputs = with self; [ paste paste_deploy cheetah argparse ];
+
+    meta = {
+      description = "A pluggable command-line frontend, including commands to setup package file layouts";
+      homepage = http://pythonpaste.org/script/;
+      platforms = stdenv.lib.platforms.all;
+    };
+  };
+
+  pathlib = buildPythonPackage rec {
+    name = "pathlib-${version}";
+    version = "1.0.1";
+    disabled = pythonAtLeast "3.4"; # Was added to std library in Python 3.4
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pathlib/${name}.tar.gz";
+      sha256 = "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39";
+    };
+
+    meta = {
+      description = "Object-oriented filesystem paths";
+      homepage = "https://pathlib.readthedocs.org/";
+      license = stdenv.lib.licenses.mit;
+    };
+  };
+
+  pathpy = buildPythonPackage rec {
+    name = "path.py-5.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/path.py/${name}.zip";
+      sha256 = "0n1kpbbm1dg5f484yzxr7gb3ak6vjp92j70nw3bgjzsj9fh26afq";
+    };
+
+    meta = with stdenv.lib; {
+      description = "A module wrapper for os.path";
+      homepage = http://github.com/jaraco/path.py;
+      license = licenses.mit;
+      platforms = platforms.linux;
+    };
+  };
+
   paypalrestsdk = buildPythonPackage rec {
     name = "paypalrestsdk-0.7.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/paypalrestsdk/${name}.tar.gz";
       sha256 = "117kfipzfahf9ysv414bh1mmm5cc9ck5zb6rhpslx1f8gk3frvd6";
     };
 
-    propagatedBuildInputs = [ httplib2 ];
+    propagatedBuildInputs = with self; [ httplib2 ];
 
     meta = {
       homepage = https://developer.paypal.com/;
@@ -5543,7 +7752,7 @@ rec {
   pbr = buildPythonPackage rec {
     name = "pbr-0.9.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pbr/${name}.tar.gz";
       sha256 = "e5a57c434b1faa509a00bf458d2c7af965199d9cced3d05a547bff9880f7e8cb";
     };
@@ -5553,7 +7762,7 @@ rec {
 
     doCheck = false;
 
-    buildInputs = [ pip ];
+    buildInputs = with self; [ pip ];
 
     meta = {
       description = "Python Build Reasonableness";
@@ -5562,11 +7771,43 @@ rec {
     };
   };
 
+  pelican = buildPythonPackage rec {
+    name = "pelican-${version}";
+    version = "3.5.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pelican/${name}.tar.gz";
+      sha256 = "0dl8i26sa20iijlg3z9gxn3p6f1d9v44b9742929xfaqwj4amvdp";
+    };
+
+    preConfigure = ''
+      export LC_ALL="en_US.UTF-8"
+    '';
+
+    # Test data not provided
+    #buildInputs = [nose mock];
+    doCheck = false;
+
+    buildInputs = [ pkgs.glibcLocales ];
+
+    propagatedBuildInputs = with self; [
+      jinja2 pygments docutils pytz unidecode six dateutil feedgenerator
+      blinker pillow beautifulsoup4
+    ];
+
+    meta = {
+      homepage = http://getpelican.com/;
+      description = "A tool to generate a static blog from reStructuredText or Markdown input files";
+      license = licenses.agpl3;
+      maintainers = with stdenv.lib.maintainers; [ offline prikhi ];
+    };
+  };
+
   pep8 = buildPythonPackage rec {
     name = "pep8-${version}";
     version = "1.5.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pep8/${name}.tar.gz";
       md5 = "f6adbdd69365ecca20513c709f9b7c93";
     };
@@ -5579,11 +7820,31 @@ rec {
     };
   };
 
+  percol = buildPythonPackage rec {
+    name = "percol-${version}";
+    version = "0.0.8";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/percol/${name}.tar.gz";
+      sha256 = "169s5mhw1s60qbsd6pkf9bb2x6wfgx8hn8nw9d4qgc68qnnpp2cj";
+    };
+
+    propagatedBuildInputs = with self; [ modules.curses ];
+
+    meta = {
+      homepage = https://github.com/mooz/percol;
+      description = "Adds flavor of interactive filtering to the traditional pipe concept of shell";
+      license = licenses.mit;
+      maintainers = with stdenv.lib.maintainers; [ koral ];
+    };
+  };
+
 
   pexpect = buildPythonPackage {
     name = "pexpect-2.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/pexpect/pexpect-2.3.tar.gz";
       sha256 = "0x8bfjjqygriry1iyygm5048ykl5qpbpzqfp6i8dhkslm3ryf5fk";
     };
@@ -5592,8 +7853,8 @@ rec {
     doCheck = false;
 
     meta = {
-      homepage = "http://www.noah.org/wiki/Pexpect";
-      description = "Automate interactive console applications such as ssh, ftp, etc.";
+      homepage = http://www.noah.org/wiki/Pexpect;
+      description = "Automate interactive console applications such as ssh, ftp, etc";
       license = stdenv.lib.licenses.mit;
 
       longDescription = ''
@@ -5618,12 +7879,12 @@ rec {
   pg8000 = buildPythonPackage rec {
     name = "pg8000-1.9.14";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pg8000/${name}.tar.gz";
       sha256 = "1vandvfaf1m3a1fbc7nbm6syfqr9bazhzsnmai0jpjkbmb349izs";
     };
 
-    propagatedBuildInputs = [ pytz ];
+    propagatedBuildInputs = with self; [ pytz ];
 
     meta = {
       maintainers = [
@@ -5634,59 +7895,94 @@ rec {
     };
   };
 
+  pgcli = buildPythonPackage rec {
+    name = "pgcli-${version}";
+    version = "0.16.3";
+
+    src = pkgs.fetchFromGitHub {
+      sha256 = "12zizpj3fqbf90kj43zylpaqi3hhlihfg9xpzqa0aysiqri0ydx2";
+      rev = "v${version}";
+      repo = "pgcli";
+      owner = "amjith";
+    };
+
+    propagatedBuildInputs = with self; [ click jedi prompt_toolkit psycopg2 pygments sqlparse ];
+
+    meta = with stdenv.lib; {
+      description = "Command-line interface for PostgreSQL";
+      longDescription = ''
+        Rich command-line interface for PostgreSQL with auto-completion and
+        syntax highlighting.
+      '';
+      homepage = http://pgcli.com;
+      license = with licenses; [ bsd3 ];
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
+
   pip = buildPythonPackage rec {
     version = "1.5.6";
     name = "pip-${version}";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pip/pip-${version}.tar.gz";
       md5 = "01026f87978932060cc86c1dc527903e";
     };
-    buildInputs = [ mock scripttest virtualenv pytest ];
+    buildInputs = with self; [ mock scripttest virtualenv pytest ];
   };
 
 
   pika = buildPythonPackage {
     name = "pika-0.9.12";
     disabled = isPy3k;
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/p/pika/pika-0.9.12.tar.gz;
       md5 = "7174fc7cc5570314fa3cfaa729106482";
     };
-    buildInputs = [ nose mock pyyaml ];
+    buildInputs = with self; [ nose mock pyyaml ];
 
-    propagatedBuildInputs = [ unittest2 ];
+    propagatedBuildInputs = with self; [ unittest2 ];
   };
-  
+
+
+  python3pika = buildPythonPackage {
+    name = "python3-pika-0.9.14";
+    disabled = !isPy3k;
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/p/python3-pika/python3-pika-0.9.14.tar.gz;
+      md5 = "f3a3ee58afe0ae06f1fa553710e1aa28";
+    };
+    buildInputs = with self; [ nose mock pyyaml ];
+
+    propagatedBuildInputs = with self; [ unittest2 ];
+  };
+
+
   pil = buildPythonPackage rec {
     name = "PIL-${version}";
     version = "1.1.7";
-    
-    src = fetchurl {
+
+    src = pkgs.fetchurl {
       url = "http://effbot.org/downloads/Imaging-${version}.tar.gz";
       sha256 = "04aj80jhfbmxqzvmq40zfi4z3cw6vi01m3wkk6diz3lc971cfnw9";
     };
-  
-    buildInputs = [ python pkgs.libjpeg pkgs.zlib pkgs.freetype ];
-  
+
+    buildInputs = with self; [ python pkgs.libjpeg pkgs.zlib pkgs.freetype ];
+
     disabled = isPy3k;
-  
     doCheck = true;
-  
+
+    postInstall = "ln -s $out/lib/${python.libPrefix}/site-packages $out/lib/${python.libPrefix}/site-packages/PIL";
+
     preConfigure = ''
       sed -i "setup.py" \
           -e 's|^FREETYPE_ROOT =.*$|FREETYPE_ROOT = libinclude("${pkgs.freetype}")|g ;
               s|^JPEG_ROOT =.*$|JPEG_ROOT = libinclude("${pkgs.libjpeg}")|g ;
               s|^ZLIB_ROOT =.*$|ZLIB_ROOT = libinclude("${pkgs.zlib}")|g ;'
     '';
-  
-    checkPhase   = "${python}/bin/${python.executable} selftest.py";
-    buildPhase   = "${python}/bin/${python.executable} setup.py build_ext -i";
-  
-    postInstall = ''
-      cd "$out"/lib/python*/site-packages
-      ln -s $PWD PIL
-    '';
-  
+
+    checkPhase = "${python}/bin/${python.executable} selftest.py";
+    buildPhase = "${python}/bin/${python.executable} setup.py build_ext -i";
+
     meta = {
       homepage = http://www.pythonware.com/products/pil/;
       description = "The Python Imaging Library (PIL)";
@@ -5704,12 +8000,15 @@ rec {
   pillow = buildPythonPackage rec {
     name = "Pillow-2.3.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/P/Pillow/${name}.zip";
       md5 = "56b6614499aacb7d6b5983c4914daea7";
     };
 
-    buildInputs = [ pkgs.freetype pkgs.libjpeg pkgs.zlib pkgs.libtiff pkgs.libwebp ];
+    buildInputs = with self; [
+      pkgs.freetype pkgs.libjpeg pkgs.zlib pkgs.libtiff pkgs.libwebp pkgs.tcl ]
+      ++ optionals (isPy26 || isPy33 || isPyPy) [ pkgs.lcms2 ]
+      ++ optionals (isPyPy) [ pkgs.tk pkgs.xlibs.libX11 ];
 
     # NOTE: we use LCMS_ROOT as WEBP root since there is not other setting for webp.
     preConfigure = ''
@@ -5718,11 +8017,10 @@ rec {
               s|^JPEG_ROOT =.*$|JPEG_ROOT = _lib_include("${pkgs.libjpeg}")|g ;
               s|^ZLIB_ROOT =.*$|ZLIB_ROOT = _lib_include("${pkgs.zlib}")|g ;
               s|^LCMS_ROOT =.*$|LCMS_ROOT = _lib_include("${pkgs.libwebp}")|g ;
-              s|^TIFF_ROOT =.*$|TIFF_ROOT = _lib_include("${pkgs.libtiff}")|g ;'
+              s|^TIFF_ROOT =.*$|TIFF_ROOT = _lib_include("${pkgs.libtiff}")|g ;
+              s|^TCL_ROOT=.*$|TCL_ROOT = _lib_include("${pkgs.tcl}")|g ;'
     '';
 
-
-
     meta = {
       homepage = http://python-imaging.github.com/Pillow;
 
@@ -5737,16 +8035,16 @@ rec {
 
       license = "http://www.pythonware.com/products/pil/license.htm";
 
-      maintainers = [ stdenv.lib.maintainers.goibhniu ];
+      maintainers = with stdenv.lib.maintainers; [ goibhniu prikhi ];
     };
   };
 
   plumbum = buildPythonPackage rec {
     name = "plumbum-1.4.2";
 
-    buildInputs = [ pythonPackages.six ];
+    buildInputs = with self; [ self.six ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/plumbum/${name}.tar.gz";
       md5 = "38b526af9012a5282ae91dfe372cefd3";
     };
@@ -5757,7 +8055,7 @@ rec {
     name = "polib-${version}";
     version = "1.0.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://bitbucket.org/izi/polib/downloads/${name}.tar.gz";
       sha256 = "16klwlswfbgmkzrra80fgzhic9447pk3mnr75r2fkz72bkvpcclb";
     };
@@ -5773,17 +8071,36 @@ rec {
   };
 
 
+  polylint = buildPythonPackage rec {
+    name = "polylint-${version}";
+    version = "158125c6ab";
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/bendavis78/polylint";
+      rev = version;
+      sha256 = "ea10c67e9ce6df0936d6e2015382acba4f9cc559e2d6a9471f474f6bda78a266";
+    };
+
+    propagatedBuildInputs = with self; [ html5lib lxml cssselect ];
+
+    meta = {
+      description = "Fast HTML linter for polymer";
+      homepage = https://github.com/bendavis78/polylint;
+    };
+  };
+
+
   powerline = buildPythonPackage rec {
     rev  = "db80fc95ed01d2c559c4bdc7da8514ed3cc7fcd9";
     name = "powerline-beta_${rev}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://github.com/Lokaltog/powerline/tarball/${rev}";
       name   = "${name}.tar.bz";
       sha256 = "1csd4vasy0avwfxrpdr61plj6k1nzf36f6qvd9kl15s3lnspsfaz";
     };
 
-    propagatedBuildInputs = [ pkgs.git pkgs.mercurial pkgs.bazaar pythonPackages.psutil pythonPackages.pygit2 ];
+    propagatedBuildInputs = with self; [ pkgs.git pkgs.mercurial pkgs.bazaar self.psutil self.pygit2 ];
 
     # error: This is still beta and some tests still fail
     doCheck = false;
@@ -5806,7 +8123,7 @@ rec {
 
     meta = with stdenv.lib; {
       homepage    = https://github.com/Lokaltog/powerline;
-      description = "The ultimate statusline/prompt utility.";
+      description = "The ultimate statusline/prompt utility";
       license     = licenses.mit;
       maintainers = with maintainers; [ lovek323 ];
       platforms   = platforms.all;
@@ -5814,17 +8131,39 @@ rec {
   };
 
 
+
+  praw = pythonPackages.buildPythonPackage rec {
+    name = "praw-2.1.21";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/praw/praw-2.1.21.tar.gz";
+      md5 = "3b0388c9105662f8be8f1a4d3a38216d";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [ update_checker six mock flake8 ];
+
+    # can't find the tests module?
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      description = "Python Reddit API wrapper";
+      homepage = http://praw.readthedocs.org/;
+      license = licenses.gpl3;
+    };
+  };
+
   prettytable = buildPythonPackage rec {
     name = "prettytable-0.7.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/P/PrettyTable/${name}.tar.bz2";
       sha1 = "ad346a18d92c1d95f2295397c7a8a4f489e48851";
     };
-    
+
+    buildInputs = [ pkgs.glibcLocales ];
+
     preCheck = ''
       export LANG="en_US.UTF-8"
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
     '';
 
     meta = {
@@ -5834,26 +8173,79 @@ rec {
   };
 
 
-  protobuf = buildPythonPackage rec {
-    inherit (pkgs.protobuf) name src;
+  prompt_toolkit = buildPythonPackage rec {
+    name = "prompt_toolkit-${version}";
+    version = "0.26";
 
-    propagatedBuildInputs = [ pkgs.protobuf google_apputils  ];
-    sourceRoot = "${name}/python";
-    
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/prompt_toolkit/${name}.tar.gz";
+      sha256 = "1rd9gy3bcwp08agw5hiqckhaxbsz1i1kgkhjqw6vwhjdfgdjiq9l";
+    };
+
+    buildInputs = with self; [ jedi ipython pygments ];
+    propagatedBuildInputs = with self; [ docopt six wcwidth ];
+
+    meta = with stdenv.lib; {
+      description = "Python library for building powerful interactive command lines";
+      longDescription = ''
+        prompt_toolkit could be a replacement for readline, but it can be
+        much more than that. It is cross-platform, everything that you build
+        with it should run fine on both Unix and Windows systems. Also ships
+        with a nice interactive Python shell (called ptpython) built on top.
+      '';
+      homepage = https://github.com/jonathanslenders/python-prompt-toolkit;
+      license = with licenses; [ bsd3 ];
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
+
+  protobuf = self.protobuf2_6;
+  protobuf2_6 = self.protobufBuild pkgs.protobuf2_6;
+  protobuf2_5 = self.protobufBuild pkgs.protobuf2_5;
+  protobufBuild = protobuf: buildPythonPackage rec {
+    inherit (protobuf) name src;
+    disabled = isPy3k;
+
+    propagatedBuildInputs = with self; [ protobuf google_apputils ];
+
+    prePatch = ''
+      while [ ! -d python ]; do
+        cd *
+      done
+      cd python
+    '';
+
+    preConfigure = optionalString (versionAtLeast protobuf.version "2.6.0") ''
+      PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
+      PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=2
+    '';
+
+    checkPhase = if versionAtLeast protobuf.version "2.6.0" then ''
+      ${python.executable} setup.py google_test --cpp_implementation
+    '' else ''
+      ${python.executable} setup.py test
+    '';
+
+    installFlags = optional (versionAtLeast protobuf.version "2.6.0") "--cpp_implementation";
+
+    doCheck = true;
 
     meta = {
-      description = "Protocol Buffers are Google's data interchange format.";
+      description = "Protocol Buffers are Google's data interchange format";
       homepage = http://code.google.com/p/protobuf/;
     };
+
+    passthru.protobuf = protobuf;
   };
 
 
   psutil = buildPythonPackage rec {
-    name = "psutil-1.0.1";
+    name = "psutil-${version}";
+    version = "2.1.1";
 
-    src = fetchurl {
-      url = "http://psutil.googlecode.com/files/${name}.tar.gz";
-      sha256 = "1zrzh7hi0f79sf9axwrw3c2kl86qs72kvx8xbbrdwlp39rfa1i1f";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/psutil/${name}.tar.gz";
+      sha256 = "14smqj57yjrm6hjz5n2annkgv0kmxckdhqvfx784f4d4lr52m0dz";
     };
 
     # failed tests: https://code.google.com/p/psutil/issues/detail?id=434
@@ -5867,21 +8259,22 @@ rec {
 
 
   psycopg2 = buildPythonPackage rec {
-    name = "psycopg2-2.5.3";
+    name = "psycopg2-2.5.4";
+    disabled = isPyPy;
 
     # error: invalid command 'test'
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/psycopg2/${name}.tar.gz";
-      sha256 = "02h33barxigsczpympnwa0yvw9hgdv8d63bxm5x251ri26xz6b9s";
+      sha256 = "07ivzl7bq8bjcq5n90w4bsl29gjfm5l8yamw0paxh25si8r3zfi4";
     };
 
-    propagatedBuildInputs = [ pkgs.postgresql ];
+    propagatedBuildInputs = with self; [ pkgs.postgresql ];
 
     meta = {
       description = "PostgreSQL database adapter for the Python programming language";
-      license = "GPLv2/ZPL";
+      license = with stdenv.lib.licenses; [ gpl2 zpt20 ];
     };
   };
 
@@ -5890,7 +8283,7 @@ rec {
     name = "publicsuffix-${version}";
     version = "1.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/publicsuffix/${name}.tar.gz";
       md5 = "f86babf56f6e58b564d3853adebcf37a";
     };
@@ -5904,11 +8297,55 @@ rec {
 
 
   py = buildPythonPackage rec {
-    name = "py-1.4.20";
+    name = "py-1.4.24";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/py/${name}.tar.gz";
-      md5 = "5f1708be5482f3ff6711dfd6cafd45e0";
+      md5 = "8f32ee0cd1e01472a255fe1d28d81217";
+    };
+  };
+
+
+  pyacoustid = buildPythonPackage rec {
+    name = "pyacoustid-1.1.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyacoustid/${name}.tar.gz";
+      md5 = "b27c714d530300b917eb869726334226";
+    };
+
+    propagatedBuildInputs = with self; [ requests audioread ];
+
+    patches = [ ../development/python-modules/pyacoustid-py3.patch ];
+
+    postPatch = ''
+      sed -i \
+          -e '/^FPCALC_COMMAND *=/s|=.*|= "${pkgs.chromaprint}/bin/fpcalc"|' \
+          acoustid.py
+    '';
+
+    meta = {
+      description = "Bindings for Chromaprint acoustic fingerprinting";
+      homepage = "https://github.com/sampsyo/pyacoustid";
+      license = stdenv.lib.licenses.mit;
+    };
+  };
+
+
+  pyalgotrade = buildPythonPackage {
+    name = "pyalogotrade-0.16";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/P/PyAlgoTrade/PyAlgoTrade-0.16.tar.gz";
+      md5 = "01d70583ab15eb3bad21027bdeb30ae5";
+    };
+
+    propagatedBuildInputs = with self; [ numpy scipy pytz ];
+
+    meta = {
+      description = "Python Algorithmic Trading";
+      homepage = http://gbeced.github.io/pyalgotrade/;
+      license = stdenv.lib.licenses.asl20;
     };
   };
 
@@ -5916,7 +8353,7 @@ rec {
   pyasn1 = buildPythonPackage ({
     name = "pyasn1-0.1.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/pyasn1/0.1.7/pyasn1-0.1.7.tar.gz";
       sha256 = "1aqy21fb564gmnkw2fbkn55c40diyx3z0ixh4savvxikqm9ivy74";
     };
@@ -5929,17 +8366,36 @@ rec {
     };
   });
 
+  pyasn1-modules = buildPythonPackage rec {
+    name = "pyasn1-modules-${version}";
+    version = "0.0.5";
+    disabled = isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyasn1-modules/${name}.tar.gz";
+      sha256 = "0hcr6klrzmw4d9j9s5wrhqva5014735pg4zk3rppac4fs87g0rdy";
+    };
+
+    propagatedBuildInputs = with self; [ pyasn1 ];
+
+    meta = {
+      description = "A collection of ASN.1-based protocols modules";
+      homepage = https://pypi.python.org/pypi/pyasn1-modules;
+      license = stdenv.lib.licenses.bsd3;
+      platforms = stdenv.lib.platforms.unix;  # same as pyasn1
+    };
+  };
 
   pyaudio = pkgs.stdenv.mkDerivation rec {
     name = "python-pyaudio-${version}";
     version = "0.2.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://people.csail.mit.edu/hubert/pyaudio/packages/pyaudio-${version}.tar.gz";
       md5 = "623809778f3d70254a25492bae63b575";
     };
 
-    buildInputs = [ python pkgs.portaudio ];
+    buildInputs = with self; [ python pkgs.portaudio ];
 
     buildPhase = if stdenv.isDarwin then ''
       PORTAUDIO_PATH="${pkgs.portaudio}" ${python}/bin/${python.executable} setup.py build --static-link
@@ -5956,11 +8412,74 @@ rec {
     };
   };
 
+  vobject = buildPythonPackage rec {
+    version = "0.8.1c";
+    name = "vobject-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/v/vobject/vobject-${version}.tar.gz";
+      sha256 = "1xanqn7rn96841s3lim5lnx5743gc4kyfg4ggj1ys5r0gw8i6har";
+    };
+
+    disabled = isPy3k || isPyPy;
+
+    propagatedBuildInputs = with self; [ dateutil ];
+
+    meta = with stdenv.lib; {
+      description = "Module for reading vCard and vCalendar files";
+      homepage = http://vobject.skyhouseconsulting.com/;
+      license = licenses.asl20;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
+
+  pycarddav = buildPythonPackage rec {
+    version = "0.7.0";
+    name = "pycarddav-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyCardDAV/pyCardDAV-${version}.tar.gz";
+      sha256 = "0avkrcpisfvhz103v7vmq2jd83hvmpqrb4mlbx6ikkk1wcvclsx8";
+    };
+
+    disabled = isPy3k || isPyPy;
+
+    propagatedBuildInputs = with self; [ sqlite3 vobject lxml requests urwid pyxdg ];
+
+    meta = with stdenv.lib; {
+      description = "Command-line interface carddav client";
+      homepage = http://lostpackets.de/pycarddav;
+      license = licenses.mit;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
+
+  pycosat = pythonPackages.buildPythonPackage rec {
+    name = "pycosat-0.6.0";
+
+    propagatedBuildInputs = with pythonPackages; [  ];
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pycosat/${name}.tar.gz";
+      sha256 = "02sdn2998jlrm35smn1530hix3kzwyc1jv49cjdcnvfvrqqi3rww";
+    };
+
+    meta = with stdenv.lib; {
+      description = ''PicoSAT is a popular SAT solver written by Armin
+          Biere in pure C. This package provides efficient Python bindings
+          to picosat on the C level, i.e. when importing pycosat, the
+          picosat solver becomes part of the Python process itself. For
+          ease of deployment, the picosat source (namely picosat.c and
+          picosat.h) is included in this project.'';
+      homepage = https://github.com/ContinuumIO/pycosat;
+      license = licenses.mit;
+    };
+  };
 
   pygit2 = buildPythonPackage rec {
     name = "pygit2-0.21.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pygit2/${name}.tar.gz";
       sha256 = "0lya4v91d4y5fwrb55n8m8avgmz0l81jml2spvx6r7j1czcx3zic";
     };
@@ -5969,7 +8488,7 @@ rec {
       export DYLD_LIBRARY_PATH="${pkgs.libgit2}/lib"
     '' else "" );
 
-    propagatedBuildInputs = [ pkgs.libgit2 cffi ];
+    propagatedBuildInputs = with self; [ pkgs.libgit2 ] ++ optionals (!isPyPy) [ cffi ];
 
     preCheck = ''
       # disable tests that require networking
@@ -5979,7 +8498,7 @@ rec {
 
     meta = {
       homepage = https://pypi.python.org/pypi/pygit2;
-      description = "Pygit2 is a set of Python bindings to the libgit2 shared library.";
+      description = "A set of Python bindings to the libgit2 shared library";
       license = with stdenv.lib.licenses; gpl2;
       platforms = with stdenv.lib.platforms; all;
     };
@@ -5989,28 +8508,62 @@ rec {
   Babel = buildPythonPackage (rec {
     name = "Babel-1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/B/Babel/${name}.tar.gz";
       sha256 = "0bnin777lc53nxd1hp3apq410jj5wx92n08h7h4izpl4f4sx00lz";
     };
 
-    propagatedBuildInputs = [ pytz ];
+    propagatedBuildInputs = with self; [ pytz ];
 
     meta = {
       homepage = http://babel.edgewall.org;
-      description = "A collection of tools for internationalizing Python applications.";
+      description = "A collection of tools for internationalizing Python applications";
       license = "BSD";
       maintainers = [ stdenv.lib.maintainers.garbas ];
       platforms = stdenv.lib.platforms.linux;
     };
   });
 
+  pybfd = buildPythonPackage rec {
+    name = "pybfd-0.1.1";
+
+    disabled = isPyPy || isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pybfd/${name}.tar.gz";
+      md5 = "79dd6e12c90ad0515d0ad7fb1bd2f571";
+    };
+
+    preConfigure = ''
+      substituteInPlace setup.py \
+        --replace '"/usr/include"' '"${pkgs.gdb}/include"' \
+        --replace '"/usr/lib"' '"${pkgs.binutils}/lib"'
+    '';
+
+    # --old-and-unmanageable not supported by this setup.py
+    installPhase = ''
+      mkdir -p "$out/lib/${python.libPrefix}/site-packages"
+
+      export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
+
+      ${python}/bin/${python.executable} setup.py install \
+        --install-lib=$out/lib/${python.libPrefix}/site-packages \
+        --prefix="$out"
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/Groundworkstech/pybfd;
+      description = "A Python interface to the GNU Binary File Descriptor (BFD) library";
+      license = licenses.gpl2;
+      platforms = platforms.linux;
+    };
+  };
 
   pyblock = stdenv.mkDerivation rec {
     name = "pyblock-${version}";
     version = "0.53";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "http://pkgs.fedoraproject.org/repo/pkgs/python-pyblock/"
           + "${name}.tar.bz2/${md5}/${name}.tar.bz2";
       md5 = "f6d33a8362dee358517d0a9e2ebdd044";
@@ -6021,7 +8574,7 @@ rec {
              -e 's/-Werror *//' -e 's|/usr/|'"$out"'/|' Makefile
     '';
 
-    buildInputs = [ python pkgs.lvm2 pkgs.dmraid ];
+    buildInputs = with self; [ python pkgs.lvm2 pkgs.dmraid ];
 
     makeFlags = [
       "USESELINUX=0"
@@ -6034,34 +8587,88 @@ rec {
     };
   };
 
+  pybcrypt = buildPythonPackage rec {
+    name = "pybcrypt";
+    version = "0.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/py-bcrypt/py-bcrypt-${version}.tar.gz";
+      md5 = "dd8b367d6b716a2ea2e72392525f4e36";
+    };
+
+    meta = {
+      description = "bcrypt password hashing and key derivation";
+      homepage = https://code.google.com/p/py-bcrypt2;
+      license = "BSD";
+    };
+  };
+
   pycapnp = buildPythonPackage rec {
-    name = "pycapnp-0.4.4";
-    homepage = "http://jparyani.github.io/pycapnp/index.html";
+    name = "pycapnp-0.5.1";
+    disabled = isPyPy || isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pycapnp/${name}.tar.gz";
-      sha256 = "33b2b79438bb9bf37097966e1c90403c34ab49be1eb647ee251b62f362ee3537";
+      sha256 = "1kp97il34419gcrhn866n6a10lvh8qr13bnllnnh9473n4cq0cvk";
     };
 
-    buildInputs = with pkgs; [ capnproto cython ];
+    buildInputs = with pkgs; [ capnproto self.cython ];
 
     # import setuptools as soon as possible, to minimize monkeypatching mayhem.
     postConfigure = ''
-      sed -i '2iimport setuptools' setup.py
+      sed -i '3iimport setuptools' setup.py
     '';
 
     meta = with stdenv.lib; {
       maintainers = with maintainers; [ cstrahan ];
       license = stdenv.lib.licenses.bsd2;
       platforms = stdenv.lib.platforms.all;
+      homepage = "http://jparyani.github.io/pycapnp/index.html";
     };
   };
 
 
+  pycdio = buildPythonPackage rec {
+    name = "pycdio-0.20";
+    disabled = !isPy27;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pycdio/${name}.tar.gz";
+      sha256 = "1mrh233pj584gf7la64d4xlmvdnfl4jwpxs95lnd3i4zd5drid14";
+    };
+
+    preConfigure = ''
+      patchShebangs .
+    '';
+
+    buildInputs = [
+      self.setuptools self.nose pkgs.pkgconfig pkgs.swig pkgs.libcdio
+    ];
+
+    patches = [ ../development/python-modules/pycdio/add-cdtext-toc.patch ];
+
+    # Run tests using nosetests but first need to install the binaries
+    # to the root source directory where they can be found.
+    checkPhase = ''
+      ./setup.py install_lib -d .
+      nosetests
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = http://www.gnu.org/software/libcdio/;
+      description = "Wrapper around libcdio (CD Input and Control library)";
+      maintainers = with maintainers; [ rycee ];
+      license = licenses.gpl3Plus;
+    };
+
+  };
+
+
   pycryptopp = buildPythonPackage (rec {
     name = "pycryptopp-0.6.0.1206569328141510525648634803928199668821045408958";
+    disabled = isPy3k || isPyPy;  # see https://bitbucket.org/pypy/pypy/issue/1190/
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pycryptopp/${name}.tar.gz";
       sha256 = "0n90h1yg7bfvlbhnc54xb6dbqm286ykaksyg04kxlhyjgf8mhq8i";
     };
@@ -6070,7 +8677,7 @@ rec {
     # in the pycryptopp distribution.
     preConfigure = "export PYCRYPTOPP_DISABLE_EMBEDDED_CRYPTOPP=1";
 
-    buildInputs = [ setuptoolsDarcs darcsver pkgs.cryptopp ];
+    buildInputs = with self; [ setuptoolsDarcs darcsver pkgs.cryptopp ];
 
     meta = {
       homepage = http://allmydata.org/trac/pycryptopp;
@@ -6087,13 +8694,14 @@ rec {
 
   pycurl = buildPythonPackage (rec {
     name = "pycurl-7.19.5";
+    disabled = isPyPy; # https://github.com/pycurl/pycurl/issues/208
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pycurl.sourceforge.net/download/${name}.tar.gz";
       sha256 = "0hqsap82zklhi5fxhc69kxrwzb0g9566f7sdpz7f9gyxkmyam839";
     };
 
-    propagatedBuildInputs = [ pkgs.curl pkgs.openssl ];
+    propagatedBuildInputs = with self; [ pkgs.curl pkgs.openssl ];
 
     # error: invalid command 'test'
     doCheck = false;
@@ -6115,7 +8723,7 @@ rec {
     name = "pycurl2-7.20.0";
     disabled = isPy3k;
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = "https://github.com/Lispython/pycurl.git";
       rev = "0f00109950b883d680bd85dc6e8a9c731a7d0d13";
       sha256 = "0mhg7f9y5zl0m2xgz3rf1yqjd6l8n0qhfk7bpf36r44jfnhj75ld";
@@ -6124,7 +8732,7 @@ rec {
     # error: (6, "Couldn't resolve host 'h.wrttn.me'")
     doCheck = false;
 
-    buildInputs = [ pkgs.curl simplejson unittest2 nose ];
+    buildInputs = with self; [ pkgs.curl simplejson unittest2 nose ];
 
     meta = {
       homepage = https://pypi.python.org/pypi/pycurl2;
@@ -6138,25 +8746,52 @@ rec {
     name = "pydot-1.0.2";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pydot/${name}.tar.gz";
       md5 = "cd739651ae5e1063a89f7efd5a9ec72b";
     };
-    propagatedBuildInputs = [pyparsing pkgs.graphviz];
+    propagatedBuildInputs = with self; [pyparsing pkgs.graphviz];
     meta = {
       homepage = http://code.google.com/p/pydot/;
-      description = "pydot allows to easily create both directed and non directed graphs from Python.";
+      description = "Allows to easily create both directed and non directed graphs from Python";
+    };
+  };
+
+
+  pyenchant = pythonPackages.buildPythonPackage rec {
+    name = "pyenchant-1.6.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyenchant/pyenchant-1.6.6.tar.gz";
+      md5 = "9f5acfd87d04432bf8df5f9710a17358";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [ pkgs.enchant ];
+
+    patchPhase = let
+      path_hack_script = "s|LoadLibrary(e_path)|LoadLibrary('${pkgs.enchant}/lib/' + e_path)|";
+    in ''
+      sed -i "${path_hack_script}" enchant/_enchant.py
+    '';
+
+    # dictionaries needed for tests
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      description = "pyenchant: Python bindings for the Enchant spellchecker";
+      homepage = https://pythonhosted.org/pyenchant/;
+      license = licenses.lgpl21;
     };
   };
 
   pyfeed = buildPythonPackage rec {
     url = "http://www.blarg.net/%7Esteveha/pyfeed-0.7.4.tar.gz";
     name = stdenv.lib.nameFromURL url ".tar";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       inherit url;
       sha256 = "1h4msq573m7wm46h3cqlx4rsn99f0l11rhdqgf50lv17j8a8vvy1";
     };
-    propagatedBuildInputs = [xe];
+    propagatedBuildInputs = with self; [xe];
 
     # error: invalid command 'test'
     doCheck = false;
@@ -6167,30 +8802,66 @@ rec {
     };
   };
 
+  pyfiglet = buildPythonPackage rec {
+    name = "pyfiglet-${version}";
+    version = "0.7.2";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/p/pyfiglet/${name}.tar.gz";
+      sha256 = "0v8a18wvaqnb1jksyv5dc5n6zj0vrkyhz0ivmm8gfwpa0ky6n68y";
+    };
+
+    doCheck = false;
+
+    meta = {
+      description = "FIGlet in pure Python";
+      license     = licenses.gpl2Plus;
+      maintainers = [ maintainers.thoughtpolice ];
+    };
+  };
+
   pyflakes = buildPythonPackage rec {
     name = "pyflakes-0.8.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyflakes/${name}.tar.gz";
       md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
     };
 
-    buildInputs = [ unittest2 ];
-    
+    buildInputs = with self; [ unittest2 ];
+
     doCheck = !isPyPy;
 
     meta = {
-      homepage = "https://launchpad.net/pyflakes";
-      description = "A simple program which checks Python source files for errors.";
+      homepage = https://launchpad.net/pyflakes;
+      description = "A simple program which checks Python source files for errors";
       license = licenses.mit;
       maintainers = [ stdenv.lib.maintainers.garbas ];
     };
   };
 
+
+  pygeoip = pythonPackages.buildPythonPackage rec {
+    name = "pygeoip-0.3.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pygeoip/pygeoip-0.3.2.tar.gz";
+      md5 = "861664f8be3bed44820356539f2ea5b6";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [  ];
+
+    meta = with stdenv.lib; {
+      description = "Pure Python GeoIP API";
+      homepage = https://github.com/appliedsec/pygeoip;
+      license = licenses.lgpl3Plus;
+    };
+  };
+
   pyglet = buildPythonPackage rec {
     name = "pyglet-1.1.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pyglet.googlecode.com/files/${name}.tar.gz";
       sha256 = "048n20d606i3njnzhajadnznnfm8pwchs43hxs50da9p79g2m6qx";
     };
@@ -6211,16 +8882,19 @@ rec {
   };
 
   pygments = buildPythonPackage rec {
-    name = "Pygments-1.6";
+    version = "2.0.2";
+    name = "Pygments-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/P/Pygments/${name}.tar.gz";
-      md5 = "a18feedf6ffd0b0cc8c8b0fbdb2027b1";
+      sha256 = "0lagrwifsgn0s8bzqahpr87p7gd38xja8f06akscinp6hj89283k";
     };
 
-    meta = {
+    meta = with stdenv.lib; {
       homepage = http://pygments.org/;
       description = "A generic syntax highlighter";
+      license = with licenses; [ bsd2 ];
+      maintainers = with maintainers; [ nckx ];
     };
   };
 
@@ -6228,8 +8902,9 @@ rec {
   pygpgme = buildPythonPackage rec {
     version = "0.3";
     name = "pygpgme-${version}";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://launchpad.net/pygpgme/trunk/${version}/+download/${name}.tar.gz";
       sha256 = "5fd887c407015296a8fd3f4b867fe0fcca3179de97ccde90449853a3dfb802e1";
     };
@@ -6237,7 +8912,7 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
-    propagatedBuildInputs = [ pkgs.gpgme ];
+    propagatedBuildInputs = with self; [ pkgs.gpgme ];
 
     meta = {
       homepage = "https://launchpad.net/pygpgme";
@@ -6247,18 +8922,127 @@ rec {
     };
   };
 
+  mmpython = buildPythonPackage rec {
+    version = "0.4.10";
+    name = "mmpython-${version}";
+
+    src = pkgs.fetchurl {
+      url = http://sourceforge.net/projects/mmpython/files/latest/download;
+      sha256 = "1b7qfad3shgakj37gcj1b9h78j1hxlz6wp9k7h76pb4sq4bfyihy";
+      name = "${name}.tar.gz";
+    };
+
+    disabled = isPyPy || isPy3k;
+
+    meta = with stdenv.lib; {
+      description = "Media Meta Data retrieval framework";
+      homepage = http://sourceforge.net/projects/mmpython/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
+
+  kaa-base = buildPythonPackage rec {
+    version = "0.99.2dev-384-2b73caca";
+    name = "kaa-base-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/k/kaa-base/kaa-base-0.99.2dev-384-2b73caca.tar.gz";
+      sha256 = "0k3zzz84wzz9q1fl3vvqr2ys96z9pcf4viq9q6s2a63zaysmcfd2";
+    };
+
+    doCheck = false;
+
+    disabled = isPyPy || isPy3k;
+
+    # Same as in buildPythonPackage except that it does not pass --old-and-unmanageable
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p "$out/lib/${python.libPrefix}/site-packages"
+
+      export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
+
+      ${python}/bin/${python.executable} setup.py install \
+        --install-lib=$out/lib/${python.libPrefix}/site-packages \
+        --prefix="$out"
+
+      eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth
+      if [ -e "$eapth" ]; then
+          mv "$eapth" $(dirname "$eapth")/${name}.pth
+      fi
+
+      rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
+
+      runHook postInstall
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Generic application framework, providing the foundation for other modules";
+      homepage = https://github.com/freevo/kaa-base;
+      license = licenses.lgpl21;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
+
+  kaa-metadata = buildPythonPackage rec {
+    version = "0.7.8dev-r4569-20111003";
+    name = "kaa-metadata-${version}";
+
+    doCheck = false;
+
+    buildInputs = [ pkgs.libdvdread ];
+
+    disabled = isPyPy || isPy3k;
+
+    # Same as in buildPythonPackage except that it does not pass --old-and-unmanageable
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p "$out/lib/${python.libPrefix}/site-packages"
+
+      export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
+
+      ${python}/bin/${python.executable} setup.py install \
+        --install-lib=$out/lib/${python.libPrefix}/site-packages \
+        --prefix="$out"
+
+      eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth
+      if [ -e "$eapth" ]; then
+          mv "$eapth" $(dirname "$eapth")/${name}.pth
+      fi
+
+      rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
+
+      runHook postInstall
+    '';
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/k/kaa-metadata/kaa-metadata-0.7.8dev-r4569-20111003.tar.gz";
+      sha256 = "0bkbzfgxvmby8lvzkqjp86anxvv3vjd9nksv2g4l7shsk1n7y27a";
+    };
+
+    propagatedBuildInputs = with self; [ kaa-base ];
+
+    meta = with stdenv.lib; {
+      description = "Python library for parsing media metadata, which can extract metadata (e.g., such as id3 tags) from a wide range of media files";
+      homepage = https://github.com/freevo/kaa-metadata;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
 
   pyinotify = pkgs.stdenv.mkDerivation rec {
     name = "python-pyinotify-${version}";
     version = "0.9.3";
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = "git://github.com/seb-m/pyinotify.git";
       rev = "refs/tags/${version}";
       sha256 = "d38ce95e4af00391e58246a8d7fe42bdb51d63054b09809600b2faef2a803472";
     };
 
-    buildInputs = [ python ];
+    buildInputs = with self; [ python ];
 
     installPhase = ''
       ${python}/bin/${python.executable} setup.py install --prefix=$out
@@ -6271,12 +9055,33 @@ rec {
     };
   };
 
+  pyjwt = buildPythonPackage rec {
+    version = "0.3.2";
+    name = "pyjwt-${version}";
+
+    src = pkgs.fetchurl {
+      url = "http://github.com/progrium/pyjwt/archive/${version}.tar.gz";
+      sha256 = "118rzhpyvx1h4hslms4fdizyv6mnyd4g34fv089lvs116pj08k9c";
+    };
+
+    propagatedBuildInputs = with self; [ pycrypto ecdsa ];
+
+    meta = with stdenv.lib; {
+      description = "JSON Web Token implementation in Python";
+      longDescription = "A Python implementation of JSON Web Token draft 01.";
+      homepage = https://github.com/progrium/pyjwt;
+      downloadPage = https://github.com/progrium/pyjwt/releases;
+      license = licenses.mit;
+      maintainers = with maintainers; [ prikhi ];
+      platforms = platforms.linux;
+    };
+  };
 
   pykickstart = buildPythonPackage rec {
     name = "pykickstart-${version}";
     version = "1.99.39";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "http://pkgs.fedoraproject.org/repo/pkgs/pykickstart/"
           + "${name}.tar.gz/${md5}/${name}.tar.gz";
       md5 = "d249f60aa89b1b4facd63f776925116d";
@@ -6287,7 +9092,7 @@ rec {
                  key=lambda m: m.__name__)/" tests/baseclass.py
     '';
 
-    propagatedBuildInputs = [ urlgrabber ];
+    propagatedBuildInputs = with self; [ urlgrabber ];
 
     checkPhase = ''
       export PYTHONPATH="$PYTHONPATH:."
@@ -6304,13 +9109,14 @@ rec {
 
   pyodbc = buildPythonPackage rec {
     name = "pyodbc-3.0.7";
+    disabled = isPyPy;  # use pypypdbc instead
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pyodbc.googlecode.com/files/${name}.zip";
       sha256 = "0ldkm8xws91j7zbvpqb413hvdz8r66bslr451q3qc0xi8cnmydfq";
     };
 
-    buildInputs = [ pkgs.libiodbc ];
+    buildInputs = with self; [ pkgs.libiodbc ];
 
     meta = with stdenv.lib; {
       description = "Python ODBC module to connect to almost any database";
@@ -6325,7 +9131,7 @@ rec {
   pyparsing = buildPythonPackage rec {
     name = "pyparsing-2.0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyparsing/${name}.tar.gz";
       sha256 = "1r742rjbagf2i166k2w0r192adfw7l9lnsqz7wh4mflf00zws1q0";
     };
@@ -6343,12 +9149,24 @@ rec {
   pyparted = buildPythonPackage rec {
     name = "pyparted-${version}";
     version = "3.10";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://fedorahosted.org/releases/p/y/pyparted/${name}.tar.gz";
       sha256 = "17wq4invmv1nfazaksf59ymqyvgv3i8h4q03ry2az0s9lldyg3dv";
     };
 
+    patches = singleton (pkgs.fetchurl {
+      url = "https://www.redhat.com/archives/pyparted-devel/"
+          + "2014-April/msg00000.html";
+      postFetch = ''
+        sed -i -ne '/<!--X-Body-of-Message-->/,/<!--X-Body-of-Message-End-->/ {
+          s/^<[^>]*>//; /^$/!p
+        }' "$downloadedFile"
+      '';
+      sha256 = "1lakhz3nvx0qacn90bj1nq13zqxphiw4d9dsc44gwa8nj24j2zws";
+    });
+
     postPatch = ''
       sed -i -e 's|/sbin/mke2fs|${pkgs.e2fsprogs}&|' tests/baseclass.py
       sed -i -e '
@@ -6364,9 +9182,9 @@ rec {
       PATH="${pkgs.parted}/sbin:$PATH"
     '';
 
-    buildInputs = [ pkgs.pkgconfig ];
+    buildInputs = with self; [ pkgs.pkgconfig ];
 
-    propagatedBuildInputs = [ pkgs.parted ];
+    propagatedBuildInputs = with self; [ pkgs.parted ];
 
     checkPhase = ''
       patchShebangs Makefile
@@ -6384,10 +9202,14 @@ rec {
 
   pyptlib = buildPythonPackage (rec {
     name = "pyptlib-${version}";
-    version = "0.0.3";
-    src = fetchurl {
+    disabled = isPyPy || isPy3k;
+    version = "0.0.6";
+
+    doCheck = false;  # No such file or directory errors on 32bit
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pyptlib/pyptlib-${version}.tar.gz";
-      sha256 = "0mklak456jqifx57j9jmpb69h3ybxc880qk86pg4g8jk0i14pxh3";
+      sha256 = "01y6vbwncqb0hxlnin6whd9wrrm5my4qzjhk76fnix78v7ip515r";
     };
     meta = {
       description = "A python implementation of the Pluggable Transports for Circumvention specification for Tor";
@@ -6395,11 +9217,33 @@ rec {
     };
   });
 
+  pyqtgraph = buildPythonPackage rec {
+    name = "pyqtgraph-${version}";
+    version = "0.9.10";
+
+    doCheck = false;  # "PyQtGraph requires either PyQt4 or PySide; neither package could be imported."
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyqtgraph/${name}.tar.gz";
+      sha256 = "188pcxf3sxxjf0aipjn820lx2rf9f42zzp0sibmcl90955a3ipf1";
+    };
+
+    propagatedBuildInputs = with self; [ scipy numpy pyqt4 pyopengl ];
+
+    meta = with stdenv.lib; {
+      description = "Scientific Graphics and GUI Library for Python";
+      homepage = http://www.pyqtgraph.org/;
+      license = licenses.mit;
+      platforms = platforms.unix;
+      maintainers = [ maintainers.koral ];
+    };
+  };
+
   pyro3 = buildPythonPackage (rec {
     name = "Pyro-3.16";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/P/Pyro/${name}.tar.gz";
       md5 = "59d4d3f4a8786776c9d7f9051b8f1a69";
     };
@@ -6416,7 +9260,7 @@ rec {
   pyrss2gen = buildPythonPackage (rec {
     name = "PyRSS2Gen-1.0.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/P/PyRSS2Gen/${name}.tar.gz";
       md5 = "eae2bc6412c5679c287ecc1a59588f75";
     };
@@ -6429,22 +9273,72 @@ rec {
     };
   });
 
+  pysnmp = buildPythonPackage rec {
+    version = "4.2.5";
+    name = "pysnmp-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pysnmp/${name}.tar.gz";
+      sha256 = "0zq7yx8732ad9dxpxqgpqyixj7kfwbvf402q7l5njkv0kbcnavn4";
+    };
+
+    propagatedBuildInputs = with self; [ pyasn1 pycrypto ];
+
+    meta = with stdenv.lib; {
+      homepage = http://pysnmp.sf.net;
+      description = "A pure-Python SNMPv1/v2c/v3 library";
+      license = licenses.bsd2;
+      platforms = platforms.all;
+      maintainers = [ maintainers.koral ];
+    };
+  };
+
+  pysocks = buildPythonPackage rec {
+    name = "pysocks-${version}";
+    version = "1.5.0";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/P/PySocks/PySocks-${version}.tar.gz";
+      sha256 = "10wq5311qrnk8rvzsh6gwzxi7h51pgvzw3d7s1mb39fsvf0vyjdk";
+    };
+
+    doCheck = false;
+
+    meta = {
+      description = "SOCKS module for Python";
+      license     = licenses.bsd3;
+      maintainers = [ maintainers.thoughtpolice ];
+    };
+  };
+
   python_fedora = buildPythonPackage (rec {
     name = "python-fedora-0.3.33";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://fedorahosted.org/releases/p/y/python-fedora/${name}.tar.gz";
       sha256 = "1g05bh7d5d0gzrlnhpnca7jpqbgs2rgnlzzbvzzxmdbmlkqi3mws";
     };
-    propagatedBuildInputs = [ kitchen requests bunch paver ];
+    propagatedBuildInputs = with self; [ kitchen requests bunch paver ];
     doCheck = false;
   });
 
+  python_simple_hipchat = buildPythonPackage rec {
+    name = "python-simple-hipchat-${version}";
+    version = "0.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/python-simple-hipchat/python-simple-hipchat-${version}.zip";
+      md5 = "3806b3729a021511bac065360832f197";
+    };
+
+    buildInputs = [ pkgs.unzip ];
+  };
+
   python_keyczar = buildPythonPackage rec {
     name = "python-keyczar-0.71c";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url    = "https://pypi.python.org/packages/source/p/python-keyczar/${name}.tar.gz";
       sha256 = "18mhiwqq6vp65ykmi8x3i5l3gvrvrrr8z2kv11z1rpixmyr7sw1p";
     };
@@ -6457,14 +9351,14 @@ rec {
       platforms   = platforms.unix;
     };
 
-    buildInputs = [ pyasn1 pycrypto ];
+    buildInputs = with self; [ pyasn1 pycrypto ];
   };
 
   pyudev = buildPythonPackage rec {
     name = "pyudev-${version}";
     version = "0.16.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pyudev/${name}.tar.gz";
       md5 = "4034de584b6d9efcbfc590a047c63285";
     };
@@ -6475,7 +9369,7 @@ rec {
       }' pyudev/_libudev.py
     '';
 
-    propagatedBuildInputs = [ pkgs.udev ];
+    propagatedBuildInputs = with self; [ pkgs.udev ];
 
     meta = {
       homepage = "http://pyudev.readthedocs.org/";
@@ -6489,7 +9383,7 @@ rec {
   pynzb = buildPythonPackage (rec {
     name = "pynzb-0.1.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pynzb/${name}.tar.gz";
       md5 = "63c74a36348ac28aa99732dcb8be8c59";
     };
@@ -6505,7 +9399,7 @@ rec {
   progressbar = buildPythonPackage (rec {
     name = "progressbar-2.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/progressbar/${name}.tar.gz";
       md5 = "8ea4e2c17a8ec9e7d153767c5f2a7b28";
     };
@@ -6522,23 +9416,23 @@ rec {
   });
 
   ldap = buildPythonPackage rec {
-    name = "ldap-2.4.15";
+    name = "ldap-2.4.19";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/python-ldap/python-${name}.tar.gz";
-      sha256 = "0w0nn5yj0nbbkvpbqgfni56v7sjx6jf6s6zvp9zmahyrvqrsrg1h";
+      sha256 = "0j5hzaar4d0vhnrlpmkczgwm7ci2wibr99a7zx04xddzrhxdpz82";
     };
 
     NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl}/include/sasl";
-    propagatedBuildInputs = [pkgs.openldap pkgs.cyrus_sasl pkgs.openssl];
+    propagatedBuildInputs = with self; [pkgs.openldap pkgs.cyrus_sasl pkgs.openssl];
   };
 
 
   pylibacl = buildPythonPackage (rec {
     name = "pylibacl-0.5.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/downloads/iustin/pylibacl/${name}.tar.gz";
       sha256 = "1idks7j9bn62xzsaxkvhl7bdq6ws8kv8aa0wahfh7724qlbbcf1k";
     };
@@ -6547,31 +9441,37 @@ rec {
     # IOError: [Errno 0] Error
     doCheck = false;
 
-    buildInputs = [ pkgs.acl ];
+    buildInputs = with self; [ pkgs.acl ];
 
     meta = {
-      description = "A Python extension module for POSIX ACLs. It can be used to query, list, add, and remove ACLs from files and directories under operating systems that support them.";
+      description = "A Python extension module for POSIX ACLs, it can be used to query, list, add, and remove ACLs from files and directories under operating systems that support them";
       license = stdenv.lib.licenses.lgpl21Plus;
     };
   });
 
 
-  pymacs = pkgs.stdenv.mkDerivation rec {
+  pymacs = buildPythonPackage rec {
     version = "0.25";
-    name = "Pymacs-${version}";
+    name = "pymacs-${version}";
+    disabled = isPy3k || isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/pinard/Pymacs/tarball/v${version}";
       name = "${name}.tar.gz";
       sha256 = "1hmy76c5igm95rqbld7gvk0az24smvc8hplfwx2f5rhn6frj3p2i";
     };
 
-    buildInputs = [ python ];
+    configurePhase =  "make";
 
-    patchPhase = ''
-      sed -e "s@ install@ install --prefix=$out@g" -i Makefile
+    # Doesn't work with --old-and-unmanagable
+    installPhase = ''
+      ${python}/bin/${python.executable} setup.py install \
+        --install-lib=$out/lib/${python.libPrefix}/site-packages \
+        --prefix="$out"
     '';
 
+    doCheck = false;
+
     meta = with stdenv.lib; {
       description = "Emacs Lisp to Python interface";
       homepage = http://pymacs.progiciels-bpi.ca;
@@ -6580,58 +9480,67 @@ rec {
     };
   };
 
-  pyopengl =
-    let version = "3.0.2";
-    in
-      buildPythonPackage {
-        name = "pyopengl-${version}";
 
-        src = fetchurl {
-          url = "http://pypi.python.org/packages/source/P/PyOpenGL/PyOpenGL-${version}.tar.gz";
-          sha256 = "9ef93bbea2c193898341f574e281c3ca0dfe87c53aa25fbec4b03581f6d1ba03";
-        };
+  pyopengl = buildPythonPackage rec {
+    name = "pyopengl-${version}";
+    version = "3.0.2";
 
-        propagatedBuildInputs = with pkgs; [ mesa freeglut pil ];
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/P/PyOpenGL/PyOpenGL-${version}.tar.gz";
+      sha256 = "9ef93bbea2c193898341f574e281c3ca0dfe87c53aa25fbec4b03581f6d1ba03";
+    };
+    propagatedBuildInputs = [ pkgs.mesa pkgs.freeglut self.pillow ];
+    patchPhase = ''
+      sed -i "s|util.find_library( name )|name|" OpenGL/platform/ctypesloader.py
+      sed -i "s|'GL',|'libGL.so',|" OpenGL/platform/glx.py
+      sed -i "s|'GLU',|'${pkgs.mesa}/lib/libGLU.so',|" OpenGL/platform/glx.py
+      sed -i "s|'glut',|'${pkgs.freeglut}/lib/libglut.so',|" OpenGL/platform/glx.py
+    '';
+    meta = {
+      homepage = http://pyopengl.sourceforge.net/;
+      description = "PyOpenGL, the Python OpenGL bindings";
+      longDescription = ''
+        PyOpenGL is the cross platform Python binding to OpenGL and
+        related APIs.  The binding is created using the standard (in
+        Python 2.5) ctypes library, and is provided under an extremely
+        liberal BSD-style Open-Source license.
+      '';
+      license = "BSD-style";
+      platforms = stdenv.lib.platforms.mesaPlatforms;
+    };
+  };
 
-        patchPhase = ''
-          sed -i "s|util.find_library( name )|name|" OpenGL/platform/ctypesloader.py
-          sed -i "s|'GL',|'libGL.so',|" OpenGL/platform/glx.py
-          sed -i "s|'GLU',|'${pkgs.mesa}/lib/libGLU.so',|" OpenGL/platform/glx.py
-          sed -i "s|'glut',|'${pkgs.freeglut}/lib/libglut.so',|" OpenGL/platform/glx.py
-        '';
+  pyopenssl = buildPythonPackage rec {
+    name = "pyopenssl-${version}";
+    version = "0.14";
 
-        meta = {
-          homepage = http://pyopengl.sourceforge.net/;
-          description = "PyOpenGL, the Python OpenGL bindings";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.14.tar.gz";
+      sha256 = "0vpfqhng4cky7chliknkxv910iabqbfcxvkjiankh08jkkjvi7d9";
+    };
 
-          longDescription = ''
-            PyOpenGL is the cross platform Python binding to OpenGL and
-            related APIs.  The binding is created using the standard (in
-            Python 2.5) ctypes library, and is provided under an extremely
-            liberal BSD-style Open-Source license.
-          '';
+    # 17 tests failing
+    doCheck = false;
 
-          license = "BSD-style";
-          platforms = stdenv.lib.platforms.mesaPlatforms;
-        };
-      };
+    propagatedBuildInputs = [ self.cryptography ];
+  };
 
 
   pyquery = buildPythonPackage rec {
     name = "pyquery-1.2.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyquery/${name}.tar.gz";
       md5 = "268f08258738d21bc1920d7522f2a63b";
     };
 
-    propagatedBuildInputs = [ cssselect lxml ];
+    propagatedBuildInputs = with self; [ cssselect lxml ];
   };
 
   pyrax = buildPythonPackage rec {
     name = "pyrax-1.8.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyrax/${name}.tar.gz";
       sha256 = "0hvim60bhgfj91m7pp8jfmb49f087xqlgkqa505zw28r7yl0hcfp";
     };
@@ -6650,7 +9559,7 @@ rec {
     name = "pyreport-0.3.4c";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyreport/${name}.tar.gz";
       md5 = "3076164a7079891d149a23f9435581db";
     };
@@ -6661,15 +9570,34 @@ rec {
     meta = {
       homepage = http://pypi.python.org/pypi/pyreport;
       license = "BSD";
-      description = "Pyreport makes notes out of a python script.";
+      description = "Pyreport makes notes out of a python script";
     };
   });
 
+  pyscss = buildPythonPackage rec {
+    name = "pyScss-${version}";
+    version = "1.3.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyScss/${name}.tar.gz";
+      sha256 = "03lcp853kgr66aqrw2jd1q9jhs9h049w7zlwp7bfmly7xh832cnh";
+    };
+
+    propagatedBuildInputs = with self; [ six ]
+      ++ (optionals (pythonOlder "3.4") [ enum34 pathlib ])
+      ++ (optionals (pythonOlder "2.7") [ ordereddict ]);
+
+    meta = {
+      description = "A Scss compiler for Python";
+      homepage = http://pyscss.readthedocs.org/en/latest/;
+      license = stdenv.lib.licenses.mit;
+    };
+  };
 
   pyserial = buildPythonPackage rec {
     name = "pyserial-2.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyserial/${name}.tar.gz";
       sha256 = "3542ec0838793e61d6224e27ff05e8ce4ba5a5c5cc4ec5c6a3e8d49247985477";
     };
@@ -6683,10 +9611,27 @@ rec {
     };
   };
 
+  pymongo = buildPythonPackage rec {
+    name = "pymongo-2.8";
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/p/pymongo/${name}.tar.gz";
+      sha256 = "0d9rlxghqg9dqmcmrlf1lw9ap2g6npv6q4slp5agnm7vci9zchq5";
+    };
+
+    doCheck = false;
+
+    meta = {
+      homepage = "http://github.com/mongodb/mongo-python-driver";
+      license = [ "Apache-2.0" ];
+      description = "Python driver for MongoDB ";
+    };
+  };
+
   pysphere = buildPythonPackage rec {
     name = "pysphere-0.1.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pysphere.googlecode.com/files/${name}.zip";
       md5 = "c57cba33626ac4b1e3d1974923d59232";
     };
@@ -6702,7 +9647,7 @@ rec {
     name = "pysqlite-2.6.3";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pysqlite/${name}.tar.gz";
       sha256 = "13djzgnbi71znjjyaw4nybg6smilgszcid646j5qav7mdchkb77y";
     };
@@ -6710,7 +9655,7 @@ rec {
     # Since the `.egg' file is zipped, the `NEEDED' of the `.so' files
     # it contains is not taken into account.  Thus, we must explicitly make
     # it a propagated input.
-    propagatedBuildInputs = [ pkgs.sqlite ];
+    propagatedBuildInputs = with self; [ pkgs.sqlite ];
 
     patchPhase = ''
       substituteInPlace "setup.cfg"                                     \
@@ -6756,12 +9701,12 @@ rec {
   pysvn = pkgs.stdenv.mkDerivation {
     name = "pysvn-1.7.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pysvn.barrys-emacs.org/source_kits/pysvn-1.7.8.tar.gz";
       sha256 = "1qk7af0laby1f79bd07l9p0dxn5xmcmfwlcb9l1hk29zwwq6x4v0";
     };
 
-    buildInputs = [ python pkgs.subversion pkgs.apr pkgs.aprutil pkgs.expat pkgs.neon pkgs.openssl ]
+    buildInputs = with self; [ python pkgs.subversion pkgs.apr pkgs.aprutil pkgs.expat pkgs.neon pkgs.openssl ]
       ++ (if stdenv.isLinux then [pkgs.e2fsprogs] else []);
 
     # There seems to be no way to pass that path to configure.
@@ -6801,7 +9746,7 @@ rec {
   pytz = buildPythonPackage rec {
     name = "pytz-2013.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pytz/${name}.tar.bz2";
       md5 = "ec7076947a46a8a3cb33cbf2983a562c";
     };
@@ -6816,13 +9761,13 @@ rec {
   pyutil = buildPythonPackage (rec {
     name = "pyutil-1.7.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyutil/${name}.tar.gz";
       sha256 = "c303bb779f96073820e2eb7c9692fe15a57df491eb356839f3cb3377ed03b844";
     };
 
-    buildInputs = [ setuptoolsDarcs setuptoolsTrial ] ++ (if doCheck then [ simplejson ] else []);
-    propagatedBuildInputs = [ zbase32 argparse twisted ];
+    buildInputs = with self; [ setuptoolsDarcs setuptoolsTrial ] ++ (if doCheck then [ simplejson ] else []);
+    propagatedBuildInputs = with self; [ zbase32 argparse twisted ];
     # Tests fail because they try to write new code into the twisted
     # package, apparently some kind of plugin.
     doCheck = false;
@@ -6851,13 +9796,14 @@ rec {
     name = "pywebkitgtk-${version}";
     version = "1.1.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pywebkitgtk.googlecode.com/files/${name}.tar.bz2";
       sha256 = "1svlwyl61rvbqbcbalkg6pbf38yjyv7qkq9sx4x35yk69lscaac2";
     };
 
-    buildInputs = with pkgs; [
-      pkgconfig python gtk2 pygtk libxml2 libxslt libsoup webkitgtk2 icu
+    buildInputs = [
+      pkgs.pkgconfig pkgs.gtk2 self.pygtk pkgs.libxml2
+      pkgs.libxslt pkgs.libsoup pkgs.webkitgtk2 pkgs.icu
     ];
 
     meta = {
@@ -6871,7 +9817,7 @@ rec {
   pyxattr = buildPythonPackage (rec {
     name = "pyxattr-0.5.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/downloads/iustin/pyxattr/${name}.tar.gz";
       sha256 = "0jmkffik6hdzs7ng8c65bggss2ai40nm59jykswdf5lpd36cxddq";
     };
@@ -6879,30 +9825,48 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
-    buildInputs = [ pkgs.attr ];
+    buildInputs = with self; [ pkgs.attr ];
 
     meta = {
-      description = "A Python extension module which gives access to the extended attributes for filesystem objects available in some operating systems.";
+      description = "A Python extension module which gives access to the extended attributes for filesystem objects available in some operating systems";
       license = stdenv.lib.licenses.lgpl21Plus;
     };
   });
 
 
+  pyaml = buildPythonPackage (rec {
+    name = "pyaml-15.02.1";
+    disabled = !isPy27;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pyaml/${name}.tar.gz";
+      md5 = "e98cf27f50b9ca291ca4937c135db1c9";
+    };
+
+    buildInputs = with self; [ pyyaml ];
+
+    meta = {
+      description = "PyYAML-based module to produce pretty and readable YAML-serialized data";
+      homepage = https://github.com/mk-fg/pretty-yaml;
+    };
+  });
+
+
   pyyaml = buildPythonPackage (rec {
     name = "PyYAML-3.10";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pyyaml.org/download/pyyaml/${name}.zip";
       sha256 = "1r127fa354ppb667f4acxlzwxixap1jgzjrr790bw8mcpxv2hqaa";
     };
 
-    buildInputs = [ pkgs.pyrex ];
-    propagatedBuildInputs = [ pkgs.libyaml ];
+    buildInputs = with self; [ pkgs.pyrex ];
+    propagatedBuildInputs = with self; [ pkgs.libyaml ];
 
     meta = {
       description = "The next generation YAML parser and emitter for Python";
       homepage = http://pyyaml.org;
-      license = "free"; # !?
+      license = stdenv.lib.licenses.free; # !?
     };
   });
 
@@ -6910,7 +9874,7 @@ rec {
   recaptcha_client = buildPythonPackage rec {
     name = "recaptcha-client-1.0.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/recaptcha-client/${name}.tar.gz";
       md5 = "74228180f7e1fb76c4d7089160b0d919";
     };
@@ -6927,74 +9891,108 @@ rec {
    in buildPythonPackage rec {
     name = "reportlab-3.1.8";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/reportlab/${name}.tar.gz";
       md5 = "820a9fda647078503597b85cdba7ed7f";
     };
 
-    buildInputs = [freetype];
+    buildInputs = with self; [freetype];
 
     # error: invalid command 'test'
     doCheck = false;
 
     meta = {
-      description = "The ReportLab Toolkit. An Open Source Python library for generating PDFs and graphics.";
+      description = "An Open Source Python library for generating PDFs and graphics";
       homepage = http://www.reportlab.com/;
     };
   };
 
 
   requests = buildPythonPackage rec {
-    name = "requests-1.2.0";
+    name = "requests-1.2.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/requests/${name}.tar.gz";
-      md5 = "22af2682233770e5468a986f451c51c0";
+      md5 = "adbd3f18445f7fe5e77f65c502e264fb";
     };
 
     meta = {
-      description = "Requests is an Apache2 Licensed HTTP library, written in Python, for human beings..";
+      description = "An Apache2 licensed HTTP library, written in Python, for human beings";
       homepage = http://docs.python-requests.org/en/latest/;
     };
   };
 
 
   requests2 = buildPythonPackage rec {
-    name = "requests-2.2.1";
+    name = "requests-${version}";
+    version = "2.6.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/requests/${name}.tar.gz";
-      md5 = "ac27081135f58d1a43e4fb38258d6f4e";
+      sha256 = "0xadnw27m257scrhjcc66zm4z3ikg8n9h6g9akpkavr31qgyvnqw";
     };
 
     meta = {
-      description = "Requests is an Apache2 Licensed HTTP library, written in Python, for human beings..";
+      description = "An Apache2 licensed HTTP library, written in Python, for human beings";
       homepage = http://docs.python-requests.org/en/latest/;
     };
   };
 
 
   requests_oauthlib = buildPythonPackage rec {
-    name = "requests-oauthlib-0.3.2";
+    version = "v0.4.1";
+    name = "requests-oauthlib-${version}";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/r/requests-oauthlib/${name}.tar.gz";
-      md5 = "35b3b750493c231145c39db0216813e7";
+    src = pkgs.fetchurl {
+      url = "http://github.com/requests/requests-oauthlib/archive/${version}.tar.gz";
+      sha256 = "0vx252nzq5h9m9brwnw2ph8aj526y26jr2dqcafzzcdx6z4l8vj4";
     };
 
-    propagatedBuildInputs = [ oauthlib requests ];
+    doCheck = false;        # Internet tests fail when building in chroot
+    propagatedBuildInputs = with self; [ oauthlib requests2 ];
 
     meta = {
       description = "OAuthlib authentication support for Requests";
       homepage = https://github.com/requests/requests-oauthlib;
+      maintainers = with maintainers; [ prikhi ];
     };
   };
 
+  requests_toolbelt = buildPythonPackage rec {
+    version = "0.3.0";
+    name = "requests-toolbelt-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://github.com/sigmavirus24/requests-toolbelt/archive/${version}.tar.gz";
+      sha256 = "177lqpm2czx81pjg0zfs1dkbbmcn5yf1y5qxj23x6y5d28518qwl";
+    };
+
+    propagatedBuildInputs = with self; [ requests2 ];
+
+    meta = {
+      description = "A toolbelt of useful classes and functions to be used with python-requests";
+      homepage = http://toolbelt.rtfd.org;
+      maintainers = with maintainers; [ matthiasbeyer ];
+    };
+
+  };
+
+  retry_decorator = buildPythonPackage rec {
+    name = "retry_decorator-1.0.0";
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/r/retry_decorator/retry_decorator-1.0.0.tar.gz;
+      sha256 = "086zahyb6yn7ggpc58909c5r5h3jz321i1694l1c28bbpaxnlk88";
+    };
+    meta = {
+      homepage = https://github.com/pnpnpn/retry-decorator;
+      license = stdenv.lib.licenses.mit;
+    };
+  };
 
   quantities = buildPythonPackage rec {
     name = "quantities-0.10.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/q/quantities/quantities-0.10.1.tar.gz";
       md5 = "e924e21c0a5ddc9ebcdacbbe511b8ec7";
     };
@@ -7009,15 +10007,15 @@ rec {
   qutip = buildPythonPackage rec {
     name = "qutip-2.2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://qutip.googlecode.com/files/QuTiP-2.2.0.tar.gz";
       sha1 = "76ba4991322a991d580e78a197adc80d58bd5fb3";
     };
 
-    propagatedBuildInputs = [ numpy scipy matplotlib pkgs.pyqt4
+    propagatedBuildInputs = with self; [ numpy scipy matplotlib pyqt4
       cython ];
 
-    buildInputs = with pkgs; [ gcc qt4 blas ] ++ [ nose ];
+    buildInputs = [ pkgs.gcc pkgs.qt4 pkgs.blas self.nose ];
 
     meta = {
       description = "QuTiP - Quantum Toolbox in Python";
@@ -7040,7 +10038,7 @@ rec {
   redis = buildPythonPackage rec {
     name = "redis-2.9.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/redis/${name}.tar.gz";
       sha256 = "1r7lrh4kxccyhr4pyp13ilymmvh22pi7aa9514dmnhi74zn4g5xg";
     };
@@ -7057,12 +10055,12 @@ rec {
   requests_oauth2 = buildPythonPackage rec {
     name = "requests-oauth2-0.1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://github.com/maraujop/requests-oauth2/archive/0.1.1.tar.gz;
       sha256 = "1aij66qg9j5j4vzyh64nbg72y7pcafgjddxsi865racsay43xfqg";
     };
 
-    propagatedBuildInputs = [ requests_oauthlib ];
+    propagatedBuildInputs = with self; [ requests_oauthlib ];
 
     meta = {
       description = "Python's Requests OAuth2 (Open Authentication) plugin";
@@ -7071,18 +10069,39 @@ rec {
   };
 
 
+  restview = buildPythonPackage rec {
+    name = "restview-${version}";
+    version = "2.2.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/r/restview/${name}.tar.gz";
+      sha256 = "070qx694bpk2n67grm82jvvar4nqvvfmmibbnv8snl4qn41jw66s";
+    };
+
+    propagatedBuildInputs = with self; [ docutils mock pygments ];
+
+    meta = with stdenv.lib; {
+      description = "ReStructuredText viewer";
+      homepage = http://mg.pov.lt/restview/;
+      license = licenses.gpl2;
+      platforms = platforms.all;
+      maintainers = [ maintainers.koral ];
+    };
+  };
+
+
   reviewboard = buildPythonPackage rec {
     name = "ReviewBoard-1.6.16";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://downloads.reviewboard.org/releases/ReviewBoard/1.6/${name}.tar.gz";
       sha256 = "0vg3ypm57m43bscv8vswjdllv3d2j8lxqwwvpd65cl7jd1in0yr1";
     };
 
-    propagatedBuildInputs =
+    propagatedBuildInputs = with self;
       [ django_1_3 recaptcha_client pytz memcached dateutil_1_5 paramiko flup pygments
         djblets django_evolution pycrypto modules.sqlite3
-        pysvn pil psycopg2 
+        pysvn pil psycopg2
       ];
   };
 
@@ -7090,26 +10109,26 @@ rec {
   rdflib = buildPythonPackage (rec {
     name = "rdflib-4.1.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/rdflib/${name}.tar.gz";
       sha256 = "0kvaf332cqbi47rqzlpdx4mbkvw12mkrzkj8n9l19wk713d4py9w";
     };
 
     # error: invalid command 'test'
     doCheck = false;
-    
-    propagatedBuildInputs = [ isodate ];
+
+    propagatedBuildInputs = with self; [ isodate ];
 
     meta = {
-      description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information.";
+      description = "A Python library for working with RDF, a simple yet powerful language for representing information";
       homepage = http://www.rdflib.net/;
     };
   });
-  
+
   isodate = buildPythonPackage rec {
     name = "isodate-0.5.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/i/isodate/${name}.tar.gz";
       md5 = "9a267e9327feb3d021cae26002ba6e0e";
     };
@@ -7120,15 +10139,37 @@ rec {
     };
   };
 
+  robomachine = buildPythonPackage rec {
+    name = "robomachine-0.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/R/RoboMachine/RoboMachine-0.6.tar.gz";
+      md5 = "4e95eaa43afda0f363c78a88e9da7159";
+    };
+
+    propagatedBuildInputs = with self; [ pyparsing argparse robotframework ];
+
+    # Remove Windows .bat files
+    postInstall = ''
+      rm "$out"/bin/*.bat
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Test data generator for Robot Framework";
+      homepage = https://github.com/mkorpela/RoboMachine;
+      license = licenses.asl20;
+      maintainers = [ maintainers.bjornfor ];
+    };
+  };
 
   robotframework = buildPythonPackage rec {
-    version = "2.8.5";
+    version = "2.8.6";
     name = "robotframework-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/robotframework/${name}.tar.gz";
-      sha256 = "0rzdn2gvmcrxs2fvxm11h55w4j5pv0lf443fc4hl8kzwjwgjckga";
+      sha256 = "0hl44pwfkagr5272s90y0bkfllj0q1l4yw4rvkdrc6ikn6l61d9v";
     };
 
     # error: invalid command 'test'
@@ -7145,18 +10186,18 @@ rec {
 
 
   robotframework-selenium2library = buildPythonPackage rec {
-    version = "1.5.0";
+    version = "1.6.0";
     name = "robotframework-selenium2library-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/robotframework-selenium2library/${name}.tar.gz";
-      sha256 = "0hjmar9766jqfpbckac8zncyal546vm059wnkbn33f68djdcnwz1";
+      sha256 = "1asdwrpb4s7q08bx641yrh3yicgba14n3hxmsqs58mqf86ignwly";
     };
 
     # error: invalid command 'test'
     #doCheck = false;
 
-    propagatedBuildInputs = [ robotframework selenium docutils decorator ];
+    propagatedBuildInputs = with self; [ robotframework selenium docutils decorator ];
 
     meta = with stdenv.lib; {
       description = "";
@@ -7166,11 +10207,31 @@ rec {
   };
 
 
+  robotframework-tools = buildPythonPackage rec {
+    version = "0.1a115";
+    name = "robotframework-tools-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/r/robotframework-tools/${name}.tar.gz";
+      sha256 = "04gkn1zpf3rsvbqdxrrjqqi8sa0md9gqwh6n5w2m03fdwjg4lc7q";
+    };
+
+    propagatedBuildInputs = with self; [ robotframework moretools pathpy six setuptools ];
+
+    meta = with stdenv.lib; {
+      description = "Python Tools for Robot Framework and Test Libraries";
+      homepage = http://bitbucket.org/userzimmermann/robotframework-tools;
+      license = licenses.gpl3;
+      platforms = platforms.linux;
+    };
+  };
+
+
   robotsuite = buildPythonPackage rec {
     version = "1.4.2";
     name = "robotsuite-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/robotsuite/${name}.zip";
       sha256 = "0sw09vrvwv3gzqb6jvhbrz09l6nzzj3i9av34qjddqfwq7cr1bla";
     };
@@ -7178,8 +10239,8 @@ rec {
     # error: invalid command 'test'
     #doCheck = false;
 
-    buildInputs = [ unittest2 ];
-    propagatedBuildInputs = [ robotframework lxml ];
+    buildInputs = with self; [ unittest2 ];
+    propagatedBuildInputs = with self; [ robotframework lxml ];
 
     meta = with stdenv.lib; {
       description = "Python unittest test suite for Robot Framework";
@@ -7194,12 +10255,12 @@ rec {
     name = "robotframework-ride-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://robotframework-ride.googlecode.com/files/${name}.tar.gz";
       sha256 = "1lf5f4x80f7d983bmkx12sxcizzii21kghs8kf63a1mj022a5x5j";
     };
 
-    propagatedBuildInputs = [ pygments wxPython modules.sqlite3 ];
+    propagatedBuildInputs = with self; [ pygments wxPython modules.sqlite3 ];
 
     # ride_postinstall.py checks that needed deps are installed and creates a
     # desktop shortcut. We don't really need it and it clutters up bin/ so
@@ -7222,14 +10283,14 @@ rec {
 
 
   rope = buildPythonPackage rec {
-    version = "0.9.4";
+    version = "0.10.2";
     name = "rope-${version}";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/rope/${name}.tar.gz";
-      sha256 = "1fm6ahff50b10mlnc0ar4x1fv9sxmcp1g651myyqy7c50hk39h1d";
+      sha256 = "0rdlvp8h74qs49wz1hx6qy8mgp2ddwlfs7z13h9139ynq04a3z7z";
     };
 
     meta = with stdenv.lib; {
@@ -7244,12 +10305,12 @@ rec {
     version = "0.7";
     name = "ropemacs-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/ropemacs/${name}.tar.gz";
       sha256 = "1x5qf1drcdz9jfiiakc60kzqkb3ahsg9j902c5byf3gjfacdrmqj";
     };
 
-    propagatedBuildInputs = [ ropemode ];
+    propagatedBuildInputs = with self; [ ropemode ];
 
      meta = with stdenv.lib; {
        description = "a plugin for performing python refactorings in emacs";
@@ -7263,12 +10324,12 @@ rec {
     version = "0.2";
     name = "ropemode-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/r/ropemode/${name}.tar.gz";
       sha256 = "0jw6h1wvk6wk0wknqdf7s9pw76m8472jv546lqdd88jbl2scgcjl";
     };
 
-    propagatedBuildInputs = [ rope ];
+    propagatedBuildInputs = with self; [ rope ];
 
      meta = with stdenv.lib; {
        description = "a plugin for performing python refactorings in emacs";
@@ -7283,12 +10344,12 @@ rec {
   routes = buildPythonPackage rec {
     name = "routes-1.12.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://pypi.python.org/packages/source/R/Routes/Routes-1.12.3.tar.gz;
       md5 = "9740ff424ff6b841632c784a38fb2be3";
     };
 
-    propagatedBuildInputs = [ paste webtest ];
+    propagatedBuildInputs = with self; [ paste webtest ];
 
     meta = {
       description = "A Python re-implementation of the Rails routes system for mapping URLs to application actions";
@@ -7300,7 +10361,7 @@ rec {
     name = "rpkg-1.14";
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://fedorahosted.org/releases/r/p/rpkg/rpkg-1.14.tar.gz";
       sha256 = "0d053hdjz87aym1sfm6c4cxmzmy5g0gkrmrczly86skj957r77a7";
     };
@@ -7309,7 +10370,7 @@ rec {
 
     # buildPhase = "python setup.py build";
     # doCheck = false;
-    propagatedBuildInputs = [ pycurl koji GitPython pkgs.git
+    propagatedBuildInputs = with self; [ pycurl pkgs.koji GitPython pkgs.git
                               pkgs.rpm pkgs.pyopenssl ];
 
   });
@@ -7318,12 +10379,12 @@ rec {
     name = "rpyc-${version}";
     version = "3.3.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/r/rpyc/${name}.tar.gz";
       md5 = "6931cb92c41f547591b525142ccaeef1";
     };
 
-    propagatedBuildInputs = [ nose plumbum ];
+    propagatedBuildInputs = with self; [ nose plumbum ];
 
     meta = {
       description = "Remote Python Call (RPyC), a transparent and symmetric RPC library";
@@ -7335,12 +10396,12 @@ rec {
   rsa = buildPythonPackage rec {
     name = "rsa-3.1.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://bitbucket.org/sybren/python-rsa/get/version-3.1.2.tar.bz2";
       sha256 = "0ag2q4gaapi74x47q74xhcjzs4b7r2bb6zrj2an4sz5d3yd06cgf";
     };
 
-    buildInputs = [ pythonPackages.pyasn1 ];
+    buildInputs = with self; [ self.pyasn1 ];
 
     meta = {
       homepage = http://stuvel.eu/rsa;
@@ -7349,11 +10410,45 @@ rec {
     };
   };
 
+  squaremap = buildPythonPackage rec {
+    name = "squaremap-1.0.4";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/S/SquareMap/SquareMap-1.0.4.tar.gz";
+      md5 = "e36a453baddb97c19af6f79d5ba51f38";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Hierarchic visualization control for wxPython";
+      homepage = https://launchpad.net/squaremap;
+      license = licenses.bsd3;
+    };
+  };
+
+  runsnakerun = buildPythonPackage rec {
+    name = "runsnakerun-2.0.4";
+
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/R/RunSnakeRun/RunSnakeRun-2.0.4.tar.gz";
+      md5 = "3220b5b89994baee70b1c24d7e42a306";
+    };
+
+    propagatedBuildInputs = [ self.squaremap self.wxPython28 ];
+
+    meta = with stdenv.lib; {
+      description = "GUI Viewer for Python profiling runs";
+      homepage = http://www.vrplumber.com/programming/runsnakerun/;
+      license = licenses.bsd3;
+    };
+  };
+
   rtslib_fb = buildPythonPackage rec {
     version = "2.1.fb43";
     name = "rtslib-fb-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/agrover/rtslib-fb/archive/v${version}.tar.gz";
       sha256 = "1b59vyy12g6rix9l2fxx0hjiq33shkb79v57gwffs57vh74wc53v";
     };
@@ -7366,16 +10461,16 @@ rec {
   };
 
   seqdiag = buildPythonPackage rec {
-    name = "seqdiag-0.9.0";
+    name = "seqdiag-0.9.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/seqdiag/${name}.tar.gz";
-      md5 = "92946555ce219df18002e6c88b4055d3";
+      sha256 = "1qa7d0m1wahvmrj95rxkb6128cbwd4w3gy8gbzncls66h46bifiz";
     };
 
-    buildInputs = [ pep8 nose unittest2 docutils ];
+    buildInputs = with self; [ pep8 nose unittest2 docutils ];
 
-    propagatedBuildInputs = [ blockdiag ];
+    propagatedBuildInputs = with self; [ blockdiag ];
 
     # Tests fail:
     #   ...
@@ -7392,16 +10487,38 @@ rec {
   };
 
 
+  scapy = buildPythonPackage rec {
+    name = "scapy-2.2.0";
+
+    disabled = isPy3k || isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "http://www.secdev.org/projects/scapy/files/${name}.tar.gz";
+      sha256 = "1bqmp0xglkndrqgmybpwmzkv462mir8qlkfwsxwbvvzh9li3ndn5";
+    };
+
+    propagatedBuildInputs = [ modules.readline ];
+
+    meta = with stdenv.lib; {
+      description = "Powerful interactive network packet manipulation program";
+      homepage = http://www.secdev.org/projects/scapy/;
+      license = licenses.gpl2;
+      platforms = platforms.linux;
+      maintainers = [ maintainers.bjornfor ];
+    };
+  };
+
+
   scipy = buildPythonPackage rec {
-    name = "scipy-0.12.0";
+    name = "scipy-0.14.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/scipy/${name}.tar.gz";
-      md5 = "8fb4da324649f655e8557ea92b998786";
+      md5 = "d7c7f4ccf8b07b08d6fe49d5cd51f85d";
     };
 
-    buildInputs = [pkgs.gfortran];
-    propagatedBuildInputs = [ numpy ];
+    buildInputs = [ pkgs.gfortran ];
+    propagatedBuildInputs = with self; [ numpy ];
 
     # TODO: add ATLAS=${pkgs.atlas}
     preConfigure = ''
@@ -7421,16 +10538,44 @@ rec {
   };
 
 
+  scikitlearn = buildPythonPackage {
+    name = "scikit-learn-0.15.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/s/scikit-learn/scikit-learn-0.15.2.tar.gz";
+      md5 = "d9822ad0238e17b382a3c756ea94fe0d";
+    };
+
+    buildInputs = with self; [ nose pillow pkgs.gfortran pkgs.glibcLocales ];
+    propagatedBuildInputs = with self; [ numpy scipy pkgs.atlas ];
+
+    buildPhase = ''
+      export ATLAS=${pkgs.atlas}
+      ${self.python.executable} setup.py build_ext -i --fcompiler='gnu95'
+    '';
+
+    checkPhase = ''
+      LC_ALL="en_US.UTF-8" HOME=$TMPDIR ATLAS="" nosetests
+    '';
+
+    meta = {
+      description = "A set of python modules for machine learning and data mining";
+      homepage = http://scikit-learn.org;
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
+
   scripttest = buildPythonPackage rec {
     version = "1.3";
     name = "scripttest-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/scripttest/scripttest-${version}.tar.gz";
       md5 = "1d1c5117ccfc7b5961cae6c1020c0848";
     };
 
-    buildInputs = [ nose pytest ];
+    buildInputs = with self; [ nose pytest ];
 
     meta = {
       description = "A library for testing interactive command-line applications";
@@ -7439,32 +10584,32 @@ rec {
   };
 
   selenium = buildPythonPackage rec {
-    name = "selenium-2.39.0";
+    name = "selenium-2.44.0";
     src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/selenium/${name}.tar.gz";
-      sha256 = "1kisndzl9s0vs0a5paqx35hxq28id3xyi1gfsjaixsi6rs0ibhhh";
+      sha256 = "0l70pqwg88imbylcd831vg8nj8ipy4zr331f6qjccss7vn56i2h5";
     };
 
-    buildInputs = [pkgs.xlibs.libX11];
+    buildInputs = with self; [pkgs.xlibs.libX11];
 
     # Recompiling x_ignore_nofocus.so as the original one dlopen's libX11.so.6 by some
     # absolute paths. Replaced by relative path so it is found when used in nix.
     x_ignore_nofocus =
-      pkgs.fetchsvn {
-        url = http://selenium.googlecode.com/svn/tags/selenium-2.25.0/cpp/linux-specific;
-        rev = 17641;
-        sha256 = "1wif9r6307qhlcp2zbg6n05yvxxn9ppkxh8gpsplcbyh22zi7bcd";
+      pkgs.fetchFromGitHub {
+        owner = "SeleniumHQ";
+        repo = "selenium";
+        rev = "selenium-2.44.0";
+        sha256 = "13aqm0dwy17ghimy7m2mxjwlyc1k7zk5icxzrs1sa896056f1dyy";
       };
 
-    preInstall = ''
-      cp "${x_ignore_nofocus}/"* .
-      sed -i 's|dlopen(library,|dlopen("libX11.so.6",|' x_ignore_nofocus.c
+    patchPhase = ''
+      cp "${x_ignore_nofocus}/cpp/linux-specific/"* .
+      substituteInPlace x_ignore_nofocus.c --replace "/usr/lib/libX11.so.6" "${pkgs.xlibs.libX11}/lib/libX11.so.6"
       gcc -c -fPIC x_ignore_nofocus.c -o x_ignore_nofocus.o
       gcc -shared \
         -Wl,${if stdenv.isDarwin then "-install_name" else "-soname"},x_ignore_nofocus.so \
         -o x_ignore_nofocus.so \
-        x_ignore_nofocus.o \
-        ${if stdenv.isDarwin then "-lx11" else ""}
+        x_ignore_nofocus.o
       cp -v x_ignore_nofocus.so py/selenium/webdriver/firefox/${if pkgs.stdenv.is64bit then "amd64" else "x86"}/
     '';
   };
@@ -7472,14 +10617,14 @@ rec {
   setuptoolsDarcs = buildPythonPackage {
     name = "setuptools-darcs-1.2.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/setuptools_darcs/setuptools_darcs-1.2.9.tar.gz";
       sha256 = "d37ce11030addbd729284c441facd0869cdc6e5c888dc5fa0a6f1edfe3c3e617";
     };
 
     # In order to break the dependency on darcs -> ghc, we don't add
     # darcs as a propagated build input.
-    propagatedBuildInputs = [ darcsver ];
+    propagatedBuildInputs = with self; [ darcsver ];
 
     meta = {
       description = "setuptools plugin for the Darcs version control system";
@@ -7494,12 +10639,12 @@ rec {
   setuptoolsTrial = buildPythonPackage {
     name = "setuptools-trial-0.5.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/setuptools_trial/setuptools_trial-0.5.12.tar.gz";
       md5 = "f16f4237c9ee483a0cd13208849d96ad";
     };
 
-    propagatedBuildInputs = [ twisted ];
+    propagatedBuildInputs = with self; [ twisted ];
 
     meta = {
       description = "setuptools plug-in that helps run unit tests built with the \"Trial\" framework (from Twisted)";
@@ -7514,7 +10659,7 @@ rec {
   simplejson = buildPythonPackage (rec {
     name = "simplejson-3.3.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/simplejson/${name}.tar.gz";
       md5 = "0e29b393bceac8081fa4e93ff9f6a001";
     };
@@ -7536,15 +10681,34 @@ rec {
     };
   });
 
+  simpleparse = buildPythonPackage rec {
+    version = "2.1.1";
+    name = "simpleparse-${version}";
+
+    disabled = isPy3k || isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/S/SimpleParse/SimpleParse-${version}.tar.gz";
+      sha256 = "1n8msk71lpl3kv086xr2sv68ppgz6228575xfnbszc6p1mwr64rg";
+    };
+
+    meta = with stdenv.lib; {
+      description = "A Parser Generator for Python";
+      homepage = https://pypi.python.org/pypi/SimpleParse;
+      platforms = platforms.all;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
+
   sigal = buildPythonPackage rec {
     name = "sigal-0.7.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/sigal/${name}.tar.gz";
       md5 = "d2386706ac8543378aebde1ea4edeba4";
     };
 
-    propagatedBuildInputs = [ jinja2 markdown pillow pilkit clint argh pytest ];
+    propagatedBuildInputs = with self; [ jinja2 markdown pillow pilkit clint argh pytest ];
 
     meta = with stdenv.lib; {
       description = "Yet another simple static gallery generator";
@@ -7554,15 +10718,30 @@ rec {
     };
   };
 
+  pgpdump = self.buildPythonPackage rec {
+    name = "pgpdump-1.5";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pgpdump/pgpdump-1.5.tar.gz";
+      md5 = "040a451c8e63de3e61fc5b66efa7fca5";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Python library for parsing PGP packets";
+      homepage = https://github.com/toofishes/python-pgpdump;
+      license = licenses.bsd3;
+    };
+  };
+
   spambayes = buildPythonPackage rec {
-    name = "spambayes-1.1a6";
+    name = "spambayes-1.1b1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/spambayes/${name}.tar.gz";
-      sha256 = "0lqhn2v0avgwxmk4dq9lkwr2g39ls2p6x8hqk5w07wd462cjsx8l";
+      sha256 = "0kqvjb89b02wp41p650ydfspi1s8d7akx1igcrw62diidqbxp04n";
     };
 
-    propagatedBuildInputs = [ pydns lockfile ];
+    propagatedBuildInputs = with self; [ pydns lockfile ];
 
     meta = with stdenv.lib; {
       description = "Statistical anti-spam filter, initially based on the work of Paul Graham";
@@ -7573,17 +10752,15 @@ rec {
   shapely = buildPythonPackage rec {
     name = "Shapely-1.3.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/S/Shapely/${name}.tar.gz";
       sha256 = "099sc7ajpp6hbgrx3c0bl6hhkz1mhnr0ahvc7s4i3f3b7q1zfn7l";
     };
 
-    buildInputs = [ pkgs.geos ];
+    buildInputs = with self; [ pkgs.geos pkgs.glibcLocales ];
 
     preConfigure = ''
       export LANG="en_US.UTF-8";
-    '' + stdenv.lib.optionalString stdenv.isLinux ''
-      export LOCALE_ARCHIVE="${pkgs.glibcLocales}/lib/locale/locale-archive";
     '';
 
     patchPhase = ''
@@ -7601,14 +10778,14 @@ rec {
   stevedore = buildPythonPackage rec {
     name = "stevedore-0.15";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/stevedore/${name}.tar.gz";
       sha256 = "bec9269cbfa58de4f0849ec79bb7d54eeeed9df8b5fbfa1637fbc68062822847";
     };
 
-    buildInputs = [ pbr pip ];
+    buildInputs = with self; [ pbr pip ] ++ optional isPy26 argparse;
 
-    propagatedBuildInputs = [ setuptools ];
+    propagatedBuildInputs = with self; [ setuptools ];
 
     meta = {
       description = "Manage dynamic plugins for Python applications";
@@ -7621,7 +10798,7 @@ rec {
     name = "pydns-2.3.6";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pydns/${name}.tar.gz";
       sha256 = "0qnv7i9824nb5h9psj0rwzjyprwgfiwh5s5raa9avbqazy5hv5pi";
     };
@@ -7631,22 +10808,24 @@ rec {
   };
 
   sympy = buildPythonPackage rec {
-    name = "sympy-0.7.4";
+    name = "sympy-0.7.6";
+    disabled = isPy34 || isPyPy;  # some tests fail
 
-    src = fetchurl {
-      url    = "https://github.com/sympy/sympy/releases/download/${name}/${name}.tar.gz";
-      sha256 = "0h1b9mx0snyyybj1x1ga69qssgjzkkgx2rw6nddjhyz1fknf8ywh";
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/s/sympy/${name}.tar.gz";
+      sha256 = "19yp0gy4i7p4g6l3b8vaqkj9qj7yqb5kqy0qgbdagpzgkdz958yz";
     };
-    
+
+    buildInputs = [ pkgs.glibcLocales ];
+
     preCheck = ''
       export LANG="en_US.UTF-8"
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
     '';
 
     meta = with stdenv.lib; {
       description = "A Python library for symbolic mathematics";
       homepage    = http://www.sympy.org/;
-      license     = "free";
+      license     = licenses.bsd3;
       maintainers = with maintainers; [ lovek323 ];
       platforms   = platforms.unix;
     };
@@ -7655,7 +10834,7 @@ rec {
   pilkit = buildPythonPackage rec {
     name = "pilkit-1.1.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pilkit/${name}.tar.gz";
       md5 = "659dd67440f4b576889f2cd350f43d7b";
     };
@@ -7667,7 +10846,7 @@ rec {
     # tests fail, see https://github.com/matthewwithanm/pilkit/issues/9
     doCheck = false;
 
-    buildInputs = [ pillow nose_progressive nose mock blessings ];
+    buildInputs = with self; [ pillow nose_progressive nose mock blessings ];
 
     meta = with stdenv.lib; {
       maintainers = [ maintainers.iElectric ];
@@ -7677,7 +10856,7 @@ rec {
   clint = buildPythonPackage rec {
     name = "clint-0.3.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/c/clint/${name}.tar.gz";
       md5 = "7dcd43fb08bfb84c7d63e9356ada7b73";
     };
@@ -7686,7 +10865,7 @@ rec {
       nosetests
     '';
 
-    buildInputs = [ pillow nose_progressive nose mock blessings nose ];
+    buildInputs = with self; [ pillow nose_progressive nose mock blessings nose ];
 
     meta = with stdenv.lib; {
       maintainers = [ maintainers.iElectric ];
@@ -7694,19 +10873,19 @@ rec {
   };
 
   argh = buildPythonPackage rec {
-    name = "argh-0.23.3";
+    name = "argh-0.26.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/a/argh/${name}.tar.gz";
-      md5 = "25bb02c6552b42875f2c36714e0ff16c";
+      sha256 = "1nqham81ihffc9xmw85dz3rg3v90rw7h0dp3dy0bh3qkp4n499q6";
     };
 
-    preCheck = ''
+    checkPhase = ''
       export LANG="en_US.UTF-8"
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
+      py.test
     '';
 
-    buildInputs = [ pytest py mock ];
+    buildInputs = with self; [ pytest py mock pkgs.glibcLocales ];
 
     meta = with stdenv.lib; {
       maintainers = [ maintainers.iElectric ];
@@ -7716,13 +10895,13 @@ rec {
   nose_progressive = buildPythonPackage rec {
     name = "nose-progressive-1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/n/nose-progressive/${name}.tar.gz";
       md5 = "180be93929c5962044a35489f193259d";
     };
 
-    buildInputs = [ pillow blessings nose ];
-    propagatedBuildInputs = [ modules.curses ];
+    buildInputs = with self; [ pillow blessings nose ];
+    propagatedBuildInputs = with self; [ modules.curses ];
 
     meta = with stdenv.lib; {
       maintainers = [ maintainers.iElectric ];
@@ -7732,7 +10911,7 @@ rec {
   blessings = buildPythonPackage rec {
     name = "blessings-1.5.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/b/blessings/${name}.tar.gz";
       md5 = "fbbddbf20b1f9a13e3fa612b1e086fd8";
     };
@@ -7740,7 +10919,7 @@ rec {
     # 4 failing tests
     doCheck = false;
 
-    buildInputs = [ nose modules.curses ];
+    buildInputs = with self; [ nose modules.curses ];
 
     meta = with stdenv.lib; {
       maintainers = [ maintainers.iElectric ];
@@ -7749,12 +10928,12 @@ rec {
 
   semantic = buildPythonPackage rec {
     name = "semantic-1.0.3";
-    
+
     disabled = isPy3k;
 
-    propagatedBuildInputs = [ quantities numpy ];
+    propagatedBuildInputs = with self; [ quantities numpy ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/semantic/semantic-1.0.3.tar.gz";
       md5 = "78a150190e3e7d0f6f357b4c828e5f0d";
     };
@@ -7771,7 +10950,7 @@ rec {
 
   sexpdata = buildPythonPackage rec {
     name = "sexpdata-0.0.2";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/sexpdata/${name}.tar.gz";
       md5 = "efc44265bc27cb3d6ffed4fbf5733fc1";
     };
@@ -7788,7 +10967,7 @@ rec {
   sh = buildPythonPackage rec {
     name = "sh-1.08";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/sh/${name}.tar.gz";
       md5 = "4028bcba85daa0aef579ed24261e88a3";
     };
@@ -7802,12 +10981,34 @@ rec {
   };
 
 
+  sipsimple = buildPythonPackage rec {
+    name = "sipsimple-${version}";
+    version = "2.3.1";
+    disabled = isPy3k;
+
+    configurePhase = "find -name 'configure' -exec chmod a+x {} \\; ; find -name 'aconfigure' -exec chmod a+x {} \\; ; ${python}/bin/${python.executable} setup.py build_ext --pjsip-clean-compile";
+
+    src = pkgs.fetchurl {
+      url = "http://download.ag-projects.com/SipClient/python-${name}.tar.gz";
+      sha256 = "1n3g1zg3zgdybikdla0qdqvpa06vn1ka2asr61lb8kk6xbvqkljv";
+    };
+
+    propagatedBuildInputs = with self; [ cython pkgs.openssl dns dateutil xcaplib msrplib lxml ];
+
+    buildInputs = with pkgs; [ alsaLib ffmpeg libv4l pkgconfig sqlite ];
+
+    installPhase = "${python}/bin/${python.executable} setup.py install --prefix=$out";
+
+    doCheck = false;
+  };
+
+
   six = buildPythonPackage rec {
-    name = "six-1.7.3";
+    name = "six-1.9.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/six/${name}.tar.gz";
-      md5 = "784c6e5541c3c4952de9c0a966a0a80b";
+      sha256 = "1mci5i8mjqmljmv33h0q3d4djc13zk1kfmb3fbvd3yy43x0m4h72";
     };
 
     # error: invalid command 'test'
@@ -7822,9 +11023,9 @@ rec {
 
   skype4py = buildPythonPackage (rec {
     name = "Skype4Py-1.0.32.0";
-    disabled = isPy3k;
+    disabled = isPy3k || isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = mirror://sourceforge/skype4py/Skype4Py-1.0.32.0.tar.gz;
       sha256 = "0cmkrv450wa8v50bng5dflpwkl5c1p9pzysjkb2956w5kvwh6f5b";
     };
@@ -7838,7 +11039,7 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
-    propagatedBuildInputs = [ pkgs.xlibs.libX11 pkgs.pythonDBus pygobject ];
+    propagatedBuildInputs = with self; [ pkgs.xlibs.libX11 pkgs.pythonDBus pygobject ];
 
     meta = {
       description = "High-level, platform independent Skype API wrapper for Python";
@@ -7855,12 +11056,12 @@ rec {
   smartdc = buildPythonPackage rec {
     name = "smartdc-0.1.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = https://pypi.python.org/packages/source/s/smartdc/smartdc-0.1.12.tar.gz;
       md5 = "b960f61facafc879142b699050f6d8b4";
     };
 
-    propagatedBuildInputs = [ requests http_signature ];
+    propagatedBuildInputs = with self; [ requests http_signature ];
 
     meta = {
       description = "Joyent SmartDataCenter CloudAPI connector using http-signature authentication via Requests";
@@ -7869,10 +11070,23 @@ rec {
     };
   };
 
+  socksipy-branch = buildPythonPackage rec {
+    name = "SocksiPy-branch-1.01";
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/S/SocksiPy-branch/SocksiPy-branch-1.01.tar.gz;
+      sha256 = "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p";
+    };
+    meta = {
+      homepage = http://code.google.com/p/socksipy-branch/;
+      description = "This Python module allows you to create TCP connections through a SOCKS proxy without any special effort";
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
   sorl_thumbnail = buildPythonPackage rec {
     name = "sorl-thumbnail-11.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/sorl-thumbnail/${name}.tar.gz";
       sha256 = "050b9kzbx7jvs3qwfxxshhis090hk128maasy8pi5wss6nx5kyw4";
     };
@@ -7889,16 +11103,16 @@ rec {
 
   supervisor = buildPythonPackage rec {
     name = "supervisor-3.1.1";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/supervisor/${name}.tar.gz";
       md5 = "8c9714feaa63902f03871317e3ebf62e";
     };
 
-    buildInputs = [ mock ];
-    propagatedBuildInputs = [ meld3 ];
+    buildInputs = with self; [ mock ];
+    propagatedBuildInputs = with self; [ meld3 ];
 
     # failing tests when building under chroot as root user doesn't exist
     doCheck = false;
@@ -7913,30 +11127,46 @@ rec {
     name = "subprocess32-3.2.6";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/subprocess32/${name}.tar.gz";
       md5 = "754c5ab9f533e764f931136974b618f1";
     };
 
-    doCheck = false;
+    buildInputs = [ pkgs.bash ];
+
+    doCheck = !isPyPy;
+
+    preConfigure = ''
+      substituteInPlace test_subprocess32.py \
+        --replace '/usr/' '${pkgs.bash}/'
+    '';
+
+    checkPhase = ''
+      TMP_PREFIX=`pwd`/tmp/$name
+      TMP_INSTALL_DIR=$TMP_PREFIX/lib/${pythonPackages.python.libPrefix}/site-packages
+      PYTHONPATH="$TMP_INSTALL_DIR:$PYTHONPATH"
+      mkdir -p $TMP_INSTALL_DIR
+      python setup.py develop --prefix $TMP_PREFIX
+      python test_subprocess32.py
+    '';
 
     meta = {
-      homepage = "https://pypi.python.org/pypi/subprocess32";
-      description = "Backport of the subprocess module from Python 3.2.5 for use on 2.x.";
+      homepage = https://pypi.python.org/pypi/subprocess32;
+      description = "Backport of the subprocess module from Python 3.2.5 for use on 2.x";
       maintainers = [ stdenv.lib.maintainers.garbas ];
     };
   };
 
 
   sphinx = buildPythonPackage (rec {
-    name = "Sphinx-1.2";
+    name = "Sphinx-1.2.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/S/Sphinx/${name}.tar.gz";
-      md5 = "8516046aad73fe46dedece4e8e434328";
+      md5 = "a98c93124035b4cd7183604aec656cb3";
     };
 
-    propagatedBuildInputs = [docutils jinja2 pygments];
+    propagatedBuildInputs = with self; [docutils jinja2 pygments];
 
     meta = {
       description = "Sphinx is a tool that makes it easy to create intelligent and beautiful documentation for Python projects.";
@@ -7949,14 +11179,18 @@ rec {
 
 
   sphinxcontrib_httpdomain = buildPythonPackage (rec {
-    name = "sphinxcontrib-httpdomain-1.1.9";
+    name = "sphinxcontrib-httpdomain-1.3.0";
+
+    # Check is disabled due to this issue:
+    # https://bitbucket.org/pypa/setuptools/issue/137/typeerror-unorderable-types-str-nonetype
+    doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/sphinxcontrib-httpdomain/${name}.tar.gz";
-      md5 = "0f63aea612cc9e0b55a6c39e5b0f87b7";
+      md5 = "ad7ea42bd4c7c0ee57b1cb25bbf24aab";
     };
 
-    propagatedBuildInputs = [sphinx];
+    propagatedBuildInputs = with self; [sphinx];
 
     meta = {
       description = "Provides a Sphinx domain for describing RESTful HTTP APIs";
@@ -7968,10 +11202,30 @@ rec {
   });
 
 
+  sphinxcontrib_plantuml = buildPythonPackage (rec {
+    name = "sphinxcontrib-plantuml-0.5";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/s/sphinxcontrib-plantuml/${name}.tar.gz";
+      md5 = "4a8840fe3475a19c2af3fa877ab9d296";
+    };
+
+    propagatedBuildInputs = with self; [sphinx plantuml];
+
+    meta = {
+      description = "Provides a Sphinx domain for embedding UML diagram with PlantUML";
+
+      homepage = http://bitbucket.org/birkenfeld/sphinx-contrib;
+
+      license = "BSD";
+    };
+  });
+
+
   sphinx_pypi_upload = buildPythonPackage (rec {
     name = "Sphinx-PyPI-upload-0.2.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/S/Sphinx-PyPI-upload/${name}.tar.gz";
       md5 = "b9f1df5c8443197e4d49abbba1cfddc4";
     };
@@ -7985,10 +11239,12 @@ rec {
     };
   });
 
-  sqlalchemy = pkgs.lib.overrideDerivation sqlalchemy9 (args: rec {
+  sqlalchemy = self.sqlalchemy9.override rec {
     name = "SQLAlchemy-0.7.10";
-    disabled = isPy3k;
-    src = fetchurl {
+    disabled = isPy34;
+    doCheck = !isPyPy;
+
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/S/SQLAlchemy/${name}.tar.gz";
       sha256 = "0rhxgr85xdhjn467qfs0dkyj8x46zxcv6ad3dfx3w14xbkb3kakp";
     };
@@ -7997,27 +11253,38 @@ rec {
       # waiting for 0.7.11 release
       ../development/python-modules/sqlalchemy-0.7.10-test-failures.patch
     ];
-  });
+    preConfigure = optionalString isPy3k ''
+      python3 sa2to3.py --no-diffs -w lib test examples
+    '';
+  };
 
-  sqlalchemy8 = pkgs.lib.overrideDerivation sqlalchemy9 (args: rec {
+  sqlalchemy8 = self.sqlalchemy9.override rec {
     name = "SQLAlchemy-0.8.7";
-    src = fetchurl {
+    disabled = isPy34;
+    doCheck = !isPyPy;
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/S/SQLAlchemy/${name}.tar.gz";
       md5 = "4f3377306309e46739696721b1785335";
     };
-  });
+    preConfigure = optionalString isPy3k ''
+      python3 sa2to3.py --no-diffs -w lib test examples
+    '';
+  };
 
   sqlalchemy9 = buildPythonPackage rec {
-    name = "SQLAlchemy-0.9.4";
+    name = "SQLAlchemy-0.9.8";
+
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/S/SQLAlchemy/${name}.tar.gz";
-      md5 = "c008ea5e2565ec1418ee8461393a99b1";
+      md5 = "470ca4da4a0081efc830f0d90dd91682";
     };
 
-    buildInputs = [ nose mock ];
+    buildInputs = with self; [ nose mock ];
 
-    propagatedBuildInputs = [ modules.sqlite3 ];
+    propagatedBuildInputs = with self; [ modules.sqlite3 ];
 
     checkPhase = ''
       ${python.executable} sqla_nose.py
@@ -8032,16 +11299,17 @@ rec {
 
   sqlalchemy_imageattach = buildPythonPackage rec {
     name = "SQLAlchemy-ImageAttach-${version}";
-    version = "0.8.1";
+    version = "0.8.2";
+    disabled = isPy33;
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = https://github.com/crosspop/sqlalchemy-imageattach.git;
       rev = "refs/tags/${version}";
-      md5 = "051dd9de0757714d33c3ecd5ab37b97d";
+      md5 = "cffdcde30952176e35fccf385f579dda";
     };
 
-    buildInputs = [ pytest webob pkgs.imagemagick nose ];
-    propagatedBuildInputs = [ sqlalchemy8 wand ];
+    buildInputs = with self; [ pytest webob pkgs.imagemagick nose ];
+    propagatedBuildInputs = with self; [ sqlalchemy8 wand ];
 
     checkPhase = ''
       cd tests
@@ -8050,6 +11318,7 @@ rec {
       py.test
       cd ..
     '';
+    doCheck = !isPyPy;  # failures due to sqla version mismatch
 
     meta = {
       homepage = https://github.com/crosspop/sqlalchemy-imageattach;
@@ -8062,14 +11331,14 @@ rec {
   sqlalchemy_migrate = buildPythonPackage rec {
     name = "sqlalchemy-migrate-0.6.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://sqlalchemy-migrate.googlecode.com/files/${name}.tar.gz";
       sha1 = "17168b5fa066bd56fd93f26345525377e8a83d8a";
     };
 
-    buildInputs = [ nose unittest2 scripttest ];
+    buildInputs = with self; [ nose unittest2 scripttest ];
 
-    propagatedBuildInputs = [ tempita decorator sqlalchemy ];
+    propagatedBuildInputs = with self; [ tempita decorator sqlalchemy ];
 
     preCheck =
       ''
@@ -8086,17 +11355,37 @@ rec {
   };
 
 
+  sqlparse = buildPythonPackage rec {
+    name = "sqlparse-${version}";
+    version = "0.1.14";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/s/sqlparse/${name}.tar.gz";
+      sha256 = "1w6shyh7n139cp636sym0frdyiwybw1m7gd2l4s3d7xbaccf6qg5";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Non-validating SQL parser for Python";
+      longDescription = ''
+        Provides support for parsing, splitting and formatting SQL statements.
+      '';
+      homepage = https://github.com/andialbrecht/sqlparse;
+      license = with licenses; [ bsd3 ];
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
+
   python_statsd = buildPythonPackage rec {
     name = "python-statsd-${version}";
     version = "1.6.0";
     disabled = isPy3k;  # next release will be py3k compatible
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/python-statsd/${name}.tar.gz";
       md5 = "3a0c71a160b504b843703c3041c7d7fb";
     };
 
-    buildInputs = [ mock nose coverage ];
+    buildInputs = with self; [ mock nose coverage ];
 
     meta = {
       description = "A client for Etsy's node-js statsd server";
@@ -8110,12 +11399,12 @@ rec {
     name = "stompclient-0.3.2";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/stompclient/${name}.tar.gz";
       md5 = "af0a314b6106dd80da24a918c24a1eab";
     };
 
-    buildInputs = [ mock nose ];
+    buildInputs = with self; [ mock nose ];
 
     # XXX: Ran 0 tests in 0.217s
 
@@ -8126,17 +11415,80 @@ rec {
     };
   });
 
+  subdownloader = buildPythonPackage rec {
+    version = "2.0.18";
+    name = "subdownloader-${version}";
 
-  subunit = buildPythonPackage rec {
+    src = pkgs.fetchurl {
+      url = "https://launchpad.net/subdownloader/trunk/2.0.18/+download/subdownloader_2.0.18.orig.tar.gz";
+      sha256 = "0manlfdpb585niw23ibb8n21mindd1bazp0pnxvmdjrp2mnw97ig";
+    };
+
+    propagatedBuildInputs = with self; [ mmpython pyqt4 ];
+
+    setup = ''
+      import os
+      import sys
+
+      try:
+          if os.environ.get("NO_SETUPTOOLS"):
+              raise ImportError()
+          from setuptools import setup, Extension
+          SETUPTOOLS = True
+      except ImportError:
+          SETUPTOOLS = False
+          # Use distutils.core as a fallback.
+          # We won t be able to build the Wheel file on Windows.
+          from distutils.core import setup, Extension
+
+      with open("README") as fp:
+          long_description = fp.read()
+
+      requirements = [ ]
+
+      install_options = {
+          "name": "subdownloader",
+          "version": "2.0.18",
+          "description": "Tool for automatic download/upload subtitles for videofiles using fast hashing",
+          "long_description": long_description,
+          "url": "http://www.subdownloader.net",
+
+          "scripts": ["run.py"],
+          "packages": ["cli", "FileManagement", "gui", "languages", "modules"],
+
+      }
+      if SETUPTOOLS:
+          install_options["install_requires"] = requirements
+
+      setup(**install_options)
+    '';
+
+    postUnpack = ''
+      echo '${setup}' > $sourceRoot/setup.py
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Tool for automatic download/upload subtitles for videofiles using fast hashing";
+      homepage = http://www.subdownloader.net;
+      license = licenses.gpl3;
+      maintainers = [ maintainers.DamienCassou ];
+    };
+  };
+
+  subunit = stdenv.mkDerivation rec {
     name = "subunit-${version}";
-    version = "0.0.16";
+    version = "1.0.0";
 
-    src = fetchurl {
-      url = "https://launchpad.net/subunit/trunk/${version}/+download/python-${name}.tar.gz";
-      sha256 = "1ylla1wlmv29vdr76r5kgr7y21bz4ahi3v26mxsys42w90rfkahi";
+    src = pkgs.fetchurl {
+      url = "https://launchpad.net/subunit/trunk/${version}/+download/${name}.tar.gz";
+      sha256 = "1fnhrrwww90746an2nz2kn9qdf9pklmaf5lm22gssl6648f2rp2m";
     };
 
-    propagatedBuildInputs = [ testtools ];
+    buildInputs = (with pkgs; [ pkgconfig check cppunit perl ]) ++ [ self.wrapPython ];
+
+    propagatedBuildInputs = with self; [ testtools testscenarios ];
+
+    postFixup = "wrapPythonPrograms";
 
     meta = {
       description = "A streaming protocol for test results";
@@ -8148,25 +11500,24 @@ rec {
 
   sure = buildPythonPackage rec {
     name = "sure-${version}";
-    version = "1.2.7";
-    
+    version = "1.2.8";
+
     preBuild = ''
-      export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive
       export LC_ALL="en_US.UTF-8"
     '';
 
-    # Not picking up from PyPI because it doesn't contain tests.
-    src = fetchgit {
-      url = "git://github.com/gabrielfalcao/sure.git";
-      rev = "86ab9faa97aa9c1720c7d090deac2be385ed3d7a";
-      sha256 = "02vffcdgr6vbj80lhl925w7zqy6cqnfvs088i0rbkjs5lxc511b3";
+    # https://github.com/gabrielfalcao/sure/issues/71
+    doCheck = !isPy3k;
+    disabled = isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/s/sure/${name}.tar.gz";
+      sha256 = "0pgi9xg00wcw0m1pv5qp7jv53q38yffcmkf2fj1zlfi2b9c3njid";
     };
-    
-    
 
-    buildInputs = [ nose ];
+    buildInputs = with self; [ nose pkgs.glibcLocales ];
 
-    propagatedBuildInputs = [ six mock ];
+    propagatedBuildInputs = with self; [ six mock ];
 
     meta = {
       description = "Utility belt for automated testing";
@@ -8176,6 +11527,22 @@ rec {
   };
 
 
+  structlog = buildPythonPackage rec {
+    name = "structlog-0.4.2";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/s/structlog/${name}.tar.gz";
+      md5 = "062cda36069e8573e00c265f451f899e";
+    };
+
+    meta = {
+      description = "Painless structural logging";
+      homepage = http://www.structlog.org/;
+      license = licenses.asl20;
+    };
+  };
+
+
   # XXX: ValueError: ZIP does not support timestamps before 1980
   # svneverever =  buildPythonPackage rec {
   #   name = "svneverever-778489a8";
@@ -8186,7 +11553,7 @@ rec {
   #     sha256 = "41c9da1dab2be7b60bff87e618befdf5da37c0a56287385cb0cbd3f91e452bb6";
   #   };
   #
-  #   propagatedBuildInputs = [ pysvn argparse ];
+  #   propagatedBuildInputs = with self; [ pysvn argparse ];
   #
   #   doCheck = false;
   # };
@@ -8195,12 +11562,12 @@ rec {
     version = "2.1.fb33";
     name = "targetcli-fb-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/agrover/targetcli-fb/archive/v${version}.tar.gz";
       sha256 = "1zcm0agdpf866020b43fl8zyyyzz6r74mn1sz4xpaa0pinpwjk42";
     };
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       configshell_fb
       rtslib_fb
     ];
@@ -8212,17 +11579,46 @@ rec {
     };
   };
 
+  syncthing-gtk = buildPythonPackage rec {
+    version = "0.6.3";
+    name = "syncthing-gtk-${version}";
+    src = pkgs.fetchFromGitHub {
+      owner = "syncthing";
+      repo = "syncthing-gtk";
+      rev = "v${version}";
+      sha256 = "1qa5bw2qizjiqvkms8i31wsjf8cw9p0ciamxgfgq6n37wcalv6ms";
+    };
+
+    disabled = isPy3k;
+
+    propagatedBuildInputs = with self; [ pkgs.syncthing pygobject3 dateutil pkgs.gtk3 pyinotify pkgs.libnotify pkgs.psmisc ];
+
+    patchPhase = ''
+      substituteInPlace "scripts/syncthing-gtk" \
+              --replace "/usr/share" "$out/share"   \
+    '';
+
+
+    meta = with stdenv.lib; {
+      description = " GTK3 & python based GUI for Syncthing ";
+      maintainers = [ maintainers.DamienCassou ];
+      platforms = pkgs.syncthing.meta.platforms;
+      homepage = "https://github.com/syncthing/syncthing-gtk";
+      license = stdenv.lib.licenses.gpl2;
+    };
+  };
+
   tarsnapper = buildPythonPackage rec {
     name = "tarsnapper-0.2.1";
     disabled = isPy3k;
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = https://github.com/miracle2k/tarsnapper.git;
       rev = "620439bca68892f2ffaba1079a34b18496cc6596";
       sha256 = "06pp499qm2dxpja2jgmmq2jrcx3m4nq52x5hhil9r1jxvyiq962p";
     };
 
-    propagatedBuildInputs = [ argparse pyyaml ];
+    propagatedBuildInputs = with self; [ argparse pyyaml ];
 
     patches = [ ../development/python-modules/tarsnapper-path.patch ];
 
@@ -8236,12 +11632,12 @@ rec {
     name = "TaskCoach-1.3.22";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/taskcoach/${name}.tar.gz";
       sha256 = "1ddx56bqmh347synhgjq625ijv5hqflr0apxg0nl4jqdsqk1zmxh";
     };
 
-    propagatedBuildInputs = [ wxPython ];
+    propagatedBuildInputs = with self; [ wxPython ];
 
     # I don't know why I need to add these libraries. Shouldn't they
     # be part of wxPython?
@@ -8261,18 +11657,45 @@ rec {
     };
   };
 
+  taskw = buildPythonPackage rec {
+    version = "1.0.2";
+    name = "taskw-${version}";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/t/taskw/${name}.tar.gz";
+      sha256 = "0wa2hwplss2r56jrwib6j9sxxm02dz78878975jk9fj10p84w5kr";
+    };
+
+    patches = [ ../development/python-modules/taskw/use-template-for-taskwarrior-install-path.patch ];
+    postPatch = ''
+      substituteInPlace taskw/warrior.py \
+        --replace '@@taskwarrior@@' '${pkgs.taskwarrior}'
+    '';
+
+    buildInputs = with self; [ nose pkgs.taskwarrior tox ];
+    propagatedBuildInputs = with self; [ six dateutil pytz ];
+
+    meta = {
+      homepage =  http://github.com/ralphbean/taskw;
+      description = "Python bindings for your taskwarrior database";
+      license = licenses.gpl3Plus;
+      platforms = platforms.all;
+      maintainers = [ maintainers.pierron ];
+    };
+  };
+
   tempita = buildPythonPackage rec {
     version = "0.5.2";
     name = "tempita-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/T/Tempita/Tempita-${version}.tar.gz";
       md5 = "4c2f17bb9d481821c41b6fbee904cea1";
     };
-    
+
     disabled = isPy3k;
-    
-    buildInputs = [ nose ];
+
+    buildInputs = with self; [ nose ];
 
     meta = {
       homepage = http://pythonpaste.org/tempita/;
@@ -8281,16 +11704,35 @@ rec {
   };
 
 
+  testscenarios = buildPythonPackage rec {
+    name = "testscenarios-${version}";
+    version = "0.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/t/testscenarios/${name}.tar.gz";
+      sha256 = "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg";
+    };
+
+    propagatedBuildInputs = with self; [ testtools ];
+
+    meta = {
+      description = "a pyunit extension for dependency injection";
+      homepage = https://pypi.python.org/pypi/testscenarios;
+      license = licenses.asl20;
+    };
+  };
+
+
   testtools = buildPythonPackage rec {
     name = "testtools-${version}";
     version = "0.9.34";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/testtools/${name}.tar.gz";
       sha256 = "0s6sn9h26dif2c9sayf875x622kq8jb2f4qbc6if7gwh2sssgicn";
     };
 
-    propagatedBuildInputs = [ pythonPackages.python_mimeparse pythonPackages.extras lxml ];
+    propagatedBuildInputs = with self; [ self.python_mimeparse self.extras lxml ];
 
     meta = {
       description = "A set of extensions to the Python standard library's unit testing framework";
@@ -8304,7 +11746,7 @@ rec {
     name = "python-mimeparse-${version}";
     version = "0.1.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/python-mimeparse/${name}.tar.gz";
       sha256 = "1hyxg09kaj02ri0rmwjqi86wk4nd1akvv7n0dx77azz76wga4s9w";
     };
@@ -8313,7 +11755,7 @@ rec {
     doCheck = false;
 
     meta = {
-      description = "A module provides basic functions for parsing mime-type names and matching them against a list of media-ranges.";
+      description = "A module provides basic functions for parsing mime-type names and matching them against a list of media-ranges";
       homepage = https://code.google.com/p/mimeparse/;
       license = licenses.mit;
     };
@@ -8324,7 +11766,7 @@ rec {
     name = "extras-${version}";
     version = "0.0.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/e/extras/extras-${version}.tar.gz";
       sha256 = "1h7zx4dfyclalg0fqnfjijpn0f793a9mx8sy3b27gd31nr6dhq3s";
     };
@@ -8333,53 +11775,96 @@ rec {
     doCheck = false;
 
     meta = {
-      description = "A module provides basic functions for parsing mime-type names and matching them against a list of media-ranges.";
+      description = "A module provides basic functions for parsing mime-type names and matching them against a list of media-ranges";
       homepage = https://code.google.com/p/mimeparse/;
       license = licenses.mit;
     };
   };
 
+  texttable = self.buildPythonPackage rec {
+    name = "texttable-0.8.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/t/texttable/${name}.tar.gz";
+      md5 = "4fe37704f16ecf424b91e122defedd7e";
+    };
+
+    meta = with stdenv.lib; {
+      description = "A module to generate a formatted text table, using ASCII characters";
+      homepage = http://foutaise.org/code/;
+      license = licenses.lgpl2;
+    };
+  };
+
+  tlslite = buildPythonPackage rec {
+    name = "tlslite-${version}";
+    version = "0.4.8";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/t/tlslite/${name}.tar.gz";
+      sha256 = "1fxx6d3nw5r1hqna1h2jvqhcygn9fyshlm0gh3gp0b1ji824gd6r";
+    };
+
+    meta = {
+      description = "A pure Python implementation of SSL and TLS";
+      homepage = https://pypi.python.org/pypi/tlslite;
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
+  qrcode = buildPythonPackage rec {
+    name = "qrcode-${version}";
+    version = "5.1";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/q/qrcode/${name}.tar.gz";
+      sha256 = "0skzrvhjnnacrz52jml4i050vdx5lfcd3np172srxjaghdgfxg9k";
+    };
+
+    propagatedBuildInputs = with self; [ six ];
+
+    meta = {
+      description = "Quick Response code generation for Python";
+      home = "https://pypi.python.org/pypi/qrcode";
+      license = stdenv.lib.licenses.bsd3;
+    };
+  };
+
   tmdb3 = buildPythonPackage rec {
     name = "tmdb3-${version}";
     version = "0.6.17";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/tmdb3/${name}.zip";
       md5 = "cd259427454472164c9a2479504c9cbb";
     };
 
     meta = {
-      description = "Python implementation of the v3 API for TheMovieDB.org, allowing access to movie and cast information.";
+      description = "Python implementation of the v3 API for TheMovieDB.org, allowing access to movie and cast information";
       homepage = http://pypi.python.org/pypi/tmdb3;
       license = stdenv.lib.licenses.bsd3;
     };
   };
 
-  # TODO
-  # Installs correctly but fails tests that involve simple things like:
-  # cmd.run("tox", "-h")
-  # also, buildPythonPackage needs to supply the tox.ini correctly for projects that use tox for their tests
-  #
-
   tox = buildPythonPackage rec {
-    name = "tox-1.7.2";
-  
-    propagatedBuildInputs = [ py virtualenv ];
+    name = "tox-1.8.1";
+
+    propagatedBuildInputs = with self; [ py virtualenv ];
 
     doCheck = false;
-  
-    src = fetchurl {
+
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/tox/${name}.tar.gz";
-      md5 = "0d9b3acb1a9252659d753b0ae6b9b264";
+      md5 = "c4423cc6512932b37e5b0d1faa87bef2";
     };
   };
 
   smmap = buildPythonPackage rec {
     name = "smmap-0.8.2";
-    disabled = isPy3k;  # next release will have py3k support
+    disabled = isPy3k || isPyPy;  # next release will have py3k/pypy support
     meta.maintainers = [ stdenv.lib.maintainers.mornfall ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/s/smmap/${name}.tar.gz";
       sha256 = "0vrdgr6npmajrv658fv8bij7zgm5jmz2yxkbv8kmbv25q1f9b8ny";
     };
@@ -8389,7 +11874,7 @@ rec {
     name = "trac-1.0.1";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = http://ftp.edgewall.com/pub/trac/Trac-1.0.1.tar.gz;
       sha256 = "1nqa95fcnkpyq4jk6az7l7sqgm3b3pjq3bx1n7y4v3bad5jr1m4x";
     };
@@ -8399,7 +11884,7 @@ rec {
 
     PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
 
-    propagatedBuildInputs = [ genshi pkgs.setuptools modules.sqlite3 ];
+    propagatedBuildInputs = with self; [ genshi pkgs.setuptools modules.sqlite3 ];
 
     meta = {
       description = "Enhanced wiki and issue tracking system for software development projects";
@@ -8413,17 +11898,17 @@ rec {
     name = "transaction-${version}";
     version = "1.4.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/t/transaction/${name}.tar.gz";
       md5 = "b4ca5983c9e3a0808ff5ff7648092c76";
     };
 
-    propagatedBuildInputs = [ zope_interface ];
+    propagatedBuildInputs = with self; [ zope_interface ];
 
     meta = {
       description = "Transaction management";
       homepage = http://pypi.python.org/pypi/transaction;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
     };
   };
 
@@ -8431,15 +11916,15 @@ rec {
     name = "transmissionrpc-${version}";
     version = "0.11";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/transmissionrpc/${name}.tar.gz";
       md5 = "b2f918593e509f0e66e2e643291b436d";
     };
 
-    propagatedBuildInputs = [ six ];
+    propagatedBuildInputs = with self; [ six ];
 
     meta = {
-      description = "Python implementation of the Transmission bittorent client RPC protocol.";
+      description = "Python implementation of the Transmission bittorent client RPC protocol";
       homepage = http://pypi.python.org/pypi/transmissionrpc/;
       license = stdenv.lib.licenses.mit;
     };
@@ -8449,7 +11934,7 @@ rec {
      name = "eggdeps-${version}";
      version = "0.4";
 
-     src = fetchurl {
+     src = pkgs.fetchurl {
        url = "http://pypi.python.org/packages/source/t/tl.eggdeps/tl.${name}.tar.gz";
        md5 = "2472204a2abd0d8cd4d11ff0fbf36ae7";
      };
@@ -8457,11 +11942,11 @@ rec {
      # tests fail, see http://hydra.nixos.org/build/4316603/log/raw
      doCheck = false;
 
-     propagatedBuildInputs = [ zope_interface zope_testing ];
+     propagatedBuildInputs = with self; [ zope_interface zope_testing ];
      meta = {
        description = "A tool which computes a dependency graph between active Python eggs";
        homepage = http://thomas-lotze.de/en/software/eggdeps/;
-       license = "ZPL";
+       license = stdenv.lib.licenses.zpt20;
      };
    };
 
@@ -8469,20 +11954,20 @@ rec {
   turses = buildPythonPackage (rec {
     name = "turses-0.2.22";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/t/turses/${name}.tar.gz";
       sha256 = "1dqgvdqly4c4d6819mbkqy4g8r7zch4dkmxicfwck7q8h96wmyx3";
     };
 
-    propagatedBuildInputs = [ oauth2 urwid tweepy ] ++ optional isPy26 argparse;
+    propagatedBuildInputs = with self; [ oauth2 urwid tweepy ] ++ optional isPy26 argparse;
 
     #buildInputs = [ tox ];
     # needs tox
     doCheck = false;
 
     meta = {
-      homepage = "https://github.com/alejandrogomez/turses";
-      description = "A Twitter client for the console.";
+      homepage = https://github.com/alejandrogomez/turses;
+      description = "A Twitter client for the console";
       license = licenses.gpl3;
       maintainers = [ stdenv.lib.maintainers.garbas ];
       platforms = stdenv.lib.platforms.linux;
@@ -8493,7 +11978,7 @@ rec {
     name = "tweepy-2.3.0";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/t/tweepy/${name}.tar.gz";
       sha256 = "0wcj5g21brcqr1g7m4by4rs72lfiib4scg19qynn2wz1x77jyrzp";
     };
@@ -8507,18 +11992,58 @@ rec {
     };
   });
 
+  twiggy = buildPythonPackage rec {
+    name = "Twiggy-${version}";
+    version = "0.4.5";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/T/Twiggy/Twiggy-0.4.5.tar.gz";
+      # md5 = "b0dfbbb7f56342e448af4d22a47a339c"; # provided by pypi website.
+      sha256 = "4e8f1894e5aee522db6cb245ccbfde3c5d1aa08d31330c7e3af783b0e66eec23";
+    };
+
+    doCheck = false;
+
+    meta = {
+      homepage = http://twiggy.wearpants.org;
+      # Taken from http://i.wearpants.org/blog/meet-twiggy/
+      description = "Twiggy is the first totally new design for a logger since log4j";
+      license     = licenses.bsd3;
+      platforms = platforms.all;
+      maintainers = [ maintainers.pierron ];
+    };
+  };
+
+  twitter = buildPythonPackage rec {
+    name = "twitter-${version}";
+    version = "1.15.0";
+
+    src = pkgs.fetchurl {
+      url    = "https://pypi.python.org/packages/source/t/twitter/${name}.tar.gz";
+      sha256 = "1m6b17irb9klc345k8174pni724jzy2973z2x2jg69h83hipjw2c";
+    };
+
+    doCheck = false;
+
+    meta = {
+      description = "Twitter API library";
+      license     = licenses.mit;
+      maintainers = [ maintainers.thoughtpolice ];
+    };
+  };
+
   twisted = buildPythonPackage rec {
     # NOTE: When updating please check if new versions still cause issues
     # to packages like carbon (http://stackoverflow.com/questions/19894708/cant-start-carbon-12-04-python-error-importerror-cannot-import-name-daem)
     disabled = isPy3k;
- 
+
     name = "Twisted-11.1.0";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/T/Twisted/${name}.tar.bz2";
       sha256 = "05agfp17cndhv2w0p559lvknl7nv0xqkg10apc47fm53m8llbfvz";
     };
 
-    propagatedBuildInputs = [ zope_interface ];
+    propagatedBuildInputs = with self; [ zope_interface ];
 
     # Generate Twisted's plug-in cache.  Twited users must do it as well.  See
     # http://twistedmatrix.com/documents/current/core/howto/plugin.html#auto3
@@ -8545,9 +12070,9 @@ rec {
   tzlocal = buildPythonPackage rec {
     name = "tzlocal-1.1.1";
 
-    propagatedBuildInputs = with pythonPackages; [ pytz ];
+    propagatedBuildInputs = with self; [ pytz ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/tzlocal/tzlocal-1.1.1.zip";
       md5 = "56c2a04501b98f2a1188d003fd6d3dba";
     };
@@ -8556,22 +12081,39 @@ rec {
      doCheck = false;
 
     meta = with pkgs.stdenv.lib; {
-      description = "Tzinfo object for the local timezone.";
+      description = "Tzinfo object for the local timezone";
       homepage = https://github.com/regebro/tzlocal;
       license = licenses.cddl;
     };
   };
 
+  umemcache = buildPythonPackage rec {
+    name = "umemcache-${version}";
+    version = "1.6.3";
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/u/umemcache/${name}.zip";
+      sha256 = "211031a03576b7796bf277dbc9c9e3e754ba066bbb7fb601ab5c6291b8ec1918";
+    };
+
+    meta = {
+      description = "Ultra fast memcache client written in highly optimized C++ with Python bindings";
+      homepage = https://github.com/esnme/ultramemcache;
+      license = licenses.bsdOriginal;
+    };
+  };
+
   unittest2 = buildPythonPackage rec {
     version = "0.5.1";
     name = "unittest2-${version}";
 
     src = if python.is_py3k or false
-       then fetchurl {
+       then pkgs.fetchurl {
            url = "http://pypi.python.org/packages/source/u/unittest2py3k/unittest2py3k-${version}.tar.gz";
            sha256 = "00yl6lskygcrddx5zspkhr0ibgvpknl4678kkm6s626539grq93q";
          }
-       else fetchurl {
+       else pkgs.fetchurl {
            url = "http://pypi.python.org/packages/source/u/unittest2/unittest2-${version}.tar.gz";
            md5 = "a0af5cac92bbbfa0c3b0e99571390e0f";
          };
@@ -8587,11 +12129,31 @@ rec {
   };
 
 
+
+  update_checker = pythonPackages.buildPythonPackage rec {
+    name = "update_checker-0.11";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/u/update_checker/update_checker-0.11.tar.gz";
+      md5 = "1daa54bac316be6624d7ee77373144bb";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [ requests2 ];
+
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      description = "A python module that will check for package updates";
+      homepage = https://github.com/bboe/update_checker;
+      license = licenses.bsd2;
+    };
+  };
+
   urlgrabber =  buildPythonPackage rec {
     name = "urlgrabber-3.9.1";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://urlgrabber.baseurl.org/download/${name}.tar.gz";
       sha256 = "4437076c8708e5754ea04540e46c7f4f233734ee3590bb8a96389264fb0650d0";
     };
@@ -8599,7 +12161,7 @@ rec {
     # error: invalid command 'test'
     doCheck = false;
 
-    propagatedBuildInputs = [ pycurl ];
+    propagatedBuildInputs = with self; [ pycurl ];
 
     meta = {
       homepage = "urlgrabber.baseurl.org";
@@ -8616,7 +12178,7 @@ rec {
     # multiple:  NameError: name 'evl' is not defined
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/u/urwid/${name}.tar.gz";
       md5 = "6a05ada11b87e7b026b01fc5150855b0";
     };
@@ -8632,15 +12194,16 @@ rec {
 
   pyuv = buildPythonPackage rec {
     name = "pyuv-0.11.5";
+    disabled = isPyPy;  # see https://github.com/saghul/pyuv/issues/49
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/saghul/pyuv/archive/${name}.tar.gz";
       sha256 = "c251952cb4e54c92ab0e871decd13cf73d11ca5dba9f92962de51d12e3a310a9";
     };
 
     patches = [ ../development/python-modules/pyuv-external-libuv.patch ];
 
-    buildInputs = [ pkgs.libuvVersions.v0_11_29 ];
+    buildInputs = with self; [ pkgs.libuvVersions.v0_11_29 ];
 
     meta = {
       description = "Python interface for libuv";
@@ -8652,19 +12215,18 @@ rec {
 
   virtualenv = buildPythonPackage rec {
     name = "virtualenv-1.11.6";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/v/virtualenv/${name}.tar.gz";
       md5 = "f61cdd983d2c4e6aeabb70b1060d6f49";
     };
 
-    inherit recursivePthLoader;
-    pythonPath = [ recursivePthLoader ];
+    pythonPath = [ self.recursivePthLoader ];
 
     patches = [ ../development/python-modules/virtualenv-change-prefix.patch ];
 
-    propagatedBuildInputs = [ modules.readline modules.sqlite3 modules.curses ];
+    propagatedBuildInputs = with self; [ modules.readline modules.sqlite3 modules.curses ];
 
-    buildInputs = [ mock nose ];
+    buildInputs = with self; [ mock nose ];
 
     # XXX: Ran 0 tests in 0.003s
 
@@ -8677,15 +12239,15 @@ rec {
   };
 
   virtualenv-clone = buildPythonPackage rec {
-    name = "virtualenv-clone-0.2.4";
+    name = "virtualenv-clone-0.2.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/v/virtualenv-clone/${name}.tar.gz";
-      md5 = "71168b975eaaa91e65559bcc79290b3b";
+      md5 = "23e71d255058b2543d839af7f4ce3208";
     };
 
-    buildInputs = [pytest];
-    propagatedBuildInputs = [virtualenv];
+    buildInputs = with self; [pytest];
+    propagatedBuildInputs = with self; [virtualenv];
 
     # needs tox to run the tests
     doCheck = false;
@@ -8700,7 +12262,7 @@ rec {
   virtualenvwrapper = buildPythonPackage (rec {
     name = "virtualenvwrapper-4.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/v/virtualenvwrapper/${name}.tar.gz";
       sha256 = "514cbc22218347bf7b54bdbe49e1a5f550d2d53b1ad2491c10e91ddf48fb528f";
     };
@@ -8708,12 +12270,30 @@ rec {
     # pip depend on $HOME setting
     preConfigure = "export HOME=$TMPDIR";
 
-    buildInputs = [ pbr pip pkgs.which ];
-    propagatedBuildInputs = [ stevedore virtualenv virtualenv-clone ];
+    buildInputs = with self; [ pbr pip pkgs.which ];
+    propagatedBuildInputs = with self; [
+      stevedore
+      virtualenv
+      virtualenv-clone
+    ] ++ optional isPy26 argparse;
 
     patchPhase = ''
-      substituteInPlace "virtualenvwrapper.sh" --replace "which" "${pkgs.which}/bin/which"
-      substituteInPlace "virtualenvwrapper_lazy.sh" --replace "which" "${pkgs.which}/bin/which"
+      for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do
+        substituteInPlace "$file" --replace "which" "${pkgs.which}/bin/which"
+
+        # We can't set PYTHONPATH in a normal way (like exporting in a wrapper
+        # script) because the user has to evaluate the script and we don't want
+        # modify the global PYTHONPATH which would affect the user's
+        # environment.
+        # Furthermore it isn't possible to just use VIRTUALENVWRAPPER_PYTHON
+        # for this workaround, because this variable is well quoted inside the
+        # shell script.
+        # (the trailing " -" is required to only replace things like these one:
+        # "$VIRTUALENVWRAPPER_PYTHON" -c "import os,[...] and not in
+        # if-statements or anything like that.
+        # ...and yes, this "patch" is hacky :)
+        substituteInPlace "$file" --replace '"$VIRTUALENVWRAPPER_PYTHON" -' 'env PYTHONPATH="$VIRTUALENVWRAPPER_PYTHONPATH" "$VIRTUALENVWRAPPER_PYTHON" -'
+      done
     '';
 
     postInstall = ''
@@ -8727,8 +12307,8 @@ rec {
         mv "$wrapper" "$wrapped"
 
         cat > "$wrapper" <<- EOF
-	export PATH=$PATH:\$PATH
-	export PYTHONPATH=$PYTHONPATH:$(toPythonPath $out):\$PYTHONPATH
+	export PATH="$PATH:\$PATH"
+	export VIRTUALENVWRAPPER_PYTHONPATH="$PYTHONPATH:$(toPythonPath $out)"
 	source "$wrapped"
 	EOF
 
@@ -8747,7 +12327,7 @@ rec {
   waitress = buildPythonPackage rec {
     name = "waitress-0.8.7";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/w/waitress/${name}.tar.gz";
       md5 = "714f3d458d82a47f12fb168460de8366";
     };
@@ -8767,7 +12347,7 @@ rec {
   webcolors = buildPythonPackage rec {
     name = "webcolors-1.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/w/webcolors/${name}.tar.gz";
       md5 = "35de9d785b5c04a9cc66a2eae0519254";
     };
@@ -8787,12 +12367,12 @@ rec {
   wand = buildPythonPackage rec {
     name = "Wand-0.3.5";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/W/Wand/${name}.tar.gz";
       md5 = "10bab03bf86ce8da2a95a3b15197ae2e";
     };
 
-    buildInputs = [ pkgs.imagemagick pytest psutil memory_profiler pytest_xdist ];
+    buildInputs = with self; [ pkgs.imagemagick pytest psutil memory_profiler pytest_xdist ];
 
     meta = {
       description = "Ctypes-based simple MagickWand API binding for Python";
@@ -8802,16 +12382,42 @@ rec {
   };
 
 
+  wcwidth = buildPythonPackage rec {
+    name = "wcwidth-${version}";
+    version = "0.1.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/w/wcwidth/${name}.tar.gz";
+      sha256 = "0awx28xi938nv55qlmai3b5ddqd1w5c294gy95xh4xsx0hik2vch";
+    };
+
+    # Checks fail due to missing tox.ini file:
+    doCheck = false;
+
+    meta = with stdenv.lib; {
+      description = "Measures number of Terminal column cells of wide-character codes";
+      longDescription = ''
+        This API is mainly for Terminal Emulator implementors -- any Python
+        program that attempts to determine the printable width of a string on
+        a Terminal. It is implemented in python (no C library calls) and has
+        no 3rd-party dependencies.
+      '';
+      homepage = https://github.com/jquast/wcwidth;
+      license = with licenses; [ mit ];
+      maintainers = with maintainers; [ nckx ];
+    };
+  };
+
   webob = buildPythonPackage rec {
-    version = "1.3.1";
+    version = "1.4";
     name = "webob-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/W/WebOb/WebOb-${version}.tar.gz";
-      md5 = "20918251c5726956ba8fef22d1556177";
+      md5 = "8437607c0cc00c35f658f972516ffb55";
     };
 
-    propagatedBuildInputs = [ nose modules.ssl ];
+    propagatedBuildInputs = with self; [ nose ];
 
     meta = {
       description = "WSGI request and response object";
@@ -8825,12 +12431,12 @@ rec {
     version = "0.3.0";
     name = "websockify-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/w/websockify/websockify-${version}.tar.gz";
       md5 = "29b6549d3421907de4bbd881ecc2e1b1";
     };
 
-    propagatedBuildInputs = [ numpy ];
+    propagatedBuildInputs = with self; [ numpy ];
 
     meta = {
       description = "WebSockets support for any application/server";
@@ -8843,11 +12449,11 @@ rec {
     version = "2.0.15";
     name = "webtest-${version}";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/W/WebTest/WebTest-${version}.zip";
       md5 = "49314bdba23f4d0bd807facb2a6d3f90";
     };
-    
+
     preConfigure = ''
       substituteInPlace setup.py --replace "nose<1.3.0" "nose"
     '';
@@ -8855,9 +12461,9 @@ rec {
     # XXX: skipping two tests fails in python2.6
     doCheck = ! isPy26;
 
-    buildInputs = optionals isPy26 [ pythonPackages.ordereddict unittest2 ];
+    buildInputs = optionals isPy26 [ self.ordereddict unittest2 ];
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       nose
       webob
       six
@@ -8878,15 +12484,15 @@ rec {
   };
 
 
-  werkzeug = buildPythonPackage {
-    name = "werkzeug-0.9.4";
+  werkzeug = buildPythonPackage rec {
+    name = "Werkzeug-0.9.6";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/W/Werkzeug/Werkzeug-0.9.4.tar.gz";
-      md5 = "670fad41f57c13b71a6816765765a3dd";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/W/Werkzeug/${name}.tar.gz";
+      md5 = "f7afcadc03b0f2267bdc156c34586043";
     };
 
-    propagatedBuildInputs = [ itsdangerous ];
+    propagatedBuildInputs = with self; [ itsdangerous ];
 
     doCheck = false;            # tests fail, not sure why
 
@@ -8898,15 +12504,33 @@ rec {
   };
 
 
+
+  willie = pythonPackages.buildPythonPackage rec {
+    name = "willie-5.2.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/w/willie/willie-5.2.0.tar.gz";
+      md5 = "a19f8c34e10e3c2d0d915c894224e521";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [ feedparser pytz lxml praw pyenchant pygeoip backports_ssl_match_hostname_3_4_0_2 ];
+
+    meta = with stdenv.lib; {
+      description = "Willie is a simple, lightweight, open source, easy-to-use IRC utility bot, written in Python.";
+      homepage = http://willie.dftba.net/;
+      license = licenses.efl20;
+    };
+  };
+
   wokkel = buildPythonPackage (rec {
     url = "http://wokkel.ik.nu/releases/0.7.0/wokkel-0.7.0.tar.gz";
     name = nameFromURL url ".tar";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       inherit url;
       sha256 = "0rnshrzw8605x05mpd8ndrx3ri8h6cx713mp8sl4f04f4gcrz8ml";
     };
 
-    propagatedBuildInputs = [twisted dateutil];
+    propagatedBuildInputs = with self; [twisted dateutil];
 
     meta = {
       description = "Some (mainly XMPP-related) additions to twisted";
@@ -8919,12 +12543,12 @@ rec {
   wsgiproxy2 = buildPythonPackage rec {
     name = "WSGIProxy2-0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/W/WSGIProxy2/${name}.tar.gz";
       md5 = "157049212f1c81a8790efa31146fbabf";
     };
 
-    propagatedBuildInputs = [ six webob ];
+    propagatedBuildInputs = with self; [ six webob ];
 
     meta = {
        maintainers = [
@@ -8935,26 +12559,32 @@ rec {
     };
   };
 
+  wxPython = self.wxPython28;
 
-  wxPython = wxPython28;
-
-
-  wxPython28 = import ../development/python-modules/wxPython/2.8.nix {
-    inherit (pkgs) stdenv fetchurl pkgconfig;
-    inherit pythonPackages;
+  wxPython28 = callPackage ../development/python-modules/wxPython/2.8.nix {
     wxGTK = pkgs.wxGTK28;
   };
 
-  wxPython30 = import ../development/python-modules/wxPython/3.0.nix {
-    inherit (pkgs) stdenv fetchurl pkgconfig;
-    inherit pythonPackages;
+  wxPython30 = callPackage ../development/python-modules/wxPython/3.0.nix {
     wxGTK = pkgs.wxGTK30;
   };
 
+  xcaplib = buildPythonPackage rec {
+    name = "python-xcaplib-${version}";
+    version = "1.0.17";
+
+    src = pkgs.fetchurl {
+      url = "http://download.ag-projects.com/SipClient/${name}.tar.gz";
+      sha256 = "1bf8n9ghmgxz8kjgnwy4y7ajijy5hi7viabgh0pvzkhz9gfvck86";
+    };
+
+    propagatedBuildInputs = with self; [ eventlib application ];
+  };
+
   xe = buildPythonPackage rec {
     url = "http://www.blarg.net/%7Esteveha/xe-0.7.4.tar.gz";
     name = stdenv.lib.nameFromURL url ".tar";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       inherit url;
       sha256 = "0v9878cl0y9cczdsr6xjy8v9l139lc23h4m5f86p4kpf2wlnpi42";
     };
@@ -8971,7 +12601,7 @@ rec {
   xlib = buildPythonPackage (rec {
     name = "xlib-0.15rc1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "mirror://sourceforge/python-xlib/python-${name}.tar.bz2";
       sha256 = "0mvzz605pxzj7lfp2w6z4qglmr4rjza9xrb7sl8yn12cklzfky0m";
     };
@@ -8979,7 +12609,7 @@ rec {
     # Tests require `pyutil' so disable them to avoid circular references.
     doCheck = false;
 
-    propagatedBuildInputs = [ pkgs.xlibs.libX11 ];
+    propagatedBuildInputs = with self; [ pkgs.xlibs.libX11 ];
 
     meta = {
       description = "Fully functional X client library for Python programs";
@@ -8993,7 +12623,7 @@ rec {
   zbase32 = buildPythonPackage (rec {
     name = "zbase32-1.1.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zbase32/${name}.tar.gz";
       sha256 = "2f44b338f750bd37b56e7887591bf2f1965bfa79f163b6afcbccf28da642ec56";
     };
@@ -9001,7 +12631,7 @@ rec {
     # Tests require `pyutil' so disable them to avoid circular references.
     doCheck = false;
 
-    buildInputs = [ setuptoolsDarcs ];
+    buildInputs = with self; [ setuptoolsDarcs ];
 
     meta = {
       description = "zbase32, a base32 encoder/decoder";
@@ -9017,17 +12647,17 @@ rec {
     name = "zconfig-${version}";
     version = "3.0.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/Z/ZConfig/ZConfig-${version}.tar.gz";
       md5 = "60a107c5857c3877368dfe5930559804";
     };
 
-    propagatedBuildInputs = [ zope_testrunner ];
+    propagatedBuildInputs = with self; [ zope_testrunner ];
 
     meta = {
       description = "Structured Configuration Library";
       homepage = http://pypi.python.org/pypi/ZConfig;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
@@ -9037,7 +12667,7 @@ rec {
     name = "zc.lockfile-${version}";
     version = "1.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zc.lockfile/${name}.tar.gz";
       md5 = "f099d4cf2583a0c7bea0146a44dc4d59";
     };
@@ -9045,7 +12675,7 @@ rec {
     meta = {
       description = "Inter-process locks";
       homepage =  http://www.python.org/pypi/zc.lockfile;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
@@ -9055,20 +12685,20 @@ rec {
     name = "zdaemon-${version}";
     version = "4.0.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zdaemon/${name}.tar.gz";
       md5 = "4056e2ea35855695ed15389d9c168b92";
     };
 
-    propagatedBuildInputs  = [ zconfig ];
-    
+    propagatedBuildInputs = [ self.zconfig ];
+
     # too many deps..
     doCheck = false;
 
     meta = {
       description = "A daemon process control library and tools for Unix-based systems";
       homepage = http://pypi.python.org/pypi/zdaemon;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
@@ -9076,14 +12706,15 @@ rec {
 
   zfec = buildPythonPackage (rec {
     name = "zfec-1.4.24";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zfec/${name}.tar.gz";
       sha256 = "1ks94zlpy7n8sb8380gf90gx85qy0p9073wi1wngg6mccxp9xsg3";
     };
 
-    buildInputs = [ setuptoolsDarcs ];
-    propagatedBuildInputs = [ pyutil argparse ];
+    buildInputs = with self; [ setuptoolsDarcs ];
+    propagatedBuildInputs = with self; [ pyutil argparse ];
 
     meta = {
       homepage = http://allmydata.org/trac/zfec;
@@ -9106,55 +12737,59 @@ rec {
   zodb3 = buildPythonPackage rec {
     name = "zodb3-${version}";
     version = "3.11.0";
+    disabled = isPyPy;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/Z/ZODB3/ZODB3-${version}.tar.gz";
       md5 = "21975c1609296e7834e8cf4025af3039";
     };
 
-    propagatedBuildInputs = [ manuel transaction zc_lockfile zconfig zdaemon zope_interface zope_event BTrees persistent ZEO ];
+    propagatedBuildInputs = with self; [ manuel transaction zc_lockfile zconfig zdaemon zope_interface zope_event BTrees persistent ZEO ];
 
     meta = {
       description = "An object-oriented database for Python";
       homepage = http://pypi.python.org/pypi/ZODB3;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
-  
+
   zodb = buildPythonPackage rec {
     name = "zodb-${version}";
+    disabled = isPyPy;
+
     version = "4.0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/Z/ZODB/ZODB-${version}.tar.gz";
       md5 = "092d787524b095164231742c96b32f50";
     };
 
-    propagatedBuildInputs = [ manuel transaction zc_lockfile zconfig zdaemon zope_interface persistent BTrees ]
+    propagatedBuildInputs = with self; [ manuel transaction zc_lockfile zconfig zdaemon zope_interface persistent BTrees ]
       ++ optionals isPy3k [ zodbpickle ];
 
     preCheck = if isPy3k then ''
       # test failure on py3.4
       rm src/ZODB/tests/testDB.py
     '' else "";
-    
+
     meta = {
       description = "An object-oriented database for Python";
       homepage = http://pypi.python.org/pypi/ZODB;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
-  
-  zodbpickle = pythonPackages.buildPythonPackage rec {
+
+  zodbpickle = self.buildPythonPackage rec {
     name = "zodbpickle-0.5.2";
+    disabled = isPyPy; # https://github.com/zopefoundation/zodbpickle/issues/10
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/z/zodbpickle/${name}.tar.gz";
       md5 = "d401bd89f99ec8d56c22493e6f8c0443";
     };
-    
+
     # fails..
     doCheck = false;
 
@@ -9163,15 +12798,15 @@ rec {
     };
   };
 
-  
-  BTrees = pythonPackages.buildPythonPackage rec {
+
+  BTrees = self.buildPythonPackage rec {
     name = "BTrees-4.0.8";
-    
+
     patches = [ ./../development/python-modules/btrees_interger_overflow.patch ];
 
-    propagatedBuildInputs = [ persistent zope_interface transaction ];
+    propagatedBuildInputs = with self; [ persistent zope_interface transaction ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/B/BTrees/${name}.tar.gz";
       md5 = "7f5df4cf8dd50fb0c584c0929a406c92";
     };
@@ -9182,13 +12817,13 @@ rec {
     };
   };
 
-  
-  persistent = pythonPackages.buildPythonPackage rec {
+
+  persistent = self.buildPythonPackage rec {
     name = "persistent-4.0.8";
 
-    propagatedBuildInputs = [ zope_interface ];
+    propagatedBuildInputs = with self; [ zope_interface ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/persistent/${name}.tar.gz";
       md5 = "2942f1ca7764b1bef8d48fa0d9a236b7";
     };
@@ -9199,16 +12834,32 @@ rec {
     };
   };
 
+  xdot = buildPythonPackage rec {
+    name = "xdot-0.6";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/x/xdot/xdot-0.6.tar.gz";
+      md5 = "a8e5fc5208657b03ad1bd4c46de75724";
+    };
+
+    propagatedBuildInputs = with self; [ pygtk pygobject pkgs.graphviz ];
+
+    meta = with stdenv.lib; {
+      description = "xdot.py is an interactive viewer for graphs written in Graphviz's dot";
+      homepage = https://github.com/jrfonseca/xdot.py;
+      license = licenses.lgpl3Plus;
+    };
+  };
 
   zope_broken = buildPythonPackage rec {
     name = "zope.broken-3.6.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.broken/${name}.zip";
       md5 = "eff24d7918099a3e899ee63a9c31bee6";
     };
 
-    buildInputs = [ zope_interface ];
+    buildInputs = with self; [ zope_interface ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9217,24 +12868,24 @@ rec {
 
 
   zope_browser = buildPythonPackage rec {
-    name = "zope.browser-1.3";
+    name = "zope.browser-2.0.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.browser/${name}.zip";
-      md5 = "4ff0ddbf64c45bfcc3189e35f4214ded";
+      sha256 = "0f9r5rn9lzgi4hvkhgb6vgw8kpz9sv16jsfb9ws4am8gbqcgv2iy";
     };
 
-    propagatedBuildInputs = [ zope_interface ];
+    propagatedBuildInputs = with self; [ zope_interface ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
-  
+
   zope_browserresource = buildPythonPackage rec {
     name = "zope.browserresource-4.0.1";
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       zope_component zope_configuration zope_contenttype zope_i18n
       zope_interface zope_location zope_publisher zope_schema zope_traversing
     ];
@@ -9242,7 +12893,7 @@ rec {
     # all tests fail
     doCheck = false;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/z/zope.browserresource/zope.browserresource-4.0.1.zip";
       md5 = "81bbe92c1f04725561470f89d73222c5";
     };
@@ -9251,14 +12902,14 @@ rec {
 
 
   zope_component = buildPythonPackage rec {
-    name = "zope.component-4.0.2";
+    name = "zope.component-4.2.1";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/z/zope.component/zope.component-4.0.2.tar.gz";
-      md5 = "8c2fd4414ca23cbbe014dcaf911acebc";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/z/zope.component/zope.component-4.2.1.tar.gz";
+      sha256 = "1gzbr0j6c2h0cqnpi2cjss38wrz1bcwx8xahl3vykgz5laid15l6";
     };
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       zope_configuration zope_event zope_i18nmessageid zope_interface
       zope_testing
     ];
@@ -9273,14 +12924,14 @@ rec {
 
 
   zope_configuration = buildPythonPackage rec {
-    name = "zope.configuration-4.0.2";
+    name = "zope.configuration-4.0.3";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/z/zope.configuration/zope.configuration-4.0.2.tar.gz";
-      md5 = "40b3c7ad0b748ede532d8cfe2544e44e";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/z/zope.configuration/zope.configuration-4.0.3.tar.gz";
+      sha256 = "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n";
     };
 
-    propagatedBuildInputs = [ zope_i18nmessageid zope_schema ];
+    propagatedBuildInputs = with self; [ zope_i18nmessageid zope_schema ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9291,7 +12942,7 @@ rec {
   zope_container = buildPythonPackage rec {
     name = "zope.container-4.0.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.container/${name}.tar.gz";
       md5 = "b24d2303ece65a2d9ce23a5bd074c335";
     };
@@ -9299,7 +12950,7 @@ rec {
     # a test is failing
     doCheck = false;
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       zodb3 zope_broken zope_dottedname zope_publisher
       zope_filerepresentation zope_lifecycleevent zope_size
       zope_traversing
@@ -9314,7 +12965,7 @@ rec {
   zope_contenttype = buildPythonPackage rec {
     name = "zope.contenttype-4.0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.contenttype/${name}.tar.gz";
       md5 = "171be44753e86742da8c81b3ad008ce0";
     };
@@ -9328,7 +12979,7 @@ rec {
   zope_dottedname = buildPythonPackage rec {
     name = "zope.dottedname-3.4.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.dottedname/${name}.tar.gz";
       md5 = "62d639f75b31d2d864fe5982cb23959c";
     };
@@ -9340,17 +12991,17 @@ rec {
 
   zope_event = buildPythonPackage rec {
     name = "zope.event-${version}";
-    version = "4.0.2";
+    version = "4.0.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.event/${name}.tar.gz";
-      md5 = "e08dd299d428d77a1cfcbfe841b81872";
+      sha256 = "1w858k9kmgzfj36h65kp27m9slrmykvi5cjq6c119xqnaz5gdzgm";
     };
 
     meta = {
       description = "An event publishing system";
       homepage = http://pypi.python.org/pypi/zope.event;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
@@ -9360,17 +13011,17 @@ rec {
      name = "zope.exceptions-${version}";
      version = "4.0.5";
 
-     src = fetchurl {
+     src = pkgs.fetchurl {
        url = "http://pypi.python.org/packages/source/z/zope.exceptions/${name}.tar.gz";
        md5 = "c95569fcb444ae541777de7ae5297492";
      };
 
-     propagatedBuildInputs = [ zope_interface ];
+     propagatedBuildInputs = with self; [ zope_interface ];
 
      meta = {
        description = "Exception interfaces and implementations";
        homepage = http://pypi.python.org/pypi/zope.exceptions;
-       license = "ZPL";
+       license = stdenv.lib.licenses.zpt20;
        maintainers = [ stdenv.lib.maintainers.goibhniu ];
      };
    };
@@ -9379,12 +13030,12 @@ rec {
   zope_filerepresentation = buildPythonPackage rec {
     name = "zope.filerepresentation-3.6.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.filerepresentation/${name}.tar.gz";
       md5 = "4a7a434094f4bfa99a7f22e75966c359";
     };
 
-    propagatedBuildInputs = [ zope_schema ];
+    propagatedBuildInputs = with self; [ zope_schema ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9393,14 +13044,14 @@ rec {
 
 
   zope_i18n = buildPythonPackage rec {
-    name = "zope.i18n-3.7.4";
+    name = "zope.i18n-3.8.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.i18n/${name}.tar.gz";
-      md5 = "a6fe9d9ad53dd7e94e87cd58fb67d3b7";
+      sha256 = "045nnimmshibcq71yym2d8yrs6wzzhxq5gl7wxjnkpyjm5y0hfkm";
     };
 
-    propagatedBuildInputs = [ pytz zope_component ];
+    propagatedBuildInputs = with self; [ pytz zope_component ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9409,11 +13060,11 @@ rec {
 
 
   zope_i18nmessageid = buildPythonPackage rec {
-    name = "zope.i18nmessageid-4.0.2";
+    name = "zope.i18nmessageid-4.0.3";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/z/zope.i18nmessageid/zope.i18nmessageid-4.0.2.tar.gz";
-      md5 = "c4550f7a0b4a736186e6e0fa3b2471f7";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/z/zope.i18nmessageid/zope.i18nmessageid-4.0.3.tar.gz";
+      sha256 = "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml";
     };
 
     meta = {
@@ -9423,14 +13074,14 @@ rec {
 
 
   zope_lifecycleevent = buildPythonPackage rec {
-    name = "zope.lifecycleevent-3.6.2";
+    name = "zope.lifecycleevent-3.7.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.lifecycleevent/${name}.tar.gz";
-      md5 = "3ba978f3ba7c0805c81c2c79ea3edb33";
+      sha256 = "0s5brphqzzz89cykg61gy7zcmz0ryq1jj2va7gh2n1b3cccllp95";
     };
 
-    propagatedBuildInputs = [ zope_event zope_component ];
+    propagatedBuildInputs = with self; [ zope_event zope_component ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9439,14 +13090,14 @@ rec {
 
 
   zope_location = buildPythonPackage rec {
-    name = "zope.location-4.0.0";
+    name = "zope.location-4.0.3";
 
-    src = fetchurl {
-      url = "http://pypi.python.org/packages/source/z/zope.location/zope.location-4.0.0.tar.gz";
-      md5 = "cd0e10d5923c95e352bcde505cc11324";
+    src = pkgs.fetchurl {
+      url = "http://pypi.python.org/packages/source/z/zope.location/zope.location-4.0.3.tar.gz";
+      sha256 = "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74";
     };
 
-    propagatedBuildInputs = [ zope_proxy ];
+    propagatedBuildInputs = with self; [ zope_proxy ];
 
     # ignore circular dependency on zope_schema
     preBuild = ''
@@ -9464,12 +13115,12 @@ rec {
   zope_proxy = buildPythonPackage rec {
     name = "zope.proxy-4.1.4";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.proxy/${name}.tar.gz";
       md5 = "3bcaf8b8512a99649ecf2f158c11d05b";
     };
 
-    propagatedBuildInputs = [ zope_interface ];
+    propagatedBuildInputs = with self; [ zope_interface ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9480,12 +13131,12 @@ rec {
   zope_publisher = buildPythonPackage rec {
     name = "zope.publisher-3.12.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.publisher/${name}.tar.gz";
       md5 = "495131970cc7cb14de8e517fb3857ade";
     };
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       zope_browser zope_contenttype zope_i18n zope_security
     ];
 
@@ -9496,14 +13147,14 @@ rec {
 
 
   zope_schema = buildPythonPackage rec {
-    name = "zope.schema-4.2.2";
+    name = "zope.schema-4.4.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.schema/${name}.tar.gz";
-      md5 = "e7e581af8193551831560a736a53cf58";
+      sha256 = "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank";
     };
 
-    propagatedBuildInputs = [ zope_location zope_event zope_interface zope_testing ] ++ optional isPy26 ordereddict;
+    propagatedBuildInputs = with self; [ zope_location zope_event zope_interface zope_testing ] ++ optional isPy26 ordereddict;
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9514,12 +13165,12 @@ rec {
   zope_security = buildPythonPackage rec {
     name = "zope.security-4.0.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.security/${name}.tar.gz";
       md5 = "27d1f2873a0ee9c1f485f7b8f22d8e1c";
     };
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
       zope_component zope_configuration zope_i18nmessageid zope_schema
       zope_proxy zope_testrunner
     ];
@@ -9531,14 +13182,14 @@ rec {
 
 
   zope_size = buildPythonPackage rec {
-    name = "zope.size-3.4.1";
+    name = "zope.size-3.5.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.size/${name}.tar.gz";
-      md5 = "55d9084dfd9dcbdb5ad2191ceb5ed03d";
+      sha256 = "006xfkhvmypwd3ww9gbba4zly7n9w30bpp1h74d53la7l7fiqk2f";
     };
 
-    propagatedBuildInputs = [ zope_i18nmessageid zope_interface ];
+    propagatedBuildInputs = with self; [ zope_i18nmessageid zope_interface ];
 
     meta = {
         maintainers = [ stdenv.lib.maintainers.goibhniu ];
@@ -9547,15 +13198,17 @@ rec {
 
 
   zope_sqlalchemy = buildPythonPackage rec {
-    name = "zope.sqlalchemy-0.7.3";
+    name = "zope.sqlalchemy-0.7.5";
+
+    doCheck = !isPyPy; # https://github.com/zopefoundation/zope.sqlalchemy/issues/12
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.sqlalchemy/${name}.zip";
-      md5 = "8b317b41244fc2e67f2f286890ba59a0";
+      md5 = "0a468bd5b8884cd29fb71acbf7eaa31e";
     };
 
-    buildInputs = [ zope_testing zope_interface ];
-    propagatedBuildInputs = [ sqlalchemy9 transaction ];
+    buildInputs = with self; [ zope_testing zope_interface ];
+    propagatedBuildInputs = with self; [ sqlalchemy9 transaction ];
 
     meta = {
       maintainers = [
@@ -9571,19 +13224,19 @@ rec {
     name = "zope.testing-${version}";
     version = "4.1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.testing/${name}.tar.gz";
       md5 = "6c73c5b668a67fdc116a25b884058ed9";
     };
-    
+
     doCheck = !(python.isPypy or false);
 
-    propagatedBuildInputs = [ zope_interface zope_exceptions zope_location ];
+    propagatedBuildInputs = with self; [ zope_interface zope_exceptions zope_location ];
 
     meta = {
       description = "Zope testing helpers";
       homepage =  http://pypi.python.org/pypi/zope.testing;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
@@ -9591,22 +13244,21 @@ rec {
 
   zope_testrunner = buildPythonPackage rec {
     name = "zope.testrunner-${version}";
-    version = "4.4.1";
+    version = "4.4.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.testrunner/${name}.zip";
-      md5 = "1d689abad000419891494b30dd7d8190";
+      sha256 = "1dwk35kg0bmj2lzp4fd2bgp6dv64q5sda09bf0y8j63y53vqbsw8";
     };
 
-    propagatedBuildInputs = [ zope_interface zope_exceptions zope_testing six ] ++ optional (!python.is_py3k or false) subunit;
+    propagatedBuildInputs = with self; [ zope_interface zope_exceptions zope_testing six ] ++ optional (!python.is_py3k or false) subunit;
 
-    # a test is failing
-    doCheck = false;
+    doCheck = !isPy27;
 
     meta = {
       description = "A flexible test runner with layer support";
       homepage = http://pypi.python.org/pypi/zope.testrunner;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
@@ -9615,12 +13267,12 @@ rec {
   zope_traversing = buildPythonPackage rec {
     name = "zope.traversing-4.0.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.traversing/${name}.zip";
       md5 = "5cc40c552f953939f7c597ebbedd586f";
     };
 
-    propagatedBuildInputs = [ zope_location zope_security zope_publisher transaction zope_tales ];
+    propagatedBuildInputs = with self; [ zope_location zope_security zope_publisher transaction zope_tales ];
 
     # circular dependency on zope_browserresource
     doCheck = false;
@@ -9634,58 +13286,56 @@ rec {
   zope_interface = buildPythonPackage rec {
     name = "zope.interface-4.1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/z/zope.interface/${name}.tar.gz";
       md5 = "edcd5f719c5eb2e18894c4d06e29b6c6";
     };
 
-    propagatedBuildInputs = [ zope_event ];
+    propagatedBuildInputs = with self; [ zope_event ];
 
     meta = {
       description = "Zope.Interface";
       homepage = http://zope.org/Products/ZopeInterface;
-      license = "ZPL";
+      license = stdenv.lib.licenses.zpt20;
       maintainers = [ stdenv.lib.maintainers.goibhniu ];
     };
   };
 
+  hgsvn = buildPythonPackage rec {
+    name = "hgsvn-0.3.5";
+    src = pkgs.fetchurl rec {
+      url = "http://pypi.python.org/packages/source/h/hgsvn/${name}.zip";
+      sha256 = "043yvkjf9hgm0xzhmwj1qk3fsmbgwm39f4wsqkscib9wfvxs8wbg";
+    };
+    disabled = isPy3k || isPyPy;
 
-  # XXX: link broken
-  # hgsvn = buildPythonPackage rec {
-  #   name = "hgsvn-0.1.8";
-  #   src = fetchurl rec {
-  #     name = "hgsvn-0.1.8.tar.gz";
-  #     url = "http://pypi.python.org/packages/source/h/hgsvn/${name}.tar.gz#md5=56209eae48b955754e09185712123428";
-  #     sha256 = "18a7bj1i0m4shkxmdvw1ci5i0isq5vqf0bpwgrhnk305rijvbpch";
-  #   };
-  #
-  #   buildInputs = [ pkgs.setuptools ];
-  #   doCheck = false;
-  #
-  #     meta = {
-  #     description = "HgSVN";
-  #     homepage = http://pypi.python.org/pypi/hgsvn;
-  #   };
-  # };
+    buildInputs = with self; [ pkgs.setuptools ];
+    doCheck = false;
+
+      meta = {
+      description = "HgSVN";
+      homepage = http://pypi.python.org/pypi/hgsvn;
+    };
+  };
 
   cliapp = buildPythonPackage rec {
     name = "cliapp-${version}";
     version = "1.20140719";
     disabled = isPy3k;
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "http://code.liw.fi/debian/pool/main/p/python-cliapp/python-cliapp_${version}.orig.tar.gz";
       sha256 = "0kxl2q85n4ggvbw2m8crl11x8n637mx6y3a3b5ydw8nhlsiqijgp";
     };
 
-    buildInputs = [ sphinx ];
+    buildInputs = with self; [ sphinx ];
 
     # error: invalid command 'test'
     doCheck = false;
 
     meta = {
       homepage = http://liw.fi/cliapp/;
-      description = "Python framework for Unix command line programs.";
+      description = "Python framework for Unix command line programs";
       maintainers = [ stdenv.lib.maintainers.rickynils ];
     };
   };
@@ -9694,9 +13344,9 @@ rec {
   tornado = buildPythonPackage rec {
     name = "tornado-3.2";
 
-    propagatedBuildInputs = [ backports_ssl_match_hostname_3_4_0_2 ];
+    propagatedBuildInputs = with self; [ backports_ssl_match_hostname_3_4_0_2 ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/tornado/${name}.tar.gz";
       md5 = "bd83cee5f1a5c5e139e87996d00b251b";
     };
@@ -9704,38 +13354,80 @@ rec {
     doCheck = false;
   };
 
+  tokenlib = buildPythonPackage rec {
+    name = "tokenlib-${version}";
+    version = "0.3.1";
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/tokenlib.git;
+      rev = "refs/tags/${version}";
+      sha256 = "0dmq41sy64jmkj7n49jgbpii5n5d41ci263lyhqbff5slr289m51";
+    };
+
+    propagatedBuildInputs = with self; [ requests webob ];
+  };
 
   tornadokick = buildPythonPackage rec {
-    name = "tornadokick-2014.07.23";
+    name = "tornadokick-0.2.1";
 
-    propagatedBuildInputs = [ tornado ];
+    propagatedBuildInputs = with self; [ tornado ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/tornadokick/${name}.tar.gz";
-      md5 = "201d26de2993a554b16140af3b4ee1b6";
+      md5 = "95ee5a295ce3f361c6f843c4f39cbb8c";
     };
 
     meta = {
-      description = "The TornadoKick Web Toolkit for Tornado Web Framework.";
+      description = "A Toolkit for the Tornado Web Framework";
       homepage = http://github.com/multoncore/tornadokick;
       license = stdenv.lib.licenses.asl20;
     };
   };
 
+  screenkey = buildPythonPackage rec {
+    version = "0.2-b3634a2c6eb6d6936c3b2c1ef5078bf3a84c40c6";
+    name = "screenkey-${version}";
+
+    propagatedBuildInputs = with self; [ pygtk distutils_extra xlib pkgs.xorg.xmodmap ];
+
+    preConfigure = ''
+      substituteInPlace setup.py --replace "/usr/share" "./share"
+
+      # disable the feature that binds a shortcut to turning on/off
+      # screenkey. This is because keybinder is not packages in Nix as
+      # of today.
+      substituteInPlace Screenkey/screenkey.py \
+        --replace "import keybinder" "" \
+        --replace "        keybinder.bind(self.options['hotkey'], self.hotkey_cb, show_item)" ""
+    '';
+
+    src = pkgs.fetchgit {
+        url = https://github.com/scs3jb/screenkey.git;
+        rev = "b3634a2c6eb6d6936c3b2c1ef5078bf3a84c40c6";
+        sha256 = "eb754917e98e03cb9d528eb5f57a08c88fa7a8172f92325a9fe796b2daf14db0";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/scs3jb/screenkey;
+      description = "A screencast tool to show your keys";
+      license = stdenv.lib.licenses.gpl3Plus;
+      maintainers = [ maintainers.DamienCassou ];
+      platforms = platforms.linux;
+    };
+  };
 
   tarman = buildPythonPackage rec {
     version = "0.1.3";
     name = "tarman-${version}";
-    
+
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/tarman/tarman-${version}.zip";
       sha256 = "0ri6gj883k042xaxa2d5ymmhbw2bfcxdzhh4bz7700ibxwxxj62h";
     };
 
-    buildInputs = [ unittest2 nose mock ];
-    propagatedBuildInputs = [ modules.curses libarchive ];
+    buildInputs = with self; [ unittest2 nose mock ];
+    propagatedBuildInputs = with self; [ modules.curses libarchive ];
 
     # tests are still failing
     doCheck = false;
@@ -9747,36 +13439,79 @@ rec {
     name = "libarchive-${version}";
     disabled = isPy3k;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://python-libarchive.googlecode.com/files/python-libarchive-${version}.tar.gz";
       sha256 = "0j4ibc4mvq64ljya9max8832jafi04jciff9ia9qy0xhhlwkcx8x";
     };
 
-    propagatedBuildInputs = [ pkgs.libarchive ];
+    propagatedBuildInputs = with self; [ pkgs.libarchive ];
   };
 
+  pybrowserid = buildPythonPackage rec {
+    name = "PyBrowserID-${version}";
+    version = "0.9.2";
+    disabled = isPy3k; # Errors in the test suite.
+
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla/PyBrowserID.git;
+      rev = "refs/tags/${version}";
+      sha256 = "0nyqb0v8yrkqnrqsh1hlhvzr2pyvkxvkw701p3gpsvk29c0gb5n6";
+    };
+
+    doCheck = false;  # some tests use networking
+
+    buildInputs = with self; [ mock unittest2 ];
+    propagatedBuildInputs = with self; [ requests ];
+
+    meta = with stdenv.lib; {
+      description = "Python library for the BrowserID Protocol";
+      homepage    = "https://github.com/mozilla/PyBrowserID";
+      license     = licenses.mpl20;
+    };
+  };
 
   pyzmq = buildPythonPackage rec {
     name = "pyzmq-13.0.0";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/pyzmq/pyzmq-13.0.0.zip";
       md5 = "fa2199022e54a393052d380c6e1a0934";
     };
-    buildInputs = [ pkgs.zeromq3 ];
-    propagatedBuildInputs = [  ];
+    buildInputs = with self; [ pkgs.zeromq3 ];
     doCheck = false;
   };
 
+  tokenserver = buildPythonPackage rec {
+    name = "tokenserver-${version}";
+    version = "1.2.11";
+
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/tokenserver.git;
+      rev = "refs/tags/${version}";
+      sha256 = "1pjrw7xhhqx7h4s08h1lsaa499r2ymc41zdknjimn6zlqdjdk1fb";
+    };
+
+    doCheck = false;
+    propagatedBuildInputs = with self; [ cornice mozsvc pybrowserid tokenlib ];
+
+    patchPhase = ''
+      sed -i "s|'testfixtures'||" setup.py
+    '';
+
+    meta = {
+      maintainers = [ ];
+      platforms = stdenv.lib.platforms.all;
+    };
+  };
 
   tissue = buildPythonPackage rec {
     name = "tissue-0.9.2";
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/t/tissue/${name}.tar.gz";
       md5 = "87dbcdafff41bfa1b424413f79aa9153";
     };
 
-    buildInputs = [ nose ];
-    propagatedBuildInputs = [ pep8 ];
+    buildInputs = with self; [ nose ];
+    propagatedBuildInputs = with self; [ pep8 ];
 
     meta = {
       maintainers = [
@@ -9792,19 +13527,19 @@ rec {
     name = "tracing-${version}";
     version = "0.8";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "http://code.liw.fi/debian/pool/main/p/python-tracing/python-tracing_${version}.orig.tar.gz";
       sha256 = "1l4ybj5rvrrcxf8csyq7qx52izybd502pmx70zxp46gxqm60d2l0";
     };
 
-    buildInputs = [ sphinx ];
+    buildInputs = with self; [ sphinx ];
 
     # error: invalid command 'test'
     doCheck = false;
 
     meta = {
       homepage = http://liw.fi/tracing/;
-      description = "Python debug logging helper.";
+      description = "Python debug logging helper";
       maintainers = [ stdenv.lib.maintainers.rickynils ];
     };
   };
@@ -9812,7 +13547,7 @@ rec {
   translationstring = buildPythonPackage rec {
     name = "translationstring-1.1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/t/translationstring/${name}.tar.gz";
       md5 = "0979b46d8f0f852810c8ec4be5c26cf2";
     };
@@ -9832,19 +13567,19 @@ rec {
     version = "0.23";
     disabled = isPy3k;
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "http://code.liw.fi/debian/pool/main/p/python-ttystatus/python-ttystatus_${version}.orig.tar.gz";
       sha256 = "0ymimviyjyh2iizqilg88g4p26f5vpq1zm3cvg7dr7q4y3gmik8y";
     };
 
-    buildInputs = [ sphinx ];
+    buildInputs = with self; [ sphinx ];
 
     # error: invalid command 'test'
     doCheck = false;
 
     meta = {
       homepage = http://liw.fi/ttystatus/;
-      description = "Progress and status updates on terminals for Python.";
+      description = "Progress and status updates on terminals for Python";
       maintainers = [ stdenv.lib.maintainers.rickynils ];
     };
   };
@@ -9853,34 +13588,52 @@ rec {
     name = "larch-${version}";
     version = "1.20131130";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "http://code.liw.fi/debian/pool/main/p/python-larch/python-larch_${version}.orig.tar.gz";
       sha256 = "1hfanp9l6yc5348i3f5sb8c5s4r43y382hflnbl6cnz4pm8yh5r7";
     };
 
-    buildInputs = [ sphinx ];
-    propagatedBuildInputs = [ tracing ttystatus cliapp ];
+    buildInputs = with self; [ sphinx ];
+    propagatedBuildInputs = with self; [ tracing ttystatus cliapp ];
 
     # error: invalid command 'test'
     doCheck = false;
 
     meta = {
       homepage = http://liw.fi/larch/;
-      description = "Python B-tree library.";
+      description = "Python B-tree library";
       maintainers = [ stdenv.lib.maintainers.rickynils ];
     };
   };
 
 
+  websocket_client = buildPythonPackage rec {
+    name = "websocket-client-0.17.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/w/websocket-client/${name}.tar.gz";
+      md5 = "c86591719085eaf4a01c2275e0c834fc";
+    };
+
+    propagatedBuildInputs = with self; [ six backports_ssl_match_hostname_3_4_0_2 unittest2 argparse ];
+
+    meta = {
+      homepage = https://github.com/liris/websocket-client;
+      description = "Websocket client for python";
+      license = licenses.lgpl2;
+    };
+  };
+
+
   webhelpers = buildPythonPackage rec {
     name = "WebHelpers-1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/W/WebHelpers/${name}.tar.gz";
       md5 = "32749ffadfc40fea51075a7def32588b";
     };
 
-    buildInputs = [ routes markupsafe webob nose ];
+    buildInputs = with self; [ routes markupsafe webob nose ];
 
     # TODO: failing tests https://bitbucket.org/bbangert/webhelpers/pull-request/1/fix-error-on-webob-123/diff
     doCheck = false;
@@ -9898,7 +13651,7 @@ rec {
     name = "whisper-${version}";
     version = "0.9.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/w/whisper/${name}.tar.gz";
       md5 = "5fac757cc4822ab0678dbe0d781d904e";
     };
@@ -9917,12 +13670,12 @@ rec {
     name = "carbon-${version}";
     version = "0.9.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/c/carbon/${name}.tar.gz";
       md5 = "66967d5a622fd29973838fcd10eb34f3";
     };
 
-    propagatedBuildInputs = [ whisper txamqp zope_interface twisted ];
+    propagatedBuildInputs = with self; [ whisper txamqp zope_interface twisted ];
 
     # error: invalid command 'test'
     doCheck = false;
@@ -9935,10 +13688,28 @@ rec {
   };
 
 
+  ujson = buildPythonPackage rec {
+    name = "ujson-1.33";
+
+    disabled = isPyPy;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/u/ujson/${name}.zip";
+      md5 = "8148a2493fff78940feab1e11dc0a893";
+    };
+
+    meta = {
+      homepage = http://pypi.python.org/pypi/ujson;
+      description = "Ultra fast JSON encoder and decoder for Python";
+      license = licenses.bsd3;
+    };
+  };
+
+
   unidecode = buildPythonPackage rec {
     name = "Unidecode-0.04.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/U/Unidecode/${name}.tar.gz";
       md5 = "351dc98f4512bdd2e93f7a6c498730eb";
     };
@@ -9955,7 +13726,7 @@ rec {
   pyusb = buildPythonPackage rec {
     name = "pyusb-1.0.0b1";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/pyusb/${name}.tar.gz";
       md5 = "5cc9c7dd77b4d12fcc22fee3b39844bc";
     };
@@ -9978,14 +13749,14 @@ rec {
 
   usbtmc = buildPythonPackage rec {
     name = "usbtmc-${version}";
-    version = "0.5";
+    version = "0.6";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://github.com/python-ivi/python-usbtmc/archive/v${version}.tar.gz";
-      sha256 = "0xn8whjcdn8wgs9j1gj7sw7fh425akdmq3hi448m36fywldbhryg";
+      sha256 = "1wnw6ndc3s1i8zpbikz5zc40ijvpraqdb0xn8zmqlyn95xxfizw2";
     };
 
-    propagatedBuildInputs = [ pyusb ];
+    propagatedBuildInputs = with self; [ pyusb ];
 
     meta = {
       description = "Python implementation of the USBTMC instrument control protocol";
@@ -10000,12 +13771,12 @@ rec {
     name = "txamqp-${version}";
     version = "0.3";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "https://launchpad.net/txamqp/trunk/${version}/+download/python-txamqp_${version}.orig.tar.gz";
       sha256 = "1r2ha0r7g14i4b5figv2spizjrmgfpspdbl1m031lw9px2hhm463";
     };
 
-    buildInputs = [ twisted ];
+    buildInputs = with self; [ twisted ];
 
     meta = {
       homepage = https://launchpad.net/txamqp;
@@ -10018,7 +13789,7 @@ rec {
     name = "versiontools-1.9.1";
     doCheck = (!isPy3k);
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/v/versiontools/${name}.tar.gz";
       sha256 = "1xhl6kl7f4srgnw6zw4lr8j2z5vmrbaa83nzn2c9r2m1hwl36sd9";
     };
@@ -10029,12 +13800,12 @@ rec {
     name = "graphite-web-${version}";
     version = "0.9.12";
 
-    src = fetchurl rec {
+    src = pkgs.fetchurl rec {
       url = "https://pypi.python.org/packages/source/g/graphite-web/${name}.tar.gz";
       md5 = "8edbb61f1ffe11c181bd2cb9ec977c72";
     };
 
-    propagatedBuildInputs = [ django_1_3 django_tagging modules.sqlite3 whisper pkgs.pycairo ldap memcached ];
+    propagatedBuildInputs = with self; [ django_1_3 django_tagging modules.sqlite3 whisper pkgs.pycairo ldap memcached ];
 
     postInstall = ''
       wrapProgram $out/bin/run-graphite-devel-server.py \
@@ -10058,17 +13829,104 @@ rec {
     };
   };
 
+  graphite_api = buildPythonPackage rec {
+    name = "graphite-api-1.0.1";
+    disabled = isPyPy;
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/brutasse/graphite-api.git";
+      rev = "b6f75e8a08fae695c094fece6de611b893fc65fb";
+      sha256 = "41b90d5f35e99a020a6b1b77938690652521d1841b3165574fcfcee807ce4e6a";
+    };
+
+    checkPhase = "nosetests";
+
+    propagatedBuildInputs = with self; [
+      flask
+      flask_cache
+      cairocffi
+      pyparsing
+      pytz
+      pyyaml
+      raven
+      six
+      structlog
+      tzlocal
+    ];
+
+    buildInputs = with self; [
+      nose
+      mock
+    ];
+
+    LD_LIBRARY_PATH = "${pkgs.cairo}/lib";
+
+    meta = {
+      description = "Graphite-web, without the interface. Just the rendering HTTP API.";
+      homepage = https://github.com/brutasse/graphite-api;
+      license = licenses.asl20;
+    };
+  };
+
+  graphite_influxdb = buildPythonPackage rec {
+    name = "graphite-influxdb-0.3";
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/vimeo/graphite-influxdb.git";
+      rev = "2273d12a24e1d804685a36debfd4224b7416b62f";
+      sha256 = "e386eaf190793d3ad0a42a74b9e137a968a51fc3806f602ff756e09c0c0648a8";
+    };
+
+    propagatedBuildInputs = with self; [ influxdb graphite_api ];
+
+    passthru.moduleName = "graphite_influxdb.InfluxdbFinder";
+
+    meta = {
+      description = "An influxdb backend for Graphite-web and graphite-api";
+      homepage = https://github.com/vimeo/graphite-influxdb;
+      license = licenses.asl20;
+    };
+  };
+
+  graphite_pager = buildPythonPackage rec {
+    name = "graphite-pager-${version}";
+    version = "2bbfe91220ec1e0ca1cdf4b5564386482a44ed7d";
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/offlinehacker/graphite-pager.git";
+      sha256 = "aa932f941efe4ed89971fe7572218b020d1a144259739ef78db6397b968eef62";
+      rev = version;
+    };
+
+    buildInputs = with self; [ nose mock ];
+    propagatedBuildInputs = with self; [
+      jinja2 pyyaml redis requests pagerduty
+      python_simple_hipchat pushbullet
+    ];
+
+    patchPhase = "> requirements.txt";
+    checkPhase = "nosetests";
+
+    meta = {
+      description = "A simple alerting application for Graphite metrics";
+      homepage = https://github.com/seatgeek/graphite-pager;
+      maintainers = [ maintainers.offline ];
+      license = licenses.bsd2;
+    };
+  };
+
+
   pyspotify = buildPythonPackage rec {
     name = "pyspotify-${version}";
 
-    version = "1.11";
+    version = "1.12";
 
-    src = fetchurl {
-      url = "https://github.com/mopidy/pyspotify/archive/v1.11.tar.gz";
-      sha256 = "089ml6pqr3f2d15n70jpzbaqjp5pjgqlyv4algkxw92xscjw2izg";
+    src = pkgs.fetchurl {
+      url = "https://github.com/mopidy/pyspotify/archive/v${version}.tar.gz";
+      sha256 = "0bj6p4hafj1yp0j5n1rxww39nvi3w6y3azadz8a8nxb3b4a8f1xn";
     };
 
-    buildInputs = [ pkgs.libspotify ]
+    buildInputs = with self; [ pkgs.libspotify ]
       ++ stdenv.lib.optional stdenv.isDarwin pkgs.install_name_tool;
 
     # python zip complains about old timestamps
@@ -10101,7 +13959,7 @@ rec {
 
     version = "1.2.0";
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = "https://github.com/jodal/pykka.git";
       rev = "refs/tags/v${version}";
       sha256 = "17vv2q636zp2fvxrp7ckgnz1ifaffcj5vdxvfb4isd1d32c49amb";
@@ -10122,7 +13980,7 @@ rec {
 
     version = "git-20130303";
 
-    src = fetchgit {
+    src = pkgs.fetchgit {
       url = "https://github.com/Lawouach/WebSocket-for-Python.git";
       rev = "ace276500ca7e4c357595e3773be151d37bcd6e2";
       sha256 = "04m4m3ncn7g4rb81xg5n28imns7rsq8d2w98gjpaib6vlmyly3g1";
@@ -10147,7 +14005,7 @@ rec {
     name = "gdata-${version}";
     version = "2.0.17";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://gdata-python-client.googlecode.com/files/${name}.tar.gz";
       # sha1 = "d2d9f60699611f95dd8c328691a2555e76191c0c";
       sha256 = "0bdaqmicpbj9v3p0swvyrqs7m35bzwdw1gy56d3k09np692jfwmd";
@@ -10168,12 +14026,12 @@ rec {
     version = "0.11";
     disabled = isPy34;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://freshfoo.com/projects/IMAPClient/${name}.tar.gz";
       sha256 = "1w54h8gz25qf6ggazzp6xf7kvsyiadsjfkkk17gm0p6pmzvvccbn";
     };
-    
-    buildInputs = [ mock ];
+
+    buildInputs = with self; [ mock ];
 
     preConfigure = ''
       sed -i '/distribute_setup/d' setup.py
@@ -10191,7 +14049,7 @@ rec {
     name = "Logbook-${version}";
     version = "0.4.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/L/Logbook/${name}.tar.gz";
       # md5 = "143cb15af4c4a784ca785a1546ad1b93";
       sha256 = "1g2pnhxh7m64qsrs0ifwcmpfk7gqjvrawd8z66i001rsdnq778v0";
@@ -10206,18 +14064,18 @@ rec {
 
   libvirt = pkgs.stdenv.mkDerivation rec {
     name = "libvirt-python-${version}";
-    version = "1.2.7";
+    version = "1.2.12";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://libvirt.org/sources/python/${name}.tar.gz";
-      sha256 = "0wg0pnvrwfjdl8haxr2dyfhdasddq97zy6l27xwrvd1hnh1394f1";
+      sha256 = "17w4mpsp4pxhbzs128ig3gxp12rr0j41mxch8i11dqjrjy7l6bs3";
     };
 
-    buildInputs = [ python pkgs.pkgconfig pkgs.libvirt lxml ];
+    buildInputs = with self; [ python pkgs.pkgconfig pkgs.libvirt lxml ];
 
-    buildPhase = "python setup.py build";
+    buildPhase = "${python.interpreter} setup.py build";
 
-    installPhase = "python setup.py install --prefix=$out";
+    installPhase = "${python.interpreter} setup.py install --prefix=$out";
 
     meta = {
       homepage = http://www.libvirt.org/;
@@ -10227,17 +14085,15 @@ rec {
   };
 
   searx = buildPythonPackage rec {
-    name = "searx-${rev}";
-    rev = "44d3af9fb2482cd0df1a8ababbe2fdf27ab33172";
+    name = "searx-0.7.0";
 
-    src = fetchgit {
-      url = "git://github.com/asciimoo/searx";
-      inherit rev;
-      sha256 = "1w505pzdkkcglq782wg7f5fxrw9i5jzp7px20c2xz18pps2m3rsm";
+    src = pkgs.fetchurl {
+      url = "https://github.com/asciimoo/searx/archive/v0.7.0.tar.gz";
+      sha256 = "0vq2zjdr1c8mr3zkycqq3732zf4pybbbrs3kzplqgf851k9zfpbw";
     };
 
-    propagatedBuildInputs = [ pyyaml lxml grequests flaskbabel flask requests
-      gevent speaklater Babel pytz dateutil ];
+    propagatedBuildInputs = with self; [ pyyaml lxml grequests flaskbabel flask requests
+      gevent speaklater Babel pytz dateutil pygments ];
 
     meta = {
       homepage = https://github.com/asciimoo/searx;
@@ -10247,18 +14103,19 @@ rec {
     };
   };
 
+
   grequests = buildPythonPackage rec {
     name = "grequests-0.2.0";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/g/grequests/${name}.tar.gz";
       sha256 = "0lafzax5igbh8y4x0krizr573wjsxz7bhvwygiah6qwrzv83kv5c";
     };
 
-    buildInputs = [ requests gevent ];
+    buildInputs = with self; [ requests gevent ];
 
     meta = {
-      description = "GRequests allows you to use Requests with Gevent to make asyncronous HTTP Requests easily.";
+      description = "GRequests allows you to use Requests with Gevent to make asynchronous HTTP Requests easily.";
       homepage = https://github.com/kennethreitz/grequests;
       license = "bsd";
       maintainers = [ stdenv.lib.maintainers.matejc ];
@@ -10268,12 +14125,12 @@ rec {
   flaskbabel = buildPythonPackage rec {
     name = "Flask-Babel-0.9";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/F/Flask-Babel/${name}.tar.gz";
       sha256 = "0k7vk4k54y55ma0nx2k5s0phfqbriwslhy5shh3b0d046q7ibzaa";
     };
 
-    buildInputs = [ flask jinja2 speaklater Babel pytz ];
+    buildInputs = with self; [ flask jinja2 speaklater Babel pytz ];
 
     meta = {
       description = "Adds i18n/l10n support to Flask applications";
@@ -10286,7 +14143,7 @@ rec {
   speaklater = buildPythonPackage rec {
     name = "speaklater-1.3";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/s/speaklater/${name}.tar.gz";
       sha256 = "1ab5dbfzzgz6cnz4xlwx79gz83id4bhiw67k1cgqrlzfs0va7zjr";
     };
@@ -10299,10 +14156,22 @@ rec {
     };
   };
 
+  pushbullet = buildPythonPackage rec {
+    name = "pushbullet.py-${version}";
+    version = "0.5.0";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.5.0.tar.gz";
+      md5 = "36c83ba5f7d5208bb86c00eba633f921";
+    };
+
+    propagatedBuildInputs = with self; [requests websocket_client python_magic ];
+  };
+
   power = buildPythonPackage rec {
     name = "power-1.2";
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "http://pypi.python.org/packages/source/p/power/${name}.tar.gz";
       sha256 = "09a00af8357f63dbb1a1eb13b82e39ccc0a14d6d2e44e5b235afe60ce8ee8195";
     };
@@ -10315,55 +14184,225 @@ rec {
   };
 
   udiskie = buildPythonPackage rec {
-    name = "udiskie-0.8.0";
+    version = "1.1.2";
+    name = "udiskie-${version}";
 
-    src = fetchurl {
-      url = "https://github.com/coldfix/udiskie/archive/0.8.0.tar.gz";
-      sha256 = "0yzrnl7bq0dkcd3wh55kbf41c4dbh7dky0mqx0drvnpxlrvzhvp2";
+    src = pkgs.fetchurl {
+      url = "https://github.com/coldfix/udiskie/archive/${version}.tar.gz";
+      sha256 = "07fyvwp4rga47ayfsmb79p2784sqrih0sglwnd9c4x6g63xgljvb";
     };
 
-    propagatedBuildInputs = with pythonPackages; [ pygtk pyyaml dbus notify pkgs.udisks2 ];
+    preConfigure = ''
+      export XDG_RUNTIME_DIR=/tmp
+    '';
+
+    propagatedBuildInputs = with self; [ pkgs.gobjectIntrospection pkgs.gtk3 pyyaml pygobject3 pkgs.libnotify pkgs.udisks2 pkgs.gettext self.docopt ];
+
+    preFixup = ''
+        wrapProgram $out/bin/* \
+          --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH"
+    '';
 
     # tests require dbusmock
     doCheck = false;
 
     meta = with stdenv.lib; {
-      description = "Removable disk automounter for udisks.";
+      description = "Removable disk automounter for udisks";
       license = licenses.mit;
       homepage = https://github.com/coldfix/udiskie;
+      maintainers = [ maintainers.AndersonTorres ];
     };
   };
 
-  pythonefl = buildPythonPackage rec {
+  pythonefl_1_13 = buildPythonPackage rec {
     name = "python-efl-${version}";
-    version = "1.10.0";
-    src = fetchurl {
-      url = "http://download.enlightenment.org/rel/bindings/python/${name}.tar.gz";
-      sha256 = "1inv2qalnm9paifdwyh9q3ffxcp9bjj92phvfw1rgkaildvfji5i";
+    version = "1.13.0";
+    src = pkgs.fetchurl {
+      url = "http://download.enlightenment.org/rel/bindings/python/${name}.tar.bz2";
+      sha256 = "0yy4v0f04dgdz21wd2c09x9w6lzsbq6g12s8895laln44l5aqd82";
     };
     preConfigure = ''
-      export NIX_CFLAGS_COMPILE="-I${pkgs.e18.efl}/include/eo-1 -I${pkgs.e18.efl}/include/eina-1 -I${pkgs.e18.efl}/include/eina-1/eina -I${pkgs.e18.efl}/include/evas-1 -I${dbus}/include/dbus-1.0 -I${pkgs.e18.efl}/include/efl-1 -I${pkgs.e18.efl}/include/eet-1 -I${pkgs.e18.efl}/include/ecore-1 -I${pkgs.e18.efl}/include/ecore-evas-1 -I${pkgs.e18.efl}/include/ecore-file-1 -I${pkgs.e18.efl}/include/ecore-input-1 -I${pkgs.e18.efl}/include/ecore-imf-1 -I${pkgs.e18.efl}/include/ecore-con-1 -I${pkgs.e18.efl}/include/edje-1 -I${pkgs.e18.efl}/include/eldbus-1 -I${pkgs.e18.efl}/include/efreet-1 -I${pkgs.e18.efl}/include/ethumb-client-1 -I${pkgs.e18.efl}/include/ethumb-1 -I${pkgs.e18.efl}/include/ecore-x-1 $NIX_CFLAGS_COMPILE"
+      export NIX_CFLAGS_COMPILE="-I${pkgs.e19.efl}/include/eo-1 -I${pkgs.e19.efl}/include/eina-1 -I${pkgs.e19.efl}/include/eina-1/eina -I${pkgs.e19.efl}/include/evas-1 -I${self.dbus}/include/dbus-1.0 -I${pkgs.e19.efl}/include/efl-1 -I${pkgs.e19.efl}/include/eet-1 -I${pkgs.e19.efl}/include/ecore-1 -I${pkgs.e19.efl}/include/ecore-evas-1 -I${pkgs.e19.efl}/include/ecore-file-1 -I${pkgs.e19.efl}/include/ecore-input-1 -I${pkgs.e19.efl}/include/ecore-imf-1 -I${pkgs.e19.efl}/include/ecore-con-1 -I${pkgs.e19.efl}/include/edje-1 -I${pkgs.e19.efl}/include/eldbus-1 -I${pkgs.e19.efl}/include/efreet-1 -I${pkgs.e19.efl}/include/ethumb-client-1 -I${pkgs.e19.efl}/include/ethumb-1 -I${pkgs.e19.efl}/include/ecore-x-1 $NIX_CFLAGS_COMPILE"
     '';
-    buildInputs = [ pkgs.pkgconfig pkgs.e18.efl pkgs.e18.elementary ];
+    buildInputs = with self; [ pkgs.pkgconfig pkgs.e19.efl pkgs.e19.elementary ];
     meta = {
       description = "Python bindings for EFL and Elementary.";
       homepage = http://enlightenment.org/;
-      maintainers = [ stdenv.lib.maintainers.matejc ];
+      maintainers = [ stdenv.lib.maintainers.matejc stdenv.lib.maintainers.tstrobel ];
       platforms = stdenv.lib.platforms.linux;
       license = stdenv.lib.licenses.gpl3;
     };
   };
 
+  toposort = buildPythonPackage rec {
+    name = "toposort-${version}";
+    version = "1.1";
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/t/toposort/toposort-1.1.tar.gz";
+      sha256 = "1izmirbwmd9xrk7rq83p486cvnsslfa5ljvl7rijj1r64zkcnf3a";
+    };
+    meta = {
+      description = "A topological sort algorithm";
+      homepage = https://pypi.python.org/pypi/toposort/1.1;
+      maintainers = [ stdenv.lib.maintainers.tstrobel ];
+      platforms = stdenv.lib.platforms.linux;
+      #license = stdenv.lib.licenses.apache;
+    };
+  };
+
+  snapperGUI = buildPythonPackage rec {
+    name = "Snapper-GUI";
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/ricardomv/snapper-gui";
+      rev = "11d98586b122180c75a86fccda45c4d7e3137591";
+      sha256 = "7a9f86fc17dbf130526e70c3e925eac30e2c74d6b932efbf7e7cd9fbba6dc4b1";
+    };
+
+    # no tests available
+    doCheck = false;
+
+    propagatedBuildInputs = with self; [ pygobject3 dbus ];
+
+    meta = {
+      homepage = https://github.com/ricardomv/snapper-gui;
+      description = "Graphical frontend for snapper";
+      license = licenses.gpl2;
+      maintainers = [ stdenv.lib.maintainers.tstrobel ];
+    };
+  };
+
 
-# python2.7 specific packages
-} // optionalAttrs isPy27 (
-  with pythonPackages;
+  redNotebook = buildPythonPackage rec {
+    name = "rednotebook-1.8.1";
 
-{
+    src = pkgs.fetchurl {
+      url = "mirror://sourceforge/rednotebook/${name}.tar.gz";
+      sha256 = "00b7s4xpqpxsbzjvjx9qsx5d84m9pvn383c5di1nsfh35pig0rzn";
+    };
 
-  pypi2nix = pythonPackages.buildPythonPackage rec {
+    # no tests available
+    doCheck = false;
+
+    propagatedBuildInputs = with self; [ pygtk pywebkitgtk pyyaml chardet ];
+
+    meta = {
+      homepage = http://rednotebook.sourceforge.net/index.html;
+      description = "A modern journal that includes a calendar navigation, customizable templates, export functionality and word clouds";
+      license = licenses.gpl2;
+      maintainers = [ stdenv.lib.maintainers.tstrobel ];
+    };
+  };
+
+
+  moreItertools = buildPythonPackage rec {
+    name = "more-itertools-2.2";
+
+    disabled = isPy3k;
+
+    src = pkgs.fetchurl {
+      url = "https://github.com/erikrose/more-itertools/archive/2.2.tar.gz";
+      sha256 = "4606417182e0a1289e23fb7f964a64ca9fdaafb7c1999034dc4fa0cc5850c478";
+    };
+
+    propagatedBuildInputs = with self; [ nose ];
+
+    meta = {
+      homepage = "https://more-itertools.readthedocs.org";
+      description = "Expansion of the itertools module.";
+      license = licenses.mit;
+    };
+  };
+
+
+  uncertainties = buildPythonPackage rec {
+    name = "uncertainties-2.4.6.1";
+
+    src = pkgs.fetchurl {
+       url = "https://github.com/lebigot/uncertainties/archive/2.4.6.1.tar.gz";
+       sha256 = "993ad1a380185ff9548510401ed89fe96cf1f18ca48b44657356c8dcd3ad5032";
+    };
+
+    buildInputs = with self; [ nose numpy ];
+
+    meta = {
+      homepage = "http://pythonhosted.org/uncertainties/";
+      description = "Transparent calculations with uncertainties on the quantities involved (aka error propagation)";
+      license = licenses.bsd3;
+    };
+  };
+
+
+  funcy = buildPythonPackage rec {
+    name = "funcy-1.4";
+
+    src = pkgs.fetchurl {
+        url = "https://github.com/Suor/funcy/archive/1.4.tar.gz";
+        sha256 = "694e29aa67d03a6ab006f1854740b65f4f87e581afb33853f80e647ddb5f24e7";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Collection of fancy functional tools focused on practicality.";
+      homepage = "http://funcy.readthedocs.org/";
+      license = stdenv.lib.licenses.bsd3;
+
+    };
+  };
+
+  boto-230 = buildPythonPackage rec {
+    name = "boto-2.30.0";
+    disabled = ! isPy27;
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/b/boto/boto-2.30.0.tar.gz;
+      sha256 = "12gl8azmx1vv8dbv9jhnsbhjpc2dd1ng0jlbcg734k6ggwq1h6hh";
+    };
+    doCheck = false;
+    meta = {
+      homepage = https://github.com/boto/boto;
+      license = licenses.mit;
+      description = "Python interface to Amazon Web Services";
+    };
+  };
+
+  gcs-oauth2-boto-plugin = buildPythonPackage rec {
+    name = "gcs-oauth2-boto-plugin-1.8";
+    disabled = ! isPy27;
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/g/gcs-oauth2-boto-plugin/gcs-oauth2-boto-plugin-1.8.tar.gz;
+      sha256 = "0jy62y5bmaf1mb735lqwry1s5nx2qqrxvl5sxip9yg4miih3qkyb";
+    };
+    propagatedBuildInputs = with self; [ boto-230 httplib2 google_api_python_client retry_decorator pkgs.pyopenssl socksipy-branch ];
+    meta = {
+      homepage = https://developers.google.com/storage/docs/gspythonlibrary;
+      description = "Provides OAuth 2.0 credentials that can be used with Google Cloud Storage";
+      license = stdenv.lib.licenses.asl20;
+    };
+  };
+
+  gsutil = buildPythonPackage rec {
+    name = "gsutil-4.6";
+    disabled = ! isPy27;
+    meta = {
+      homepage = https://developers.google.com/storage/docs/gsutil;
+      description = "Google Cloud Storage Tool";
+      maintainers = [ "Russell O'Connor <oconnorr@google.com>" ];
+      license = stdenv.lib.licenses.asl20;
+    };
+    doCheck = false;
+
+    src = pkgs.fetchurl {
+      url = https://pypi.python.org/packages/source/g/gsutil/gsutil-4.6.tar.gz;
+      sha256 = "1i0clm60162rbk45ljr8nsw4ndkzjnwb7r440shcqjrvw8jq49mn";
+    };
+
+    propagatedBuildInputs = with self; [ boto-230 crcmod httplib2 gcs-oauth2-boto-plugin google_api_python_client gflags
+                                         retry_decorator pkgs.pyopenssl socksipy-branch crcmod ];
+  };
+
+  pypi2nix = self.buildPythonPackage rec {
     rev = "04a68d8577acbceb88bdf51b1231a9dbdead7003";
     name = "pypi2nix-1.0_${rev}";
+    disabled = ! isPy27;
 
     src = pkgs.fetchurl {
       url = "https://github.com/garbas/pypi2nix/tarball/${rev}";
@@ -10380,11 +14419,73 @@ rec {
     };
   };
 
+  svg2tikz = self.buildPythonPackage {
+    name = "svg2tikz-1.0.0";
+    disabled = ! isPy27;
+
+    propagatedBuildInputs = with self; [lxml];
+
+    src = pkgs.fetchgit {
+      url = "https://github.com/kjellmf/svg2tikz";
+      sha256 = "429428ec435e53672b85cdfbb89bb8af0ff9f8238f5d05970729e5177d252d5f";
+      rev = "ad36f2c3818da13c4136d70a0fd8153acf8daef4";
+    };
+
+    meta = {
+      homepage = https://github.com/kjellmf/svg2tikz;
+      description = "An SVG to TikZ converter";
+      license = stdenv.lib.licenses.gpl2Plus;
+      maintainers =  with pkgs.stdenv.lib.maintainers; [gal_bolle];
+    };
+  };
+
+  syncserver = buildPythonPackage rec {
+    name = "syncserver-${version}";
+    version = "1.5.0";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/syncserver.git;
+      rev = "refs/tags/${version}";
+      sha256 = "1xljylycxg7351hmqh7aa6fvvsjg06zvd4r7hcjqyd0k0sxvk7y6";
+    };
+
+    buildInputs = with self; [ unittest2 ];
+    propagatedBuildInputs = with self; [
+      cornice gunicorn pyramid requests simplejson sqlalchemy9 mozsvc tokenserver
+      serversyncstorage configparser
+    ];
+
+    meta = {
+      maintainers = [ ];
+      platforms = stdenv.lib.platforms.all;
+    };
+  };
+
+  serversyncstorage = buildPythonPackage rec {
+    name = "serversyncstorage-${version}";
+    version = "1.5.11";
+    disabled = ! isPy27;
+    src = pkgs.fetchgit {
+      url = https://github.com/mozilla-services/server-syncstorage.git;
+      rev = "refs/tags/${version}";
+      sha256 = "1byq2k2f36f1jli9599ygfm2qsb4adl9140sxjpgfjbznb74q90q";
+    };
+
+    propagatedBuildInputs = with self; [
+      pyramid sqlalchemy9 simplejson mozsvc cornice pyramid_hawkauth pymysql
+      pymysqlsa umemcache wsgiproxy2 requests pybrowserid
+    ];
+
+    doCheck = false; # lazy packager
+  };
+
 
-  thumbor = pythonPackages.buildPythonPackage rec {
+  thumbor = self.buildPythonPackage rec {
     name = "thumbor-4.0.4";
+    disabled = ! isPy27;
 
-    propagatedBuildInputs = [
+    propagatedBuildInputs = with self; [
                     tornado
                     pycrypto
                     pycurl
@@ -10400,7 +14501,7 @@ rec {
                         ffmpeg = null;
                     }) ];
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/thumbor/${name}.tar.gz";
       md5 = "cf639a1cc57ee287b299ace450444408";
     };
@@ -10412,10 +14513,11 @@ rec {
     };
   };
 
-  thumborPexif = pythonPackages.buildPythonPackage rec {
+  thumborPexif = self.buildPythonPackage rec {
     name = "thumbor-pexif-0.14";
+    disabled = ! isPy27;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/t/thumbor-pexif/${name}.tar.gz";
       md5 = "fb4cdb60f4a0bead5193fb483ccd3430";
     };
@@ -10431,18 +14533,19 @@ rec {
     version  = "1.4";
     baseName = "pync";
     name     = "${baseName}-${version}";
+    disabled = ! isPy27;
 
-    src = fetchurl {
+    src = pkgs.fetchurl {
       url = "https://pypi.python.org/packages/source/p/${baseName}/${name}.tar.gz";
       md5 = "5cc79077f386a17b539f1e51c05a3650";
     };
 
-    buildInputs = [ pkgs.coreutils ];
+    buildInputs = with self; [ pkgs.coreutils ];
 
-    propagatedBuildInputs = [ dateutil ];
+    propagatedBuildInputs = with self; [ dateutil ];
 
     preInstall = stdenv.lib.optionalString stdenv.isDarwin ''
-      sed -i 's|^\([ ]*\)self.bin_path.*$|\1self.bin_path = "${pkgs.rubyLibs.terminal_notifier}/bin/terminal-notifier"|' build/lib/pync/TerminalNotifier.py
+      sed -i 's|^\([ ]*\)self.bin_path.*$|\1self.bin_path = "${pkgs.terminal-notifier}/bin/terminal-notifier"|' build/lib/pync/TerminalNotifier.py
     '';
 
     meta = with stdenv.lib; {
@@ -10454,6 +14557,180 @@ rec {
     };
   };
 
+  weboob = buildPythonPackage rec {
+    name = "weboob-1.0";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchurl {
+      url = "https://symlink.me/attachments/download/289/${name}.tar.gz";
+      md5 = "38f832f1b8654441adafe8558faa7109";
+    };
+
+    setupPyBuildFlags = ["--qt" "--xdg"];
+
+    propagatedBuildInputs = with self; [ pillow prettytable pyyaml dateutil gdata requests2 mechanize feedparser lxml pkgs.gnupg pyqt4 pkgs.libyaml simplejson cssselect futures ];
+
+    meta = {
+      homepage = http://weboob.org;
+      description = "Collection of applications and APIs to interact with websites without requiring the user to open a browser";
+      license = stdenv.lib.licenses.agpl3;
+      maintainers = [ stdenv.lib.maintainers.DamienCassou ];
+    };
+  };
+
+  datadiff = buildPythonPackage rec {
+    name = "datadiff-1.1.6";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/datadiff/datadiff-1.1.6.zip";
+      md5 = "c34a690db75eead148aa5fa89e575d1e";
+    };
+
+    buildInputs = with self; [ nose ];
+
+    meta = with stdenv.lib; {
+      description = "DataDiff";
+      homepage = http://sourceforge.net/projects/datadiff/;
+      license = licenses.asl20;
+    };
+  };
+
+  termcolor = buildPythonPackage rec {
+    name = "termcolor-1.1.0";
+    disabled = ! isPy27;
 
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/t/termcolor/termcolor-1.1.0.tar.gz";
+      md5 = "043e89644f8909d462fbbfa511c768df";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Termcolor";
+      homepage = http://pypi.python.org/pypi/termcolor;
+      license = licenses.mit;
+    };
+  };
+
+  html2text = buildPythonPackage rec {
+    name = "html2text-2014.12.29";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/h/html2text/html2text-2014.12.29.tar.gz";
+      md5 = "c5bd796bdf7d1bfa43f55f1e2b5e4826";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [  ];
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/Alir3z4/html2text/;
+    };
+  };
+
+  pychart = buildPythonPackage rec {
+    name = "pychart-1.39";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchurl {
+      url = "http://download.gna.org/pychart/PyChart-1.39.tar.gz";
+      sha256 = "882650928776a7ca72e67054a9e0ac98f78645f279c0cfb5910db28f03f07c2e";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Library for creating high quality encapsulated Postscript, PDF, PNG, or SVG charts";
+      homepage = http://home.gna.org/pychart/;
+      license = licenses.gpl2;
+    };
+  };
+
+  parsimonious = buildPythonPackage rec {
+    name = "parsimonious-0.6.0";
+    disabled = ! isPy27;
+    src = pkgs.fetchurl {
+      url = "https://github.com/erikrose/parsimonious/archive/0.6.tar.gz";
+      sha256 = "7ad992448b69a3f3d943bac0be132bced3f13937c8ca150ba2fd1d7b6534f846";
+    };
+
+    propagatedBuildInputs = with self; [ nose ];
+
+    meta = {
+      homepage = "https://github.com/erikrose/parsimonious";
+      description = "Fast arbitrary-lookahead packrat parser written in pure Python.";
+      license = licenses.mit;
+    };
+  };
+
+  networkx = buildPythonPackage rec {
+    name = "networkx-1.9.1";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/n/networkx/networkx-1.9.1.tar.gz";
+      sha256 = "6380eb38d0b5770d7e50813c8a48ff7c373b2187b4220339c1adce803df01c59";
+    };
+
+    buildInputs = with self; [ nose decorator ];
+
+    meta = {
+      homepage = "https://networkx.github.io/";
+      description = "Library for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.";
+      license = licenses.bsd3;
+    };
+  };
+
+  basemap = buildPythonPackage rec {
+    name = "basemap-1.0.7";
+    disabled = ! isPy27;
+
+    src = pkgs.fetchurl {
+      url = "mirror://sourceforge/project/matplotlib/matplotlib-toolkits/basemap-1.0.7/basemap-1.0.7.tar.gz";
+      sha256 = "0ca522zirj5sj10vg3fshlmgi615zy5gw2assapcj91vsvhc4zp0";
+    };
+
+    propagatedBuildInputs = with self; [ numpy matplotlib pillow ];
+    buildInputs = with self; with pkgs ; [ setuptools geos proj ];
+
+    # Standard configurePhase from `buildPythonPackage` seems to break the setup.py script
+    configurePhase = ''
+      export GEOS_DIR=${pkgs.geos}
+    '';
+
+    # The installer does not support the '--old-and-unmanageable' option
+    installPhase = ''
+      ${python.interpreter} setup.py install --prefix $out
+    '';
+
+    # The 'check' target is not supported by the `setup.py` script.
+    # TODO : do the post install checks (`cd examples && ${python.interpreter} run_all.py`)
+    doCheck = false;
+
+    meta = {
+      homepage = "http://matplotlib.org/basemap/";
+      description = "Plot data on map projections with matplotlib";
+      longDescription = ''
+        An add-on toolkit for matplotlib that lets you plot data on map projections with
+        coastlines, lakes, rivers and political boundaries. See
+        http://matplotlib.github.com/basemap/users/examples.html for examples of what it can do.
+      '';
+      licences = [ licenses.mit licenses.gpl2 ];
+    };
+  };
+  
+  dicttoxml = buildPythonPackage rec {
+    name = "dicttoxml-1.6.4";
+
+    src = pkgs.fetchurl {
+      url = "https://pypi.python.org/packages/source/d/dicttoxml/dicttoxml-1.6.4.tar.gz";
+      md5 = "154b47d2b7405280b871a81502a05657";
+    };
+
+    propagatedBuildInputs = with self; [  ];
+
+    meta = with stdenv.lib; {
+      description = "Summary";
+      homepage = https://github.com/quandyfactory/dicttoxml;
+    };
+  };
 
-}); in pythonPackages
+}; in pythonPackages