Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

First release

  • Loading branch information...
commit 855d2b93c53ef78b9c1c72d820196d3be9db297f 1 parent 0b896c2
@Suor authored
View
4 .gitignore
@@ -0,0 +1,4 @@
+*.pyc
+dist
+*.egg-info
+build
View
27 LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2012, Alexander Schepanovski.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of cacheops nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
View
2  MANIFEST.in
@@ -0,0 +1,2 @@
+include LICENSE
+include README.rst
View
12 README.rst
@@ -0,0 +1,12 @@
+Django pickling
+===============
+
+Makes django models pickling 2-3 times faster and compact.
+
+
+Installation and setup
+----------------------
+
+ $ pip install django-pickling
+
+Then add ``django_pickling`` to your ``INSTALLED_APPS``.
View
35 django_pickling.py
@@ -0,0 +1,35 @@
+VERSION = (0, 1)
+__version__ = '.'.join(map(str, VERSION))
+
+
+from django.db.models import Model
+from itertools import izip
+
+
+def attnames(cls, _cache={}):
+ try:
+ return _cache[cls]
+ except KeyError:
+ _cache[cls] = [f.attname for f in cls._meta.fields]
+ return _cache[cls]
+
+def model_unpickle(cls, data):
+ obj = cls.__new__(cls)
+ obj.__dict__.update(izip(attnames(cls), data))
+ return obj
+model_unpickle.__safe_for_unpickle__ = True
+
+def Model__reduce__(self):
+ if self._deferred:
+ return original_Model__reduce__(self)
+ else:
+ cls = self.__class__
+ data = self.__dict__.copy()
+
+ vector = map(data.pop, attnames(cls))
+ return (model_unpickle, (cls, vector), data)
+
+if Model.__reduce__ != Model__reduce__:
+ original_Model__reduce__ = Model.__reduce__
+ Model.__reduce__ = Model__reduce__
+
View
28 setup.py
@@ -0,0 +1,28 @@
+from setuptools import setup
+
+setup(
+ name='django-pickling',
+ version='0.1',
+ author='Alexander Schepanovski',
+ author_email='suor.web@gmail.com',
+
+ description='Efficient pickling for django models.',
+ long_description=open('README.rst').read(),
+ url='http://github.com/Suor/django-pickling',
+ license='BSD',
+
+ py_modules=['django_pickling'],
+ install_requires=['django'],
+
+ classifiers=[
+ 'Development Status :: 4 - Beta',
+ 'License :: OSI Approved :: BSD License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+
+ 'Framework :: Django',
+ 'Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ ]
+)
Please sign in to comment.
Something went wrong with that request. Please try again.