Skip to main content

Convert Objects and Django models to/from fixed format records.

Project description

This app allows you to convert objects into fixed width records.

In version 0.1.0 we introduce an entirely new (albeit similar) interface that breaks all dependency on Django and removes the necessity of manually setting the order of fields. We call it ‘fixedwidth’.

Usage:

from djcopybook.fixedwidth import Record from djcopybook.fixedwidth import fields

class Person(Record):

first_name = fields.StringField(length=20) last_name = fields.StringField(length=30) siblings = fields.IntegerField(length=2) birth_date = fields.DateField(length=10, format=”%Y-%m-%d”)

>>> p = Person(first_name="Joe", last_name="Smith", siblings=3, birth_date="1982-09-11")
>>> p.birth_date
datetime.date(1982, 9, 11)
>>> p.to_record()
'Joe                 Smith                         031982-09-11'

You can also set attributes after a record has been instantiated, give fields default values, and other fun stuff.

When you have a record instance, the data values will always be their python value, and when you do a to_record on the Record as a whole or an individual field it will have the fixedwidth format.

New in version 0.1.1:

ListField: lets you have one field whose values are made of another complete record. Similar to COBOL’s OCCURS functionality. Declaring length on the ListField tells how many times that record repeats.

USAGE:
class PhoneNumber(Record):

identifier = fields.StringField(length=10, default=”Mobile”) area_code = fields.IntegerField(length=3) prefix = fields.IntegerField(length=3) line_number = fields.IntegerField(length=4)

class Person(Record):

first_name = fields.StringField(length=20) last_name = fields.StringField(length=30) siblings = fields.IntegerField(length=2) birth_date = fields.DateField(length=10, format=”%Y-%m-%d”) phone_numbers = fields.ListField(record=PhoneNumber, length=3)

>>> phone_one = PhoneNumber(area_code=515, prefix=555, line_number=2222)
>>> person = Person(first_name="Joe", last_name="Smith", siblings=3,
               birth_date="1982-09-11", phone_numbers=[phone_one])
>>> person.to_record()
'Joe                 Smith                         031982-09-11Mobile    5155552222Mobile    0000000000Mobile    0000000000'
New in version 0.1.2:

Convert records from a fixed width format back into record objects

USAGE:
class Person(Record):

first_name = fields.StringField(length=20) last_name = fields.StringField(length=30) siblings = fields.IntegerField(length=2) birth_date = fields.DateField(length=10, format=”%Y-%m-%d”)

>>> fixedwidth_record = 'Joe                 Smith                         031982-09-11'
>>> person = Person.from_record(fixedwidth_record)
>>> person.first_name
'Joe'
>>> person.last_name
'Smith'
>>> person.siblings
3
>>> person.birth_date
datetime.date(1982, 9, 11)
New in version 0.1.6:

FragmentField: Similar to the ListField, but only occurring one time. Useful if you have a common element included in multiple Records.

USAGE:
class Phone(Record):

area_code = fields.IntegerField(length=3) prefix = fields.IntegerField(length=3) line_number = fields.IntegerField(length=4)

class Contact(Record):

name = fields.StringField(length=30) phone_number = fields.FragmentField(record=Phone) email = fields.StringField(length=30)

>>> phone = PhoneNumber(area_code=515, prefix=555, line_number=2222)
>>> contact = Contact(name="Joe", phone_number=phone, email="joe@example.com")
>>> contact.to_record()
'Joe                 5155552222joe@example.com               '

or:

>>> contact = Contact(name="Joe", email="joe@example.com")
>>> contact.phone_number.area_code = 515
>>> contact.phone_number.prefix = 555
>>> contact.phone_number.line_number = 2222
>>> contact.to_record()
'Joe                 5155552222joe@example.com               '

New in version 0.1.7: You can now populate a record object with a dictionary containing more items than the record has fields. The record will use the values if it has the associated fields, but will ignore extra data.

This is useful when populating records from a form’s cleaned_data for instance if the form has more data than that specific record wants.

New in version 0.1.9:

Record now has an auto_truncate attribute you can set to truncate each field down to the expected size instead of raising an error.

USAGE:

class Sample(Record):

field = fields.StringField(length=5)

>>> s = Sample(field='this is too long')
>>> str(s)
'this '
Notes:

Because we are using OrderedDict, the new fixedwidth implementation will only work on Python 2.7 and above. (you can copy the OrderdDict class yourself if you need < 2.7)

The previous Django model implementation is pending deprecation.

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

django_copybook-1.3.1.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

django_copybook-1.3.1-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file django_copybook-1.3.1.tar.gz.

File metadata

  • Download URL: django_copybook-1.3.1.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.9

File hashes

Hashes for django_copybook-1.3.1.tar.gz
Algorithm Hash digest
SHA256 08b36884700b7b4c6e11a24d60de29988386384b939d3549e381e05617972a63
MD5 584f318fe63f630ec89c9f66a06dc599
BLAKE2b-256 9f4db060decc4972cfa66795a12e7f8dc9cd0d730474130fed454df93b0f1e95

See more details on using hashes here.

File details

Details for the file django_copybook-1.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_copybook-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5985d5365a3f3a6dfcf0566613f26093e83d2600e5a030ff8e45dfbc7a4ecf38
MD5 0e936c1dc6dc595d27c7cbe54e89860b
BLAKE2b-256 926a5dd626f27361662c3b27e0aeda39398169855c5c6545e579094d88cdae5c

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