Skip to main content

Attributes for django models in a JQuery inspired syntax.

Project description

… is a django app which aims to provide arbitrary attributes for any model without touching it. The flexibility won is paid with the speed lost, which will become obvious in large scaled applications with dense data.

Installation

  • Just copy the attributes folder to your current django project and include ‘attributes’ in your settings.

  • Or install it using sudo easy_install anyit.djattributes and include ‘anyit.djattributes.attributes’.

Usage

A javascript / JQuery like notation is implemented and provided by a simple interface class called attr. No capital letter like in usual classnames trying to make it feel like JQuery.

Mind the gap

I am a bit concerned about this being not compliant to django philosophy. Make sure you do not use this for large scale non sparse data stuff. I was just bothered with a tree structure containing arbitrary, path dependent attributes. This is why I did it. If I could have avoided this I had my models more nailed down :)

Type interfaces

# Creates a type. Look at the __doc__ for further info on types and
# how they are represented. By now the internal_types int, float,
# string, text, unicode, class (any pickleable object) and contenttype,
# using a django gereric key, are supported.
attr.create_type(name, description , type)

# Careful! The cascade will destroy any values of the given type.
attr.delete_type(name)

Carrier interfaces

# returns all attribute objects
attr()

# returns a list of attributes for the given owner.
attr(owner)

# returns the owners attribute with a given name or None.
attr(owner, name)

# ... set its value or raise if the type is not koscher.
attr(owner, name, value)

# create_attributetype chooses between creating an attributetype
# with the given name, type determined by the given value and the
# description set to the given name if a description is not
# explicitely provided. create_attribute will associate a given
# attribute with a carrier which is not yet attached with an
# attribute type like given or raise a NameError. klass chooses
# to enforce the attribute being attached to a model, even if an
# instance is given. as_attribute will return the attribute, not
# it's value.

attr(
    owner=None,
    name=None,
    value=None,
    create_attributetype=True,
    create_attribute=True,
    klass=False,
    description=None,
    as_attribute=False
)

Attribute interfaces

# returns the owner of a given attribute
attr.find(attribute)

# returns a list of attributes for the attribute type of the given name
attr.find(name)

# returns a list of attributes for the attribute type of the given name matching the value
attr.find(name, value)

Destructive interfaces

# deletes all attributes
attr.delete()

# deletes all attributes having the given type.
attr.delete(n=name)

# deletes all attributes being attached to the given object or class.
attr.delete(o=object)

# deletes the attribute named n attached to o, the given object or class.
attr.delete(o=object, n=name)

Tests

To get started you might also want to run the ./manage.py test attributes command and have a look at the second half of the tests.py file.

Credits

The PickledObjectField and their tests (found in the first half of tests.py) taken from http://djangosnippets.org/snippets/1694/ and slightly modified so the __in lookup would work, too. Thanks for the snippet. Later I realized, this one might have worked, too: https://github.com/shrubberysoft/django-picklefield/blob/master/src/picklefield/fields.py.

Have fun and feel free to contact me if you are having trouble, suggestions, …

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anyit.djattributes-0.2.5.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

anyit.djattributes-0.2.5-py2.6.egg (27.6 kB view details)

Uploaded Source

File details

Details for the file anyit.djattributes-0.2.5.tar.gz.

File metadata

File hashes

Hashes for anyit.djattributes-0.2.5.tar.gz
Algorithm Hash digest
SHA256 dd62c3ff2b50d75a3dd3980d2ef5e0c0119328e03e6a1e033b4268033b1146c5
MD5 4f36d07c9300d0d619cad48866bdcb84
BLAKE2b-256 cf1d50778e3aa1a1cc44ab937838c44db4933783c72cad9e2386cd753e374a36

See more details on using hashes here.

File details

Details for the file anyit.djattributes-0.2.5-py2.6.egg.

File metadata

File hashes

Hashes for anyit.djattributes-0.2.5-py2.6.egg
Algorithm Hash digest
SHA256 35d5578a4589da29faf38c1dbbd3c190ebb5ff7d659aa4c92ebe3823bdd0aa92
MD5 d94abc5c5ddcba5beb0a955bee49b14a
BLAKE2b-256 e6c41a8e6d0f52da27c4f782156b304ada4f577e28840e63f8e332189b7024c7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page