Skip to main content

A client library for fetching and processing crop price data in Tanzania.

Project description

Crop Price Client

This module implements a client for fetching and processing crop price data from a REST API. It allows filtering by crop types, regions, districts, dates, and ordering. The data is fetched as a CSV, converted into a pandas DataFrame, and preprocessed for analysis.

Table of Contents

  1. Features
  2. Requirements
  3. Installation
  4. Usage
  5. Classes
  6. Error Handling
  7. Logging
  8. Testing
  9. License
  10. Contributing

Features

  • Flexible Filtering: Filter crop price data by crops, regions, districts, date range, and ordering.
  • Chained Configuration: Use a chainable builder pattern for constructing DataFrames with specific parameters.
  • Progress Tracking: Displays a download progress bar.
  • Data Cleanup: Preprocesses and formats data for consistency.

Requirements

  • Python 3.11+
  • Required Packages:
    • pandas
    • requests
    • tqdm

Installation

To install this library, use pip:

pip install agritechtz-pycli

Or, if you’re installing from source:

git https://github.com/cloudnuttz/agritechtz-pycli.git
cd agritechtz-pycli
pip install .

Usage

Initialize the Builder:

The CropPriceDataFrameBuilder class allows you to configure and retrieve crop price data as a pandas DataFrame. Here’s an example of how to use it:

from agritechtz_cli import CropPriceDataFrameBuilder

df = CropPriceDataFrameBuilder.of("Maize", "Rice") \
    .in_regions("Dar es saalam/Kinondoni", "Mbeya/Sido") \
    .from_date("2023-01-01") \
    .to_date("2023-12-31") \
    .order_by("-ts") # Order data by date in descending order\
    .build()

print(df.head())

Classes and Methods

CropPriceFilterParams

A data class for setting up filter parameters.

Parameters include:

Attribute Type Description
crops List[str] A list of crop names
regions List[str] A list of regions
districts List[str] A list of districts
start_date Union[date,str] Specify start date (ISO8601 format) of our time series data
end_date Union[date,str] Specify end date (ISO8601 format) of our time series data
ordering List[str] Specify sort priority. + or - before the parameter name where +=ascending -=descending

CropPriceDataFrameBuilder

A builder class for constructing crop price DataFrames with chainable configuration methods.

Methods:

Method Parameters Return Type Description
of Comma separated list of crops e.g., "Maize","Rice" An instance CropPriceDataFrameBuilder Crops to retrieve from the API
in_regions Comma separated list of regions The current instance created by the of method Specify regions to include in your API query
from_date Date object or String representation of the date in ISO8601 format The current instance created by the of method Specify the starting date to include in your API query
end_date Date object or String representation of the date in ISO8601 format The current instance create by the of method Specify the end date to include in your API query. If specified togehter with the start_date, they will create time horizon for your time series data.
ordering Comma separated list of sort specifications. e.g., "+ts" The current instance created by the of method. Specify the order parameter to use in sorting. The sign before parameter indicates sorting direction +/asc, -/desc
build N/A DataFrame Builds the dataframe using the data from the API you've specified in the parameters above.

Error Handling

The library raises informative errors in specific cases:

  • Date Format Errors: Raises ValueError for invalid date formats.
  • API Errors: Raises RuntimeError if network or request errors occur during data fetching.

Note: Since this is a public API, we employed rate limit techniques in order to safeguard against Denial of service (DoD) attacks. Therefore, once you exceeds 5 req/minute you'll be locked.

Logging

Logs messages at the CRITICAL level by default and outputs errors and warnings in case of invalid data or network issues.

Testing

Run tests by typing python -m unittest tests/test_crop_price_data_frame_builder.py

License

This project is licensed under the MIT License - see the LICENSE file for details.


Contributing

Contributions are welcome! To contribute:

  • Fork the repository.
  • Create a new branch (git checkout -b feature-branch).
  • Make your changes.
  • Commit your changes (git commit -m 'Add new feature').
  • Push to the branch (git push origin feature-branch).
  • Open a pull request.

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

agritechtz-pycli-1.0.5.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agritechtz_pycli-1.0.5-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file agritechtz-pycli-1.0.5.tar.gz.

File metadata

  • Download URL: agritechtz-pycli-1.0.5.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for agritechtz-pycli-1.0.5.tar.gz
Algorithm Hash digest
SHA256 edc8fbb45688cd53970eed262cb9f5b946740021e509d0ab168d4936a1d67281
MD5 a9108e919d53e6bdf5666bfd65a5f3dd
BLAKE2b-256 b766091f8fac1a0b1ea176b75de638db28dd39f0ef1a87756364790fe4587095

See more details on using hashes here.

File details

Details for the file agritechtz_pycli-1.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for agritechtz_pycli-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ce9c73790f39e118b0cf4eb146b9ea2621aba59fe3d1bb1d0471ab334635fab8
MD5 fcf758072d33e3f802b413a23ccf0f7a
BLAKE2b-256 327ced6f9c1014490fd6a4aef78b7438f78dd7618fe992e6ece9a17fb5b2ebd6

See more details on using hashes here.

Supported by

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