Skip to content

Commit 14a47df

Browse files
committed
update the cli
1 parent 0e878e7 commit 14a47df

1 file changed

Lines changed: 51 additions & 43 deletions

File tree

src/gitfetch/cli.py

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from .display import DisplayFormatter
1313
from .cache import CacheManager
1414
from .config import ConfigManager
15+
from .providers import ProviderConfig, PROVIDER_ENV_VARS, PROVIDER_DEFAULT_URLS
1516
from . import __version__
1617

1718

@@ -25,16 +26,16 @@ def _background_refresh_cache_subprocess(username: str) -> None:
2526
config_manager = ConfigManager()
2627
cache_expiry = config_manager.get_cache_expiry_minutes()
2728
cache_manager = CacheManager(cache_expiry_minutes=cache_expiry)
28-
provider = config_manager.get_provider()
29-
provider_url = config_manager.get_provider_url()
30-
token = config_manager.get_token()
31-
if provider == None:
32-
print("Provider not set")
29+
30+
provider_config = config_manager.get_provider_config()
31+
if not provider_config:
3332
exit(1)
34-
if provider_url == None:
35-
print("Provider url not set")
33+
if not provider_config.url:
3634
exit(1)
37-
fetcher = _create_fetcher(provider, provider_url, token)
35+
36+
fetcher = _create_fetcher(
37+
provider_config.name, provider_config.url, provider_config.token or None
38+
)
3839

3940
fresh_user_data = fetcher.fetch_user_data(username)
4041
fresh_stats = fetcher.fetch_user_stats(username, fresh_user_data)
@@ -264,17 +265,18 @@ def main() -> int:
264265
# Initialize components
265266
cache_expiry = config_manager.get_cache_expiry_minutes()
266267
cache_manager = CacheManager(cache_expiry_minutes=cache_expiry)
267-
provider = config_manager.get_provider()
268-
provider_url = config_manager.get_provider_url()
269-
token = config_manager.get_token()
270-
if provider == None:
271-
print("Provider not set")
268+
269+
provider_config = config_manager.get_provider_config()
270+
if not provider_config:
271+
print("Provider not set. Run: gitfetch --change-provider")
272272
return 1
273-
if provider_url == None:
274-
print("Provider url not set")
273+
if not provider_config.url:
274+
print("Provider URL not set. Run: gitfetch --change-provider")
275275
return 1
276276

277-
fetcher = _create_fetcher(provider, provider_url, token)
277+
fetcher = _create_fetcher(
278+
provider_config.name, provider_config.url, provider_config.token or None
279+
)
278280

279281
# Handle custom box character
280282
custom_box = args.custom_box
@@ -565,48 +567,53 @@ def _initialize_gitfetch(config_manager: ConfigManager) -> bool:
565567
if not provider:
566568
return False
567569

568-
config_manager.set_provider(provider)
569-
570-
# Set default URL for known providers
570+
# Determine URL for provider
571571
if provider == 'github':
572-
config_manager.set_provider_url('https://api.github.com')
572+
url = PROVIDER_DEFAULT_URLS.get('github', 'https://api.github.com')
573573
elif provider == 'gitlab':
574-
config_manager.set_provider_url('https://gitlab.com')
574+
url = PROVIDER_DEFAULT_URLS.get('gitlab', 'https://gitlab.com')
575575
elif provider == 'gitea':
576576
url = input("Enter Gitea/Forgejo/Codeberg URL: ").strip()
577577
if not url:
578578
print("Provider URL required", file=sys.stderr)
579579
return False
580-
config_manager.set_provider_url(url)
581580
elif provider == 'sourcehut':
582-
config_manager.set_provider_url('https://git.sr.ht')
583-
584-
# Ask for token if needed
585-
token = None
586-
if provider in ['gitlab', 'gitea', 'sourcehut', 'github']:
587-
token_input = input(
588-
f"Enter your {provider} personal access token{', needed for private repositories' if provider == 'github' else ''}\n"
589-
+
590-
"(optional, press Enter to skip): "
591-
).strip()
592-
if token_input:
593-
token = token_input
594-
config_manager.set_token(token)
595-
596-
# Create appropriate fetcher
597-
url = config_manager.get_provider_url()
598-
if url == None:
599-
print("Provider url could not be found.", file=sys.stderr)
581+
url = PROVIDER_DEFAULT_URLS.get('sourcehut', 'https://git.sr.ht')
582+
else:
583+
print(f"Unsupported provider: {provider}", file=sys.stderr)
600584
return False
601585

602-
fetcher = _create_fetcher(
603-
provider, url, token
586+
# Ask for token
587+
token = ''
588+
env_var = PROVIDER_ENV_VARS.get(provider, '')
589+
token_msg = f"Enter your {provider} personal access token"
590+
if provider == 'github':
591+
token_msg += " (needed for private repositories)"
592+
token_msg += f"\n(optional, press Enter to skip"
593+
if env_var:
594+
token_msg += f", or set {env_var} env var"
595+
token_msg += "): "
596+
597+
token_input = input(token_msg).strip()
598+
if token_input:
599+
token = token_input
600+
601+
# Create provider config
602+
provider_config = ProviderConfig(
603+
name=provider,
604+
username='', # Will be set after fetcher auth
605+
url=url,
606+
token=token
604607
)
605608

609+
# Create fetcher to get authenticated user
610+
fetcher = _create_fetcher(provider, url, token or None)
611+
606612
# Try to get authenticated user
607613
try:
608614
username = fetcher.get_authenticated_user()
609615
print(f"Using authenticated user: {username}")
616+
provider_config.username = username
610617
except Exception as e:
611618
print(f"Could not get authenticated user: {e}")
612619
if provider == 'github':
@@ -634,7 +641,8 @@ def _initialize_gitfetch(config_manager: ConfigManager) -> bool:
634641
else:
635642
config_manager.set_cache_expiry_minutes(15)
636643

637-
# Save configuration
644+
# Save configuration using new provider config system
645+
config_manager.set_provider_config(provider_config)
638646
config_manager.set_default_username(username)
639647
config_manager.save()
640648

0 commit comments

Comments
 (0)