django-ipyfield
ipyfield provides a model field for django that allows the storage of an ip address as a “pretend” PositiveBigInt (currently varchar(39) until I can figure out how to get an unsigned 64bit integer column across all supported DBs) on the db side by using IPy to handle conversion to an IPy.IP instance (or None) on the python side.
Wut?
In its way, it gives us a way to store both ipv4 and ipv6 consistently without having to throw them in long charfields. Also, it gives us an easy way to validate data as it comes in, while giving us access to additional meta information (basically everything that makes IPy so awesome).
Installation
Add this to your django project by installing with pip:
pip install django-ipyfield
or with easy_install:
easy_install django-ipyfield
Usage
In your models, do something like the following:
from django.db import models
from ipyfield.models import IPyField
class MyModel(models.Model):
# the regular params should work well enough here
ipaddr = IPyField()
# ... and so on
From here, any assignments to obj.ipaddr can be considered a constructor argument to a new IPy.IP instance. Anything IP() can use to make a new object can be used.
When making queries, I added one extra piece of syntactical sugar. For __in (range) lookups, you can pass a CIDR notation address range, for example:
MyModel.objects.filter(ipaddr__in='10.0.0.0/24')
Currently you need to use this form of notation supported for this kind of query. For now, if you need to use a prefix-netmask style notation, pass it to IPy.IP yourself and use the resulting instance as your filter parameter.
TODOs
figure out how to build an appropriately sized integer field across all DBs.
Changelog
- 0.1.6
Added support for gt, gte, lt, and lte lookups.
- 0.1.5
Added south support.
- 0.1.4
IPy.IP instance raises exception when compared to a non-IP instance. This becomes an issue when you get into ModelForm validation (didn’t come up when only using the ORM) with regards to empty/null values. Fixed by subclassing (wrapping) IPy.IP.
- 0.1.3
Basic field functionality in place.
Metadata
Release files for django-ipyfield 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django-ipyfield-0.1.6.tar.gz | 5.0 kB | Without provenance | Details for django-ipyfield-0.1.6.tar.gz |
Release files / django-ipyfield-0.1.6.tar.gz
| Download URL | django-ipyfield-0.1.6.tar.gz |
|---|---|
| Size | 5.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
121af3767774a81d7fa87cb11869c81d15711c827fd412c3fe7f4d84a4e023f1
|
|
BLAKE2b-256 checksum How to use checksums |
b732322130f1500f13b661ef900b9dacd3266eeb990a32be57f421443ae1fd50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for django-ipyfield 0.1.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.