dsap-cli 1.1.3__tar.gz → 1.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/PKG-INFO +1 -1
  2. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/_version.py +2 -2
  3. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/database.py +9 -9
  4. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/sm2.py +1 -2
  5. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/ui.py +5 -5
  6. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/.github/workflows/ci.yml +0 -0
  7. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/.gitignore +0 -0
  8. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/.pre-commit-config.yaml +0 -0
  9. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/CHANGELOG.md +0 -0
  10. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/LICENSE +0 -0
  11. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/README.md +0 -0
  12. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/USER_GUIDE.md +0 -0
  13. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/assets/dsap-cli.gif +0 -0
  14. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/pyproject.toml +0 -0
  15. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/__init__.py +0 -0
  16. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/__main__.py +0 -0
  17. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/cli.py +0 -0
  18. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/config.py +0 -0
  19. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/data/blind75.yaml +0 -0
  20. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/data/grind75.yaml +0 -0
  21. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/data/neetcode150.yaml +0 -0
  22. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/models.py +0 -0
  23. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/problem_sets.py +0 -0
  24. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/src/dsap/py.typed +0 -0
  25. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/__init__.py +0 -0
  26. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/test_cli.py +0 -0
  27. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/test_config.py +0 -0
  28. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/test_database.py +0 -0
  29. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/test_models.py +0 -0
  30. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/test_problem_sets.py +0 -0
  31. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/tests/test_sm2.py +0 -0
  32. {dsap_cli-1.1.3 → dsap_cli-1.1.4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dsap-cli
3
- Version: 1.1.3
3
+ Version: 1.1.4
4
4
  Summary: CLI tool for practicing data structures and algorithms using spaced repetition.
5
5
  Project-URL: Repository, https://github.com/juma-paul/dsap-cli
6
6
  Project-URL: Issues, https://github.com/juma-paul/dsap-cli/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.1.3'
22
- __version_tuple__ = version_tuple = (1, 1, 3)
21
+ __version__ = version = '1.1.4'
22
+ __version_tuple__ = version_tuple = (1, 1, 4)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -12,7 +12,7 @@ import os
12
12
  import sqlite3
13
13
  from collections.abc import Iterator
14
14
  from contextlib import contextmanager
15
- from datetime import datetime, timedelta
15
+ from datetime import date, datetime, timedelta
16
16
  from pathlib import Path
17
17
  from typing import Any
18
18
 
@@ -251,9 +251,9 @@ class Database:
251
251
  params.append(problem_set)
252
252
 
253
253
  if due_only:
254
- now = datetime.now().isoformat()
255
- conditions.append("(pr.next_review <= ? OR pr.next_review IS NULL)")
256
- params.append(now)
254
+ today = datetime.now().date().isoformat()
255
+ conditions.append("(DATE(pr.next_review) <= ? OR pr.next_review IS NULL)")
256
+ params.append(today)
257
257
 
258
258
  where_clause = "WHERE " + " AND ".join(conditions) if conditions else ""
259
259
  params.append(limit)
@@ -577,21 +577,21 @@ class Database:
577
577
  """).fetchone()
578
578
 
579
579
  # Due counts
580
- now = datetime.now().isoformat()
581
- week_later = (datetime.now() + timedelta(days=7)).isoformat()
580
+ today = date.today().isoformat()
581
+ week_later = (date.today() + timedelta(days=7)).isoformat()
582
582
 
583
583
  due_today = conn.execute(
584
584
  """
585
585
  SELECT COUNT(*) FROM progress
586
- WHERE next_review <= ? OR next_review IS NULL
586
+ WHERE DATE(next_review) <= ? OR next_review IS NULL
587
587
  """,
588
- (now,),
588
+ (today,),
589
589
  ).fetchone()[0]
590
590
 
591
591
  due_week = conn.execute(
592
592
  """
593
593
  SELECT COUNT(*) FROM progress
594
- WHERE next_review <= ?
594
+ WHERE DATE(next_review) <= ? OR next_review IS NULL
595
595
  """,
596
596
  (week_later,),
597
597
  ).fetchone()[0]
@@ -252,8 +252,7 @@ class SM2State:
252
252
  now = datetime.now()
253
253
  if self.next_review is None:
254
254
  return 0
255
- delta = self.next_review - now
256
- return delta.days
255
+ return (self.next_review.date() - now.date()).days
257
256
 
258
257
 
259
258
  def calculate_easiness_factor(current_ef: float, quality: int) -> float:
@@ -8,7 +8,7 @@ Provides beautiful terminal output using Rich library:
8
8
  """
9
9
 
10
10
  import webbrowser
11
- from datetime import datetime
11
+ from datetime import date
12
12
 
13
13
  from rich import box
14
14
  from rich.console import Console
@@ -137,8 +137,7 @@ def display_problem(
137
137
  f" EF: {progress.easiness_factor:.2f} | Interval: {progress.interval} days"
138
138
  )
139
139
  if progress.next_review:
140
- now = datetime.now()
141
- delta = (progress.next_review - now).days
140
+ delta = (progress.next_review.date() - date.today()).days
142
141
  if delta < 0:
143
142
  due_str = f"Overdue by {abs(delta)} day{'s' if abs(delta) != 1 else ''}"
144
143
  elif delta == 0:
@@ -372,12 +371,13 @@ def display_problem_list(
372
371
  ef = "-"
373
372
 
374
373
  if progress and progress.next_review:
375
- now = datetime.now()
376
- delta = (progress.next_review - now).days
374
+ delta = (progress.next_review.date() - date.today()).days
377
375
  if delta < 0:
378
376
  due_text = f"[red]{abs(delta)}d late[/red]"
379
377
  elif delta == 0:
380
378
  due_text = "[yellow]today[/yellow]"
379
+ elif delta == 1:
380
+ due_text = "[dim]tomorrow[/dim]"
381
381
  else:
382
382
  due_text = f"[dim]in {delta}d[/dim]"
383
383
  else:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes