Compare commits

..

11 Commits

Author SHA1 Message Date
Ritchie Mwewa
eed3ee8e1c 4.0 stable 2026-01-06 22:31:38 +02:00
Ritchie Mwewa
5bb0b6db6b 4.0 stable 2026-01-06 22:19:11 +02:00
Ritchie Mwewa
1916a7e1a6 4.0/release-candidate 2026-01-06 22:12:49 +02:00
Ritchie Mwewa
400829c6ec 4.0/release-candidate 2026-01-06 22:10:52 +02:00
Ritchie Mwewa
914e320b9e Merge pull request #27 from bellingcat/4.0/release-candidate
4.0/release-candidate
2026-01-06 21:44:48 +02:00
Ritchie Mwewa
170148172d Merge branch 'master' into 4.0/release-candidate 2026-01-06 21:44:39 +02:00
Ritchie Mwewa
4d589beda5 4.0/release-candidate 2026-01-06 21:36:25 +02:00
Ritchie Mwewa
4f207d5343 Merge pull request #26 from bellingcat/4.0/beta
4.0/beta
2026-01-04 06:07:56 +02:00
Ritchie Mwewa
9de7bf1bfc Merge branch 'master' into 4.0/beta 2026-01-04 06:07:45 +02:00
Ritchie Mwewa
8d0695324a Merge branch '4.0/beta' of github.com:bellingcat/octosuite into 4.0/beta 2026-01-04 06:06:29 +02:00
Ritchie Mwewa
6ce80a1eea Patch for bug that called the 'Press ENTER to continue...' prompt, when we skip exporting response 2026-01-04 06:05:18 +02:00
6 changed files with 18 additions and 15 deletions

View File

@@ -7,7 +7,6 @@ TUI-based toolkit for GitHub data analysis.
![Code Size](https://img.shields.io/github/languages/code-size/bellingcat/octosuite)
![Release Date](https://img.shields.io/github/release-date/bellingcat/octosuite)
![Build Status](https://img.shields.io/github/actions/workflow/status/bellingcat/octosuite/python-publish.yml)
[![CodeQL Advanced](https://github.com/bellingcat/octosuite/actions/workflows/codeql.yml/badge.svg)](https://github.com/bellingcat/octosuite/actions/workflows/codeql.yml)
![License](https://img.shields.io/github/license/bellingcat/octosuite)
## Overview

View File

@@ -1,6 +1,6 @@
[project]
name = "octosuite"
version = "4.0.0beta2"
version = "4.0.0"
description = "TUI-based toolkit for GitHub data analysis."
readme = "README.md"
license = "MIT"
@@ -12,10 +12,11 @@ dependencies = [
"rich>=14.2.0",
"questionary>=2.1.1",
"pyfiglet>=1.0.4",
"update-checker>=0.18.0"
"update-checker>=0.18.0",
"black>=25.12.0",
]
classifiers = [
"Development Status :: 4 - Beta",
"Development Status :: 5 - Production/Stable",
"Programming Language :: Python :: 3",
"Intended Audience :: End Users/Desktop",
"Operating System :: OS Independent",

View File

@@ -1,2 +1,2 @@
__pkg__ = "octosuite"
__version__ = "4.0.0beta2"
__version__ = "4.0.0"

View File

@@ -63,6 +63,7 @@ def preview_response(data: t.Union[dict, list], source: str, _type: str):
item.get("full_name")
or item.get("name")
or item.get("login")
or item.get("type")
or item.get("id")
or "Item"
)
@@ -215,12 +216,12 @@ def fill_tree(tree: Tree, data: t.Union[dict, list]) -> Tree:
def check_updates():
"""Check for available package updates and display the result."""
with console.status("[dim]Checking for updates...[/dim]") as status:
with console.status("[dim]Checking for updates[/dim]") as status:
checker = UpdateChecker()
result = checker.check(__pkg__, __version__)
if result is not None:
status.stop()
message_dialog(title="Update Available", text=result).run()
message_dialog(title="Update Available", text=str(result)).run()
else:
status.stop()
message_dialog(

View File

@@ -99,7 +99,7 @@ class BaseMenu:
target_type = "org"
with Status(
f"[dim]Validating {target_type} ({identifier})[/dim]...",
f"[dim]Validating {target_type} ({identifier})[/dim]",
console=console,
) as status:
exists, response = instance.exists()
@@ -110,7 +110,7 @@ class BaseMenu:
console.print(
f"[bold][yellow]✘[/yellow] {response['message']}[/bold]"
)
console.input(" Press [bold]ENTER[/bold] to continue ...")
console.input(" Press [bold]ENTER[/bold] to continue ")
callback(*callback_args)
return False
@@ -135,7 +135,7 @@ class BaseMenu:
valid_methods = self.paginated_methods | self.non_paginated_methods
if method_name in valid_methods:
with Status(
status=f"[dim]Initialising {target_type} {method_name}[/dim]...",
status=f"[dim]Initialising {target_type} {method_name}[/dim]",
console=console,
) as status:
data = self.execute_selection(
@@ -168,7 +168,7 @@ class BaseMenu:
prompts.pagination_params() if method_name in self.paginated_methods else {}
)
status.start()
status.update(f"[dim]Getting {method_name} from {source}[/dim]...")
status.update(f"[dim]Getting {method_name} from {source}[/dim]")
return method(**params)
def response_handler(self, data: t.Union[dict, list], data_type: str, source: str):
@@ -258,10 +258,10 @@ class BaseMenu:
source=source,
file_formats=file_formats,
)
console.input(" Press [bold]ENTER[/bold] to continue …")
except KeyboardInterrupt:
console.print("\nExport cancelled")
finally:
console.input(" Press [bold]ENTER[/bold] to continue ...")
def navigation_handler(self, option: str, callback: t.Callable, *callback_args):
"""
@@ -470,7 +470,7 @@ class Menus(BaseMenu):
# Execute search if it's a valid method
if option in self.search_methods:
with Status(
status=f"[dim]Initialising {option} search[/dim]...", console=console
status=f"[dim]Initialising {option} search[/dim]", console=console
) as status:
status.stop()
params = prompts.pagination_params()
@@ -484,7 +484,7 @@ class Menus(BaseMenu):
)
method = getattr(search, option)
status.update(f"[dim]Searching {option} for {query}[/dim]...")
status.update(f"[dim]Searching {option} for {query}[/dim]")
data = method()
if data:

2
uv.lock generated
View File

@@ -144,6 +144,7 @@ name = "octosuite"
version = "4.0.0"
source = { virtual = "." }
dependencies = [
{ name = "black" },
{ name = "pyfiglet" },
{ name = "questionary" },
{ name = "rich" },
@@ -157,6 +158,7 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "black", specifier = ">=25.12.0" },
{ name = "black", marker = "extra == 'dev'", specifier = ">=25.12.0" },
{ name = "pyfiglet", specifier = ">=1.0.4" },
{ name = "questionary", specifier = ">=2.1.1" },