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,
 | 
						|
        }
 |