Skip to content

Commit be2a468

Browse files
authored
Merge pull request #40 from aclark4life/main
Refactor with typer
2 parents 42e6bf2 + 284a348 commit be2a468

File tree

5 files changed

+441
-202
lines changed

5 files changed

+441
-202
lines changed

django_mongodb_cli/repo.py

Lines changed: 172 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import typer
2+
import os
23

34
from .utils import Package, Repo, Test
45

@@ -42,48 +43,42 @@ def main(
4243
raise typer.Exit()
4344

4445

45-
@repo.command()
46-
def status(
47-
repo_name: str = typer.Argument(None),
48-
all_repos: bool = typer.Option(
49-
False, "--all-repos", "-a", help="Show status of all repos"
50-
),
51-
reset: bool = typer.Option(
52-
False, "--reset", "-r", help="Reset the status of the repository"
53-
),
54-
):
55-
repo = Repo()
56-
if reset:
57-
repo.set_reset(reset)
58-
repo_command(
59-
all_repos,
60-
repo_name,
61-
all_msg="Showing status for all repositories...",
62-
missing_msg="Please specify a repository name or use --all-repos to show all repositories.",
63-
single_func=lambda name: repo.get_repo_status(name),
64-
all_func=lambda name: repo.get_repo_status(name),
65-
)
66-
67-
6846
@repo.command()
6947
def branch(
7048
repo_name: str = typer.Argument(None),
7149
branch_name: str = typer.Argument(None),
50+
list_branches: bool = typer.Option(
51+
False, "--list-branches", "-l", help="List branches of the repository"
52+
),
7253
all_repos: bool = typer.Option(
7354
False, "--all-repos", "-a", help="Show branches of all repositories"
7455
),
7556
):
57+
"""
58+
Checkout or create a branch in a repository.
59+
If branch_name is provided, switch to that branch or create it if it doesn't exist.
60+
If --all-repos is used, show branches for all repositories.
61+
"""
7662
repo = Repo()
7763
if branch_name:
7864
repo.set_branch(branch_name)
7965

66+
# else:
67+
# typer.echo(
68+
# typer.style(
69+
# "Create or set branch cannot be used with --all-repos.",
70+
# fg=typer.colors.RED,
71+
# )
72+
# )
73+
# return
74+
8075
repo_command(
8176
all_repos,
8277
repo_name,
8378
all_msg="Showing branches for all repositories...",
8479
missing_msg="Please specify a repository name or use --all-repos to show branches of all repositories.",
85-
single_func=lambda name: repo.get_repo_branches(name),
86-
all_func=lambda name: repo.get_repo_branches(name),
80+
single_func=lambda repo_name: repo.get_repo_branch(repo_name),
81+
all_func=lambda repo_name: repo.get_repo_branch(repo_name),
8782
)
8883

8984

@@ -97,6 +92,12 @@ def clone(
9792
False, "--install", "-i", help="Install after cloning"
9893
),
9994
):
95+
"""
96+
Clone a repository.
97+
If --all-repos is used, clone all repositories.
98+
If --install is used, install the package after cloning.
99+
"""
100+
100101
def clone_repo(name):
101102
Repo().clone_repo(name)
102103
if install:
@@ -120,17 +121,23 @@ def commit(
120121
),
121122
message: str = typer.Argument(None, help="Commit message"),
122123
):
124+
"""
125+
Commit changes in a repository with message provided or prompt for message.
126+
"""
127+
128+
if all_repos:
129+
typer.echo(
130+
typer.style("Commit cannot be used with --all-repos.", fg=typer.colors.RED)
131+
)
132+
123133
def do_commit(name):
124-
if not message:
125-
typer.echo(typer.style("Commit message is required.", fg=typer.colors.RED))
126-
raise typer.Exit(1)
127134
Repo().commit_repo(name, message)
128135

129136
repo_command(
130137
all_repos,
131138
repo_name,
132139
all_msg="Committing all repositories...",
133-
missing_msg="Please specify a repository name or use --all-repos to commit all repositories.",
140+
missing_msg="Please specify a repository name.",
134141
single_func=do_commit,
135142
all_func=do_commit,
136143
)
@@ -146,6 +153,12 @@ def delete(
146153
False, "--uninstall", "-u", help="Uninstall after deleting"
147154
),
148155
):
156+
"""
157+
Delete the specified repository.
158+
If --all-repos is used, delete all repositories.
159+
If --uninstall is used, uninstall the package before deleting.
160+
"""
161+
149162
def do_delete(name):
150163
if uninstall:
151164
Package().uninstall_package(name)
@@ -169,13 +182,17 @@ def install(
169182
False, "--all-repos", "-a", help="Install all repositories"
170183
),
171184
):
185+
"""
186+
Install Python package found in the specified repository.
187+
If --all-repos is used, install packages for all repositories.
188+
"""
172189
repo_command(
173190
all_repos,
174191
repo_name,
175192
all_msg="Installing all repositories...",
176193
missing_msg="Please specify a repository name or use --all-repos to install all repositories.",
177-
single_func=lambda name: Package().install_package(name),
178-
all_func=lambda name: Package().install_package(name),
194+
single_func=lambda repo_name: Package().install_package(repo_name),
195+
all_func=lambda repo_name: Package().install_package(repo_name),
179196
)
180197

