Skip to main content

A Rust-backed Python library for parsing .fec files.

Project description

FECo3

Python bindings for a .fec file parser in rust.

Install with pip install feco3

Example

import pyarrow as pa
import feco3

# ruff: noqa: E501

# You can supply a URL or a path to a file.
src = "https://docquery.fec.gov/dcdev/posted/1002596.fec"
# src = "path/to/file.fec"
# src = pathlib.Path("path/to/file.fec")

# This doesn't actually read or parse any data yet
fec = feco3.FecFile(src)
print(fec)
# FecFile(src='https://docquery.fec.gov/dcdev/posted/1002596.fec')

# Only when we access something do we actually start parsing.
# Still, we only parse as far as we need to, so this is quite fast.
# This is useful, for example, if you only need the header or cover,
# or if you only want to look at the itemizations in certain forms.
print(fec.header)
print(fec.cover)
# Header(fec_version='8.1', software_name='NetFile', software_version='199199', report_id=None, report_number='0')
# Cover(form_type='F3N', filer_committee_id='C00479188')

# Iterate through the itemizations in the file in batches of pyarrow RecordBatches.
# By iterating, this keeps us from having to load the entire file into memory.
# By using pyarrow, we can avoid copying the underlying data from Rust to Python.
# It integrates well with the rest of the Python data ecosystem, for example
# it's easy to convert to a pandas DataFrames.
batcher = feco3.PyarrowBatcher(fec, max_batch_size=1024 * 1024)
for batch in batcher:
    # The record code for this kind of itemizations, eg. 'SA11AI'
    assert isinstance(batch.code, str)
    # A pyarrow RecordBatch of the itemizations
    assert isinstance(batch.records, pa.RecordBatch)
    df = batch.records.to_pandas()
    print(batch.code)
    print(df.head(3))
# SA15
#   filer_committee_id_number transaction_id back_reference_tran_id_number back_reference_sched_name  ... conduit_zip_code memo_code memo_text_description reference_code
# 0                 C00479188        INCA994                                                          ...
# 1                 C00479188        INCA992                                                          ...
# 2                 C00479188        INCA993                                                          ...

# [3 rows x 44 columns]
# TEXT
#   filer_committee_id_number transaction_id_number back_reference_tran_id_number back_reference_sched_form_name            text
# 0                 C00479188              TPAYC760                       PAYC760                          SC/10  PERSONAL FUNDS
# SC/10
#   filer_committee_id_number transaction_id_number receipt_line_number entity_type  ... lender_candidate_state lender_candidate_district memo_code memo_text_description
# 0                 C00479188               PAYC760                 13B         CAN  ...

# [1 rows x 37 columns]                       ...

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

feco3-0.5.0.tar.gz (37.3 kB view hashes)

Uploaded Source

Built Distributions

feco3-0.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

feco3-0.5.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

feco3-0.5.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

feco3-0.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

feco3-0.5.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

feco3-0.5.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

feco3-0.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

feco3-0.5.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

feco3-0.5.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

feco3-0.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

feco3-0.5.0-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

feco3-0.5.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

feco3-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

feco3-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

feco3-0.5.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686

feco3-0.5.0-cp311-none-win_amd64.whl (3.7 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

feco3-0.5.0-cp311-none-win32.whl (3.5 MB view hashes)

Uploaded CPython 3.11 Windows x86

feco3-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

feco3-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

feco3-0.5.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686

feco3-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (3.6 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

feco3-0.5.0-cp311-cp311-macosx_10_7_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.11 macOS 10.7+ x86-64

feco3-0.5.0-cp310-none-win_amd64.whl (3.7 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

feco3-0.5.0-cp310-none-win32.whl (3.5 MB view hashes)

Uploaded CPython 3.10 Windows x86

feco3-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

feco3-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

feco3-0.5.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

feco3-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (3.6 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

feco3-0.5.0-cp310-cp310-macosx_10_7_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.10 macOS 10.7+ x86-64

feco3-0.5.0-cp39-none-win_amd64.whl (3.7 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

feco3-0.5.0-cp39-none-win32.whl (3.5 MB view hashes)

Uploaded CPython 3.9 Windows x86

feco3-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

feco3-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

feco3-0.5.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

feco3-0.5.0-cp38-none-win_amd64.whl (3.7 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

feco3-0.5.0-cp38-none-win32.whl (3.5 MB view hashes)

Uploaded CPython 3.8 Windows x86

feco3-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

feco3-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

feco3-0.5.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

feco3-0.5.0-cp37-none-win_amd64.whl (3.7 MB view hashes)

Uploaded CPython 3.7 Windows x86-64

feco3-0.5.0-cp37-none-win32.whl (3.5 MB view hashes)

Uploaded CPython 3.7 Windows x86

feco3-0.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

feco3-0.5.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.6 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARMv7l

feco3-0.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

feco3-0.5.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (4.3 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

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