🔧 Based on the provided code snippets, the commit message for the changes in the README.md file should be:
This commit is contained in:
11 files changed
+1033
-513
No files matched your search
@@ -0,0 +1,130 @@
|
||||
"""License generator module."""
|
||||
|
||||
import os
|
||||
import requests
|
||||
from typing import Dict, List, Optional
|
||||
from ..shared.config import Config
|
||||
|
||||
class LicenseGenerator:
|
||||
"""License generator using GitHub API."""
|
||||
|
||||
def __init__(self):
|
||||
"""Initialize the license generator."""
|
||||
self.api_base_url = "https://api.github.com"
|
||||
self.config = Config()
|
||||
|
||||
def _get_headers(self) -> Dict[str, str]:
|
||||
"""Get headers for API requests."""
|
||||
# Try to get token from config first
|
||||
token = self.config.get("github_token")
|
||||
|
||||
# Then try environment variable
|
||||
if not token:
|
||||
token = os.environ.get("GITHUB_TOKEN")
|
||||
|
||||
headers = {
|
||||
"Accept": "application/vnd.github.v3+json",
|
||||
"User-Agent": "DevTools/1.0"
|
||||
}
|
||||
|
||||
if token:
|
||||
headers["Authorization"] = f"Bearer {token}"
|
||||
|
||||
return headers
|
||||
|
||||
def fetch_available_licenses(self) -> List[Dict]:
|
||||
"""Fetch available licenses from GitHub API."""
|
||||
try:
|
||||
# Get headers with token
|
||||
headers = self._get_headers()
|
||||
|
||||
# First check rate limit
|
||||
rate_limit_response = requests.get(
|
||||
f"{self.api_base_url}/rate_limit",
|
||||
headers=headers
|
||||
)
|
||||
if rate_limit_response.status_code == 200:
|
||||
rate_limit_data = rate_limit_response.json()
|
||||
|
||||
# Check if we have remaining requests
|
||||
remaining = rate_limit_data.get("resources", {}).get("core", {}).get("remaining", 0)
|
||||
if remaining == 0:
|
||||
raise ValueError("GitHub API rate limit exceeded. Please set a GitHub token using:\ndevtools config set GITHUB_TOKEN YOUR_GITHUB_TOKEN")
|
||||
|
||||
# Fetch list of licenses
|
||||
response = requests.get(
|
||||
f"{self.api_base_url}/licenses",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
if response.status_code == 403:
|
||||
raise ValueError("GitHub API rate limit exceeded. Please set a GitHub token using:\ndevtools config set GITHUB_TOKEN YOUR_GITHUB_TOKEN")
|
||||
|
||||
response.raise_for_status()
|
||||
licenses = response.json()
|
||||
|
||||
# Fetch detailed info for each license
|
||||
detailed_licenses = []
|
||||
for license in licenses:
|
||||
try:
|
||||
license_response = requests.get(
|
||||
f"{self.api_base_url}/licenses/{license['key']}",
|
||||
headers=headers
|
||||
)
|
||||
if license_response.status_code == 200:
|
||||
license_data = license_response.json()
|
||||
detailed_licenses.append({
|
||||
"key": license_data["key"],
|
||||
"name": license_data["name"],
|
||||
"description": license_data.get("description", "No description available"),
|
||||
"permissions": license_data.get("permissions", []),
|
||||
"conditions": license_data.get("conditions", []),
|
||||
"limitations": license_data.get("limitations", [])
|
||||
})
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
return detailed_licenses
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
raise ValueError(f"Error fetching licenses: {str(e)}")
|
||||
|
||||
def get_license_template(self, license_type: str) -> str:
|
||||
"""Get license template from GitHub API."""
|
||||
try:
|
||||
response = requests.get(
|
||||
f"{self.api_base_url}/licenses/{license_type}",
|
||||
headers=self._get_headers()
|
||||
)
|
||||
response.raise_for_status()
|
||||
return response.json()["body"]
|
||||
except requests.exceptions.RequestException as e:
|
||||
raise ValueError(f"Error fetching license template: {str(e)}")
|
||||
|
||||
def generate_license(self, license_type: str, author: str, year: Optional[int] = None) -> str:
|
||||
"""Generate license content with author and year."""
|
||||
template = self.get_license_template(license_type)
|
||||
|
||||
# Replace placeholders
|
||||
content = template.replace("[year]", str(year) if year else "")
|
||||
content = content.replace("[fullname]", author)
|
||||
|
||||
return content
|
||||
|
||||
# Create a singleton instance
|
||||
license_generator = LicenseGenerator()
|
||||
|
||||
def generate_license(license_type: str, author: str, year: Optional[int] = None, output_file: str = "LICENSE") -> str:
|
||||
"""Generate a license file."""
|
||||
try:
|
||||
# Generate license content
|
||||
content = license_generator.generate_license(license_type, author, year)
|
||||
|
||||
# Write to file
|
||||
with open(output_file, "w") as f:
|
||||
f.write(content)
|
||||
|
||||
return output_file
|
||||
|
||||
except Exception as e:
|
||||
raise ValueError(f"Error generating license: {str(e)}")
|
||||
Reference in new issue
Block a user