mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Services module."""
 | 
						|
 | 
						|
from github import Github
 | 
						|
from github.Repository import Repository
 | 
						|
from github.Commit import Commit
 | 
						|
 | 
						|
 | 
						|
class SearchService:
 | 
						|
    """Search service performs search on Github."""
 | 
						|
 | 
						|
    def __init__(self, github_client: Github):
 | 
						|
        self._github_client = github_client
 | 
						|
 | 
						|
    def search_repositories(self, query, limit):
 | 
						|
        """Search for repositories and return formatted data."""
 | 
						|
        repositories = self._github_client.search_repositories(
 | 
						|
            query=query,
 | 
						|
            **{"in": "name"},
 | 
						|
        )
 | 
						|
        return [
 | 
						|
            self._format_repo(repository)
 | 
						|
            for repository in repositories[:limit]
 | 
						|
        ]
 | 
						|
 | 
						|
    def _format_repo(self, repository: Repository):
 | 
						|
        commits = repository.get_commits()
 | 
						|
        return {
 | 
						|
            "url": repository.html_url,
 | 
						|
            "name": repository.name,
 | 
						|
            "owner": {
 | 
						|
                "login": repository.owner.login,
 | 
						|
                "url": repository.owner.html_url,
 | 
						|
                "avatar_url": repository.owner.avatar_url,
 | 
						|
            },
 | 
						|
            "latest_commit": self._format_commit(commits[0]) if commits else {},
 | 
						|
        }
 | 
						|
 | 
						|
    def _format_commit(self, commit: Commit):
 | 
						|
        return {
 | 
						|
            "sha": commit.sha,
 | 
						|
            "url": commit.html_url,
 | 
						|
            "message": commit.commit.message,
 | 
						|
            "author_name": commit.commit.author.name,
 | 
						|
        }
 |