import functools
print = functools.partial(print,flush=True)
import read_env
import os
import argparse
from gitea_api import GiteaRepoManager
import logging
logging.basicConfig(level=logging.INFO)
# Reads by default .env
read_env.load_env()
def parse_arguments() -> argparse.Namespace:
"""
Parse command-line arguments with defaults from environment variables.
Returns:
argparse.Namespace: Parsed arguments with attributes:
- gitea_username (str)
- gitea_password (str)
- gitea_api_url (str)
- gitea_api_token (str)
- dry_run (bool)
"""
parser = argparse.ArgumentParser(
description=(
"Manage Gitea repositories. "
"Configure via command-line arguments or environment variables. "
"Contact: retoor <retoor@molodetz.nl> for support."
)
)
# Add arguments with defaults from environment variables
parser.add_argument(
'--gitea-username',
type=str,
default=os.environ.get('GITEA_USERNAME'),
help='Gitea username (default: from GITEA_USERNAME env variable)'
)
parser.add_argument(
'--gitea-password',
type=str,
default=os.environ.get('GITEA_PASSWORD'),
help='Gitea password (default: from GITEA_PASSWORD env variable)'
)
parser.add_argument(
'--gitea-api-url',
type=str,
default=os.environ.get('GITEA_API_URL'),
help='Gitea API URL (default: from GITEA_API_URL env variable)'
)
parser.add_argument(
'--gitea-api-token',
type=str,
default=os.environ.get('GITEA_API_TOKEN'),
help='Gitea API token (default: from GITEA_API_TOKEN env variable)'
)
# Mutually exclusive dry-run flags
dry_run_group = parser.add_mutually_exclusive_group()
dry_run_group.add_argument(
'--dry-run',
dest='dry_run',
action='store_true',
help='Perform a dry run without making changes (default: enabled)'
)
dry_run_group.add_argument(
'--no-dry-run',
dest='dry_run',
action='store_false',
help='Disable dry run and make real changes'
)
parser.set_defaults(dry_run=True)
return parser.parse_args()
def main() -> None:
"""
Main function to initialize the GiteaRepoManager with parsed arguments
and manage repositories.
"""
args = parse_arguments()
# Initialize the manager with arguments
manager = GiteaRepoManager(
api_url=args.gitea_api_url,
token=args.gitea_api_token,
username=args.gitea_username,
password=args.gitea_password,
)
# Manage repositories with dry_run as specified
manager.manage_repositories(dry_run=args.dry_run)
#manager.delete_users_above_id(1337, not args.dry_run, args.dry_run)
if __name__ == '__main__':
main()