Skip to main content

A Flexible Dictionary Data Tracker for Condition-Based Monitoring

Project description

dictrack - the dictionary tracker

A Flexible Dictionary Data Tracker for Condition-Based Monitoring

dictrack is a powerful dictionary tracking tool designed for condition-based monitoring and management. At its core, dictrack allows developers to easily track and handle dynamic data using flexible components such as conditions, targets, and limiters. It supports various data sources (e.g., Redis, MongoDB) and offers advanced mechanisms for data caching and persistence.

Features

  • Multi-Target Support: Track multiple targets simultaneously with customizable logic.
  • Condition-Based Filtering: Easily define conditions like key existence, value comparisons, or custom rules.
  • Flexible Limiting: Use built-in limiters such as CountLimiter or TimeLimiter to control task execution.
  • Data Caching & Persistence: Integrate Redis for caching and MongoDB for long-term storage.
  • Event System: Includes events like LIMITED, STAGE_COMPLETED, and ALL_COMPLETED for fine-grained tracking.
  • Extensible Design: Add custom conditions, targets, or limiters to adapt to unique requirements.
  • Python 2 & 3 Compatibility: Seamlessly supports both Python 2.7 and 3.7+ environments.

Getting Started

Installation

Install the latest version of dictrack via pip:

pip install dictrack

If you need additional components, you can install dictrack with optional dependencies:

Redis support: For caching data using redis-py.

pip install dictrack[redis]

MongoDB support: For persistent storage using pymongo.

pip install dictrack[mongodb]

Gevent support: For asynchronous task execution with gevent.

pip install dictrack[gevent]

In-Memory support: For lightweight memory-based caching with sortedcontainers.

pip install dictrack[memory]

Basic Usage

Here’s a simple example to get you started:

from dictrack.conditions.keys import KeyValueEQ
from dictrack.data_caches.redis import RedisDataCache
from dictrack.data_stores.mongodb import MongoDBDataStore
from dictrack.manager import TrackingManager
from dictrack.trackers.numerics.count import CountTracker

# Initialize tracker manager
manager = TrackingManager(
    RedisDataCache(host="redis"),
    MongoDBDataStore(host="mongodb"),
)

# Add a tracker with conditions
tracker = CountTracker(
    name="Demo-1",
    conditions=[KeyValueEQ(key="status", value="active")],
    target=10,
)
group_id = "Robot001"
manager.add_tracker(group_id=group_id, tracker=tracker)

# Feed data into the manager
data = {"id": 1, "status": "active"}
# Process data based on the condition
manager.track(group_id=group_id, data=data)

# Check results
print(manager.get_trackers(group_id=group_id, name="Demo-1"))
>>>[<CountTracker (target=10 conditions=set([<KeyValueEQ (key=status operator=eq value=active)>]) limiters=set([]) group_id=Robot001 name=Demo-1 progress=1)>]

Documentation

...

Contributing

...

License

This project is licensed under the MIT License.

CHANGELOG

2.1.5 - 2025-08-06

Added

Changed

Fixed

  • fix: Return tracker as a single-item list for consistency (#43)

2.1.4 - 2025-08-02

Added

  • feat: add KeyValueInList and related classes for list-based checks (#40)

Changed

  • feat: filter out None values during tracker deserialization process (#41)

Fixed

2.1.3 - 2025-05-19

Added

  • feat: validate count limits and improve reset logic for limiters (#38)

Changed

Fixed

2.1.2 - 2025-05-14

Added

Changed

Fixed

  • fix: python 2 syntax issue (#36)

2.1.1 - 2025-05-09

Added

Changed

  • perf: enhance CountLimiter __repr__ output (#34)

Fixed

  • fix: correct reset logic and parameter handling (#33)

2.1.0 - 2025-05-08

Added

Changed

Fixed

  • Improve reset flow (#31)

2.0.10 - 2025-02-17

Added

Changed

Fixed

  • Fixed tuple nesting issue in type validation (#29)

2.0.9 - 2025-02-13

Added

Changed

Fixed

  • Fixed stale data check failure in Python 3 (#27)

2.0.8 - 2025-02-11

Added

  • Tracker now supports modifying progress (#25)

Changed

Fixed

2.0.7 - 2025-01-20

Added

  • Tracker now support adding new targets (#23)

Changed

Fixed

2.0.6 - 2025-01-08

Added

Changed

Fixed

  • Fixed misuse of timedelta.seconds in TimeLimiter (#21)

YANKED 2.0.5 - 2025-01-06

TimeLimiter component does not function as expected

Added

Changed

  • Enhanced compatibility with older redis-py versions (#19)

Fixed

  • Fixed misuse of timedelta.seconds in TimeLimiter (#17)

YANKED 2.0.4 - 2024-12-14

TimeLimiter component does not function as expected

Added

Changed

  • Modified pymongo version restriction from >=4.10.1 to >=3.0 in Python3.7+

Fixed

YANKED 2.0.3 - 2024-12-14

TimeLimiter component does not function as expected

Added

  • Added new condition components:
    • KeyValueContained
    • KeyValueNotContained
    • KeyNotExists
    • KeyValueNE
  • Added pytest unit test code for conditions and limiters

Changed

  • Modified pre_track() and post_track() param name, from pre_track/post_track to pre_tracker/post_tracker in CountLimiter and TimeLimiter.

Fixed

  • Fixed CountLimiter that limited did not work correctly

YANKED 2.0.2 - 2024-11-19

TimeLimiter component does not function as expected

Added

Changed

Fixed

  • Fixed MongoDBDataStore flush process, using delete_many() instead of drop()

YANKED 2.0.1 - 2024-11-14

TimeLimiter component does not function as expected

Added

  • Added new parameter strict that performs strict type for data cache and data store.

Changed

Fixed

YANKED 2.0.0 - 2024-11-08

TimeLimiter component does not function as expected

BRAND NEW data system, adding data cache & data store, data cache for tracking, data store for permanently storing

BRAND NEW limiter component

Added

  • Added data cache components
    • RedisDataCache
    • MemoryDataCache
  • Added data store component
    • MongoDBDataStore
  • Added limiter components
    • CountLimiter
    • TimeLimiter
  • Tracker now support multi-targets and loop forever mode
  • Added new event LIMITED/STAGE_COMPLETED/ALL_COMPLETED

Changed

Fixed

1.1.0 - 2024-10-27

Added

Changed

Fixed

  • Fixed RedisDataStore not working caused from missing pipeline execution

REMOVED 1.0.3 - 2024-10-27

Added

Changed

Fixed

YANKED 1.0.2 - 2024-10-26

RedisDataStore component does not function as expected

Added

Changed

Fixed

YANKED 1.0.1 - 2024-10-24

Build failure for Python 2.7

Added

Changed

Fixed

REMOVED 1.0.0 - 2024-10-24

HELLO WORLD

Added

Changed

Fixed

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

dictrack-2.1.5-py2.py3-none-any.whl (35.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file dictrack-2.1.5-py2.py3-none-any.whl.

File metadata

  • Download URL: dictrack-2.1.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 35.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for dictrack-2.1.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 47b933674eed50925d5e92365525c9524202d788f6fb20070d2b787870c4ed5f
MD5 a9cacc9f077726141794b9858aa54d37
BLAKE2b-256 0fdb13a5ddeef0782000c81c2f906a266930478830b73fd98527346d8dc76331

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