File size: 2,198 Bytes
bd84e95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0e24b58
bd84e95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from github import Github
from collections import Counter
from date import date_is_within_one_year

def top_ten_strings(strings):
    """
    Counts occurrences of strings in a list and returns the top ten by count.

    :param strings: List of strings to count.
    :return: List of tuples containing the string and its count, sorted by count in descending order.
    """
    # Count the occurrences of each string
    string_counts = Counter(strings)

    # Get the top 10 most common strings
    top_ten = string_counts.most_common(10)

    return top_ten

def sort_dict_by_value(d):
    """
    Sorts a dictionary by its integer values in descending order and returns up to the first 10 items.
    :param d: Dictionary with string keys and integer values.
    :return: List of tuples containing the key and value, sorted by value in descending order.
    """
    # Sort the dictionary by its values in descending order and take the first 10 items
    sorted_items = sorted(d.items(), key=lambda item: item[1], reverse=True)[:5]
    sorted_items = {el[0]: el[1] for el in sorted_items}
    return sorted_items

def get_repo_info(username,token):
    gh = Github(token)
    user = gh.get_user(username)
    repos = user.get_repos()
    repocount = 0
    gained_stars = 0
    gained_forks = 0
    topics = []
    languages = {}
    for repo in repos:
        if date_is_within_one_year(repo.created_at):
            repocount+=1
            rep_topics = repo.get_topics()
            gained_stars += repo.stargazers_count
            gained_forks += repo.forks_count
            for topic in rep_topics:
                topics.append(topic)
            langss = repo.get_languages()
            for lang in langss:
                if lang in languages:
                    languages[lang]+=langss[lang]
                else:
                    languages.update({lang: langss[lang]})
    top_10_topics = top_ten_strings(topics)
    top_10_langs_abs = sort_dict_by_value(languages)
    sum_langs = sum(list(languages.values()))
    top_10_langs = {l: round(top_10_langs_abs[l]*100/sum_langs,2) for l in top_10_langs_abs}
    return repocount, gained_stars, gained_forks, top_10_topics, top_10_langs