181198

@@ -186,13 +203,17 @@ def log(
186203
False, "--all-repos", "-a", help="Show logs of all repositories"
187204
),
188205
):
206+
"""
207+
Show logs for the specified repository.
208+
If --all-repos is used, show logs for all repositories.
209+
"""
189210
repo_command(
190211
all_repos,
191212
repo_name,
192213
all_msg="Showing logs for all repositories...",
193214
missing_msg="Please specify a repository name or use --all-repos to show logs of all repositories.",
194-
single_func=lambda name: Repo().get_repo_log(repo_name),
195-
all_func=lambda name: Repo().get_repo_log(repo_name),
215+
single_func=lambda repo_name: Repo().get_repo_log(repo_name),
216+
all_func=lambda repo_name: Repo().get_repo_log(repo_name),
196217
)
197218

198219

@@ -203,13 +224,17 @@ def open(
203224
False, "--all-repos", "-a", help="Open all repositories"
204225
),
205226
):
227+
"""
228+
Open the specified repository in the default web browser.
229+
If --all-repos is used, open all repositories.
230+
"""
206231
repo_command(
207232
all_repos,
208233
repo_name,
209234
all_msg="Opening all repositories...",
210235
missing_msg="Please specify a repository name or use --all-repos to open all repositories.",
211-
single_func=lambda name: Repo().open_repo(repo_name),
212-
all_func=lambda name: Repo().open_repo(repo_name),
236+
single_func=lambda repo_name: Repo().open_repo(repo_name),
237+
all_func=lambda repo_name: Repo().open_repo(repo_name),
213238
)
214239

215240

@@ -221,16 +246,45 @@ def origin(
221246
False, "--all-repos", "-a", help="Show origin of all repositories"
222247
),
223248
):
249+
"""
250+
Show or set the origin of a repository.
251+
"""
224252
repo = Repo()
253+
if repo_user and all_repos:
254+
typer.echo(
255+
typer.style(
256+
"Set origin cannot be used with --all-repos.",
257+
fg=typer.colors.RED,
258+
)
259+
)
260+
return
225261
if repo_user:
226262
repo.set_user(repo_user)
263+
227264
repo_command(
228265
all_repos,
229266
repo_name,
230267
all_msg="Showing origin for all repositories...",
231268
missing_msg="Please specify a repository name or use --all-repos to show origins of all repositories.",
232269
single_func=lambda name: repo.get_repo_origin(name),
233-
all_func=lambda name: repo.get_repo_origin(name),
270+
all_func=lambda repo_name: repo.get_repo_origin(repo_name),
271+
)
272+
273+
274+
@repo.command()
275+
def patch(
276+
repo_name: str = typer.Argument(None),
277+
):
278+
"""
279+
Create an evergreen patch for the specified repository.
280+
"""
281+
repo_command(
282+
False,
283+
repo_name,
284+
all_msg="Running evergreen...",
285+
missing_msg="Please specify a repository name.",
286+
single_func=lambda repo_name: Test().patch_repo(repo_name),
287+
all_func=lambda repo_name: Test().patch_repo(repo_name),
234288
)
235289

236290

@@ -241,67 +295,124 @@ def pr(
241295
False, "--all-repos", "-a", help="Create pull requests for all repositories"
242296
),
243297
):
298+
"""
299+
Create a pull request for the specified repository.
300+
"""
244301
repo_command(
245302
all_repos,
246303
repo_name,
247304
all_msg="Creating pull requests for all repositories...",
248305
missing_msg="Please specify a repository name or use --all-repos to create pull requests for all repositories.",
249-
single_func=lambda name: Repo().create_pr(repo_name),
250-
all_func=lambda name: Repo().create_pr(repo_name),
306+
single_func=lambda repo_name: Repo().create_pr(repo_name),
307+
all_func=lambda repo_name: Repo().create_pr(repo_name),
251308
)
252309

253310

