greenmining 1.0.8__py3-none-any.whl → 1.0.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
greenmining/__init__.py CHANGED
@@ -9,7 +9,7 @@ from greenmining.gsf_patterns import (
9
9
  is_green_aware,
10
10
  )
11
11
 
12
- __version__ = "1.0.8"
12
+ __version__ = "1.0.9"
13
13
 
14
14
 
15
15
  def fetch_repositories(
@@ -144,7 +144,7 @@ class GitHubGraphQLFetcher:
144
144
  nodes = search.get("nodes", [])
145
145
  for node in nodes:
146
146
  if node and len(repositories) < max_repos:
147
- repo = self._parse_repository(node)
147
+ repo = self._parse_repository(node, len(repositories) + 1)
148
148
  repositories.append(repo)
149
149
 
150
150
  # Check pagination
@@ -212,37 +212,42 @@ class GitHubGraphQLFetcher:
212
212
  response.raise_for_status()
213
213
  return response.json()
214
214
 
215
- def _parse_repository(self, node: Dict[str, Any]) -> Repository:
215
+ def _parse_repository(self, node: Dict[str, Any], repo_id: int = 0) -> Repository:
216
216
  # Parse GraphQL repository node to Repository object.
217
- # Extract languages
218
- languages = []
219
- if node.get("languages") and node["languages"].get("nodes"):
220
- languages = [lang["name"] for lang in node["languages"]["nodes"]]
221
- elif node.get("primaryLanguage"):
222
- languages = [node["primaryLanguage"]["name"]]
217
+ full_name = node.get("nameWithOwner", "")
218
+ owner = full_name.split("/")[0] if "/" in full_name else ""
219
+ url = node.get("url", "")
220
+
221
+ # Extract primary language
222
+ lang_node = node.get("primaryLanguage") or {}
223
+ language = lang_node.get("name")
223
224
 
224
225
  # Extract license
225
- license_name = None
226
- if node.get("licenseInfo"):
227
- license_name = node["licenseInfo"].get("name")
226
+ license_info = node.get("licenseInfo") or {}
227
+ license_name = license_info.get("name")
228
+
229
+ # Extract default branch safely (can be null for empty repos)
230
+ branch_ref = node.get("defaultBranchRef") or {}
231
+ main_branch = branch_ref.get("name", "main")
228
232
 
229
233
  return Repository(
234
+ repo_id=repo_id,
230
235
  name=node.get("name", ""),
231
- full_name=node.get("nameWithOwner", ""),
232
- description=node.get("description", ""),
233
- url=node.get("url", ""),
236
+ owner=owner,
237
+ full_name=full_name,
238
+ url=url,
239
+ clone_url=f"{url}.git" if url else "",
240
+ language=language,
234
241
  stars=node.get("stargazerCount", 0),
235
242
  forks=node.get("forkCount", 0),
236
- watchers=node.get("watchers", {}).get("totalCount", 0),
237
- language=node.get("primaryLanguage", {}).get("name", ""),
238
- languages=languages,
243
+ watchers=(node.get("watchers") or {}).get("totalCount", 0),
244
+ open_issues=0,
245
+ last_updated=node.get("updatedAt", ""),
239
246
  created_at=node.get("createdAt", ""),
240
- updated_at=node.get("updatedAt", ""),
241
- pushed_at=node.get("pushedAt", ""),
247
+ description=node.get("description", ""),
248
+ main_branch=main_branch,
249
+ archived=node.get("isArchived", False),
242
250
  license=license_name,
243
- is_fork=node.get("isFork", False),
244
- is_archived=node.get("isArchived", False),
245
- default_branch=node.get("defaultBranchRef", {}).get("name", "main"),
246
251
  )
247
252
 
248
253
  def get_repository_commits(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: greenmining
3
- Version: 1.0.8
3
+ Version: 1.0.9
4
4
  Summary: An empirical Python library for Mining Software Repositories (MSR) in Green IT research
5
5
  Author-email: Adam Bouafia <a.bouafia@student.vu.nl>
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
- greenmining/__init__.py,sha256=cilA0cKdT3R8t-yFdkkcCvsSGzQ0PLoPMY2OQ4Irytg,2909
1
+ greenmining/__init__.py,sha256=0aYxDkV6H_sBdfQUGZ6n_MNUuv8RrJmSsa9LXB78OA4,2909
2
2
  greenmining/__main__.py,sha256=NYOVS7D4w2XDLn6SyXHXPKE5GrNGOeoWSTb_KazgK5c,590
3
3
  greenmining/__version__.py,sha256=xZc02a8bS3vUJlzh8k9RoxemB1irQmq_SpVVj6Cg5M0,62
4
4
  greenmining/config.py,sha256=M4a7AwM1ErCmOY0n5Vmyoo9HPblSkTZ-HD3k2YHzs4A,8340
@@ -34,11 +34,11 @@ greenmining/services/commit_extractor.py,sha256=Fz2WTWjIZ_vQhSfkJKnWpJnBpI2nm0Ka
34
34
  greenmining/services/data_aggregator.py,sha256=TsFT0oGOnnHk0QGZ1tT6ZhKGc5X1H1D1u7-7OpiPo7Y,19566
35
35
  greenmining/services/data_analyzer.py,sha256=f0nlJkPAclHHCzzTyQW5bjhYrgE0XXiR1x7_o3fJaDs,9732
36
36
  greenmining/services/github_fetcher.py,sha256=sdkS-LhHmX7mgMdlClCwEUVnZrItc0Pt6FVtlWk5iLU,106
37
- greenmining/services/github_graphql_fetcher.py,sha256=HvADlXGqrqfzqnsI9xJQifhy8rQ5fQzosdlCBdNxjsU,11467
37
+ greenmining/services/github_graphql_fetcher.py,sha256=ZklXdEAc60KeFL83zRYMwW_-2OwMKpfPY7Wrifl0D50,11539
38
38
  greenmining/services/local_repo_analyzer.py,sha256=5DMN9RIyGXNdsOlIDV4Mp0fPavbB69oBA9us17P5cNo,24668
39
39
  greenmining/services/reports.py,sha256=Vrw_pBNmVw2mTAf1dpcAqjBe6gXv-O4w_XweoVTt7L8,23392
40
- greenmining-1.0.8.dist-info/licenses/LICENSE,sha256=M7ma3JHGeiIZIs3ea0HTcFl_wLFPX2NZElUliYs4bCA,1083
41
- greenmining-1.0.8.dist-info/METADATA,sha256=46ygTrzFHVKFOPpF9gb9D_HbTCWs1ZN0VH4v1I7U7Zg,30913
42
- greenmining-1.0.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
- greenmining-1.0.8.dist-info/top_level.txt,sha256=nreXgXxZIWI-42yQknQ0HXtUrFnzZ8N1ra4Mdy2KcsI,12
44
- greenmining-1.0.8.dist-info/RECORD,,
40
+ greenmining-1.0.9.dist-info/licenses/LICENSE,sha256=M7ma3JHGeiIZIs3ea0HTcFl_wLFPX2NZElUliYs4bCA,1083
41
+ greenmining-1.0.9.dist-info/METADATA,sha256=Bo4NXk-LroVrvNYiNSgQixoyBF_jmhUWtqd_hWm5c_Q,30913
42
+ greenmining-1.0.9.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
+ greenmining-1.0.9.dist-info/top_level.txt,sha256=nreXgXxZIWI-42yQknQ0HXtUrFnzZ8N1ra4Mdy2KcsI,12
44
+ greenmining-1.0.9.dist-info/RECORD,,