Skip to main content

Create Democracy Club Election Identifiers

Project description

Build Status Coverage Status

Create Democracy Club Election Identifiers.

Democracy Club defines a specification for creating reproducible unique identifiers for elections in the UK. See our reference definition. If you are interested in independently producing identifiers which are compatible with those produced by our Every Election platform, this python package includes a builder object, slugging logic and validation rules for creating identifiers that conform to the spec.

Installation

pip install uk-election-ids

Platform Support

uk-election-ids is tested under Python 3.4, 3.5 and 3.6

Usage Examples

>>> from uk_election_ids.election_ids import IdBuilder
>>> from datetime import date


# Chain method calls to build up an ID object
>>> myid = IdBuilder('local', date(2018, 5, 3))\
...     .with_organisation('Test Org')\
...     .with_division('Test Division')
# IdBuilder will deal with slugging strings for us
>>> myid.ballot_id
'local.test-org.test-division.2018-05-03'
>>> myid.ids
[
    'local.2018-05-03',
    'local.test-org.2018-05-03',
    'local.test-org.test-division.2018-05-03'
]


# IdBuilder only allows values defined in the Reference Definition
>>> myid = IdBuilder('gla', date(2018, 5, 3)).with_subtype('x')
ValueError: Allowed values for subtype are ('c', 'a')


# Group IDs can be created with partial information
>>> myid = IdBuilder('local', date(2018, 5, 3)).with_organisation('Test Org')
>>> myid.election_group_id
'local.2018-05-03'
>>> myid.election_group_id
'local.2018-05-03'
>>> myid.ballot_id
ValueError: election_type local must have a division in order to create a ballot id


# A Group ID object can be used to create multiple ballot IDs
>>> divisions = ["area1", "area2", "area3"]
>>> org_id = IdBuilder('local', date(2018, 5, 3)).with_organisation('Test Org')
>>> [org_id.with_division(d).ballot_id for d in divisions]
[
    'local.test-org.area1.2018-05-03',
    'local.test-org.area2.2018-05-03',
    'local.test-org.area3.2018-05-03'
]

API Documentation

See the full API Reference

Data Sources

Election Types and Subtypes

Valid Election types and subtypes are defined in the reference definition.

Organisation Names

For compatibility, organisation segments must use official names. Organisation names can be sourced from gov.uk registers. Short form versions of names should be used i.e: add an organisation segment with myid.with_organisation('Birmingham') not myid.with_organisation('Birmingham City Council')

Alternatively organisation names can be sourced from the Every Election API. Use the common_name key.

Division Names

For compatibility, division segments must use official names. For boundaries that are already in use, names of parliamentary constituencies, district wards and county electoral divisions should be sourced from OS Boundary Line. New boundaries must be extracted from legislation. We also maintain a parser which can help with extracting this data from Electoral Change Orders.

Licensing

uk-election-ids is made available under the MIT License.

Support

To report a bug, raise an issue. If you are using election identifiers, join our slack to ask questions or tell us about your project.

Development

Run the tests locally:

./run_tests.py

Build locally:

sudo apt-get install pandoc
./build.sh

Rebuild the API docs:

pydoc uk_election_ids.election_ids.IdBuilder > docs.txt

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

uk_election_ids-0.1.0.tar.gz (6.4 kB view details)

Uploaded Source

File details

Details for the file uk_election_ids-0.1.0.tar.gz.

File metadata

File hashes

Hashes for uk_election_ids-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9c63ae9f9fb35fe47090e523c9dc0edd0d7443a0f7303d216b0b2a8b847a3fba
MD5 2faefc0afad2de20d478058a243dcf84
BLAKE2b-256 847dceed2c303bbf2c0551c436d88ca0a5d8e4c58a5eec6fb5d75fae6571c980

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