254311
@repo.command()
255-
def sync(
312+
def reset(
256313
repo_name: str = typer.Argument(None),
257314
all_repos: bool = typer.Option(
258-
False, "--all-repos", "-a", help="Sync all repositories"
315+
False, "--all-repos", "-a", help="Reset all repositories"
259316
),
260317
):
318+
"""
319+
Reset a repository to its initial state.
320+
If --all-repos is used, reset all repositories.
321+
"""
322+
323+
def reset_repo(name):
324+
Repo().reset_repo(name)
325+
261326
repo_command(
262327
all_repos,
263328
repo_name,
264-
all_msg="Syncing all repositories...",
265-
missing_msg="Please specify a repository name or use --all-repos to sync all repositories.",
266-
single_func=lambda name: Repo().sync_repo(name),
267-
all_func=lambda name: Repo().sync_repo(name),
329+
all_msg="Resetting all repositories...",
330+
missing_msg="Please specify a repository name or use --all-repos to reset all repositories.",
331+
single_func=reset_repo,
332+
all_func=reset_repo,
268333
)
269334

270335

271336
@repo.command()
272-
def patch(
337+
def status(
273338
repo_name: str = typer.Argument(None),
339+
all_repos: bool = typer.Option(
340+
False, "--all-repos", "-a", help="Show status of all repos"
341+
),
274342
):
343+
"""
344+
Show the status of a repository.
345+
If --all-repos is used, show the status for all repositories.
346+
"""
347+
repo = Repo()
275348
repo_command(
276-
False,
349+
all_repos,
277350
repo_name,
278-
all_msg="Running evergreen...",
279-
missing_msg="Please specify a repository name.",
280-
single_func=lambda name: Test().patch_repo(name),
281-
all_func=lambda name: Test().patch_repo(name),
351+
all_msg="Showing status for all repositories...",
352+
missing_msg="Please specify a repository name or use --all-repos to show all repositories.",
353+
single_func=lambda repo_name: repo.get_repo_status(repo_name),
354+
all_func=lambda repo_name: repo.get_repo_status(repo_name),
282355
)
283356

284357

285358
@repo.command()
286-
def test(
359+
def sync(
287360
repo_name: str = typer.Argument(None),
288-
modules: list[str] = typer.Argument(None),
289361
all_repos: bool = typer.Option(
290-
False, "--all-repos", "-a", help="Run tests for all repositories"
362+
False, "--all-repos", "-a", help="Sync all repositories"
291363
),
364+
):
365+
"""
366+
Sync a repository with its remote counterpart.
367+
If --all-repos is used, sync all repositories.
368+
"""
369+
repo = Repo()
370+
if not repo.map:
371+
typer.echo(
372+
typer.style(
373+
f"No repositories found in {os.path.join(os.getcwd(), repo.pyproject_file)}.",
374+
fg=typer.colors.RED,
375+
)
376+
)
377+
raise typer.Exit()
378+
379+
repo_command(
380+
all_repos,
381+
repo_name,
382+
all_msg="Syncing all repositories...",
383+
missing_msg="Please specify a repository name or use --all-repos to sync all repositories.",
384+
single_func=lambda repo_name: repo.sync_repo(repo_name),
385+
all_func=lambda repo_name: repo.sync_repo(repo_name),
386+
)
387+
388+
389+
@repo.command()
390+
def test(
391+
repo_name: str = typer.Argument(None),
392+
modules: list[str] = typer.Argument(None),
292393
keep_db: bool = typer.Option(
293394
False, "--keepdb", help="Keep the database after tests"
294395
),
295396
keyword: str = typer.Option(
296397
None, "--keyword", "-k", help="Run tests with the specified keyword"
297398
),
399+
list_tests: bool = typer.Option(
400+
False, "--list-tests", "-l", help="List tests instead of running them"
401+
),
298402
setenv: bool = typer.Option(
299403
False,
300404
"--setenv",
301405
"-s",
302406
help="Set DJANGO_SETTINGS_MODULE environment variable",
303407
),
304408
):
409+
"""
410+
Run tests for a repository.
411+
If --modules is provided, run tests for the specified modules.
412+
If --keepdb is used, keep the database after tests.
413+
If --keyword is provided, run tests with the specified keyword.
414+
If --setenv is used, set the DJANGO_SETTINGS_MODULE environment variable.
415+
"""
305416
test_runner = Test()
306417
if modules:
307418
test_runner.set_modules(modules)
@@ -311,13 +422,15 @@ def test(
311422
test_runner.set_keyword(keyword)
312423
if setenv:
313424
test_runner.set_env(setenv)
425+
if list_tests:
426+
test_runner.set_list_tests(list_tests)
314427

315428
repo_command(
316-
all_repos,
429+
False,
317430
repo_name,
318-
all_msg="Running tests for all repositories...",
319-
missing_msg="Please specify a repository name or use --all-repos to run tests for all repositories.",
320-
single_func=lambda name: test_runner.run_tests(name),
321-
all_func=lambda name: test_runner.run_tests(name),
322-
repo_list=test_runner.map, # Use Test().map instead of Repo().map
431+
all_msg=None,
432+
missing_msg="Please specify a repository name.",
433+
single_func=lambda repo_name: test_runner.run_tests(repo_name),
434+
repo_list=test_runner.map,
435+
all_func=None,
323436
)

0 commit comments

Comments
 (0)