1-
2- from rich .spinner import Spinner
3- from rich .live import Live
41from typing import Optional
5- from ..lib .ui import display_problem_list
6- from ..server .auth import Auth
7- from rich .progress import Progress , SpinnerColumn , TextColumn
82
93import typer
4+ from rich .progress import Progress , SpinnerColumn , TextColumn
105
6+ from ..lib .ui import display_problem_list
117from ..server .api import fetch_problem_list
8+ from ..server .auth import Auth
129
1310status_map = {
14- "attempted" : "TRIED" ,
15- "solved" : "AC" ,
16- "todo" : "NOT_STARTED" ,
11+ "attempted" : "TRIED" ,
12+ "solved" : "AC" ,
13+ "todo" : "NOT_STARTED" ,
1714}
1815
1916AuthManager = Auth ()
2017
18+
2119def list_problems (
22- difficulty : Optional [str ] = typer .Option (None , "--difficulty" , "-d" , help = "Filter by difficulty (easy/medium/hard)" ),
23- status : Optional [str ] = typer .Option (None , "--status" , "-s" , help = "Filter by status (todo/attempted/solved)" ),
24- tag : Optional [str ] = typer .Option (None , "--tag" , "-t" , help = "Filter by tags (comma-separated)" ),
25- category_slug : Optional [str ] = typer .Option ("all-code-essentials" , "--category-slug" , "-c" , help = "Filter by category slug" )
20+ difficulty : Optional [str ] = typer .Option (
21+ None , "--difficulty" , "-d" , help = "Filter by difficulty (easy/medium/hard)"
22+ ),
23+ status : Optional [str ] = typer .Option (
24+ None , "--status" , "-s" , help = "Filter by status (todo/attempted/solved)"
25+ ),
26+ tag : Optional [str ] = typer .Option (
27+ None , "--tag" , "-t" , help = "Filter by tags (comma-separated)"
28+ ),
29+ category_slug : Optional [str ] = typer .Option (
30+ "all-code-essentials" , "--category-slug" , "-c" , help = "Filter by category slug"
31+ ),
2632):
27- """List available LeetCode problems with optional filters."""
28- if (difficulty is not None or status is not None or tag is not None ):
29- if not AuthManager .is_authenticated :
30- typer .echo (typer .style ("❌ Please login first to enable problem listing with filters" , fg = typer .colors .RED ))
31- raise typer .Exit (1 )
33+ """List available LeetCode problems with optional filters."""
34+ if difficulty is not None or status is not None or tag is not None :
35+ if not AuthManager .is_authenticated :
36+ typer .echo (
37+ typer .style (
38+ "❌ Please login first to enable problem listing with filters" ,
39+ fg = typer .colors .RED ,
40+ )
41+ )
42+ raise typer .Exit (1 )
3243
33- tags = tag .split (',' ) if tag else []
44+ tags = tag .split ("," ) if tag else []
3445
35- with Progress (
46+ with Progress (
3647 SpinnerColumn (),
3748 TextColumn ("[progress.description]{task.description}" ),
3849 transient = True ,
3950 ) as progress :
40- progress .add_task ("Fetching problems..." , total = 1 )
41-
42- session = AuthManager .session_manager .load_session ()
43- if not session :
44- typer .echo (typer .style ("❌ No valid session found. Please login first." , fg = typer .colors .RED ))
45- raise typer .Exit (1 )
46-
47- data = fetch_problem_list (
48- csrf_token = session ["csrftoken" ],
49- session_id = session ["session_token" ],
50- categorySlug = category_slug or "all-code-essentials" ,
51- filters = {
52- "difficulty" : difficulty ,
53- "status" : status_map .get (status ) if status is not None else None ,
54- "tags" : tags
55- }
56- )
57- display_problem_list (data )
51+ progress .add_task ("Fetching problems..." , total = 1 )
52+
53+ session = AuthManager .session_manager .load_session ()
54+ if not session :
55+ typer .echo (
56+ typer .style (
57+ "❌ No valid session found. Please login first." ,
58+ fg = typer .colors .RED ,
59+ )
60+ )
61+ raise typer .Exit (1 )
62+
63+ data = fetch_problem_list (
64+ csrf_token = session ["csrftoken" ],
65+ session_id = session ["session_token" ],
66+ categorySlug = category_slug or "all-code-essentials" ,
67+ filters = {
68+ "difficulty" : difficulty ,
69+ "status" : status_map .get (status ) if status is not None else None ,
70+ "tags" : tags ,
71+ },
72+ )
73+ display_problem_list (data )
0 commit comments