Skip to main content

Log DSA prep solves from a Colab/Jupyter notebook to your DSA Tracker instance.

Project description

dsa-tracker

Tiny Python client for DSA Tracker. Log a solve from a Colab/Jupyter notebook in one call — same SM-2 scheduling and GitHub auto-push you get from the web app.

Install

pip install dsa-tracker

Get an API key

In your DSA Tracker dashboard → Settings → API keys → Generate new key. The plaintext value is shown exactly once — copy it and treat it like a password. You can name keys per device/notebook so revoking one doesn't break the others.

Use it

from dsa_tracker import Tracker

tracker = Tracker(
    api_url="https://your-dsa-tracker.com",
    api_key="dsa_xxxxxxxxxxxxxxxxxxxxxx",
)

# Solve the problem like you always do
def two_sum(nums, target):
    seen = {}
    for i, n in enumerate(nums):
        if target - n in seen:
            return [seen[target - n], i]
        seen[n] = i

# Log it without leaving the notebook
import inspect

result = tracker.log(
    title="Two Sum",
    confidence=4,                            # 1 (Forgot) → 5 (Easy)
    code=inspect.getsource(two_sum),
    language="python",
    difficulty="easy",
    topics=["Array", "HashMap"],
    pattern="Hash Lookup",
    time_complexity="O(n)",
    space_complexity="O(n)",
    playlist="leetcode-75",                  # optional: push to this playlist's GitHub config
)

print(f"→ next review: {result['next_review_at']} · status: {result['status']}")
if result.get('git_push_queued'):
    print("→ pushed to GitHub via playlist 'leetcode-75'")
elif result.get('git_push_skip_reason'):
    print(f"→ no GitHub push: {result['git_push_skip_reason']}")

What happens on the server

  1. Two Sum is looked up by slug. Created if new, otherwise reused.
  2. A new Solution row captures your code, language, complexities.
  3. A new Review row runs through SM-2 with your confidence rating.
  4. problem.next_review_at and problem.status are updated.
  5. If you have GitHub auto-push enabled, the solution is committed to your repo in the background.

The return value tells you exactly what happened:

{
    'problem_id': 42,
    'solution_id': 87,
    'review_id': 105,
    'created': True,                # False if you've logged this title before
    'next_review_at': '2026-05-27',
    'status': 'learning',
    'reps': 1,
    'interval_days': 1,
}

All parameters

Required Optional
title, confidence code, language, difficulty, topics, pattern, platform, problem_url, approach, time_complexity, space_complexity, notes

Defaults: language="python", difficulty="medium", approach="optimal". Anything you omit just isn't sent.

Errors

The client raises TrackerError on any non-2xx response with the server's reason attached:

from dsa_tracker import TrackerError

try:
    tracker.log(title="X", confidence=4)
except TrackerError as e:
    print(f"Couldn't log: {e}")

Common cases: 401 (bad/revoked API key), 422 (missing required field), connection timeout.

Context manager

For scripts that make many calls, use it as a context manager to clean up the underlying connection pool:

with Tracker(api_url=..., api_key=...) as tracker:
    for problem in queue:
        tracker.log(title=problem.name, confidence=problem.rating, code=problem.code)

License

MIT.

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

dsa_tracker-0.5.0.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

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

dsa_tracker-0.5.0-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file dsa_tracker-0.5.0.tar.gz.

File metadata

  • Download URL: dsa_tracker-0.5.0.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for dsa_tracker-0.5.0.tar.gz
Algorithm Hash digest
SHA256 dc01f1153e86708915d05acf51c041f4990e28f27e22909eabb5d691bb347dc6
MD5 62c77cb1f34da9dadef886dc015ba31b
BLAKE2b-256 edba26ac78d69ecc8de35d673c98519a3b72a9fff713446442946d439118ca76

See more details on using hashes here.

File details

Details for the file dsa_tracker-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: dsa_tracker-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for dsa_tracker-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25c4c9c7116e3dd665819831a68f5911b12b3d0b602c2e6ebe6db35b2548f391
MD5 4ca309e75f4508a65b1ac7457b4d525b
BLAKE2b-256 00a00f4668d0f50f5c23be2997019c5583d1a6df49fde47c32d16dc78120ca29

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