From f84d304f096b9b7e0ee68781c437554c7c2571e2 Mon Sep 17 00:00:00 2001 From: Diamantis Sellis Date: Mon, 22 Sep 2025 13:35:37 +0200 Subject: [PATCH 1/2] chore: upgrade to most recent api version --- eye/main.py | 41 ++++++++++++++--------------------------- pyproject.toml | 4 ++-- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/eye/main.py b/eye/main.py index bed6f67..a0b83fc 100644 --- a/eye/main.py +++ b/eye/main.py @@ -92,15 +92,12 @@ def load_token(self): def update_organizations(self): try: - if refactored: - self.organizations = self.organization_api_instance.list_organizations() - else: - self.organizations = ( - self.organization_api_instance.find_all_organizations() - ) + self.organizations = ( + self.organization_api_instance.list_organizations() + ) except Exception as e: - raise RuntimeError(f"Error getting organizations {e}") logger.error(f"error {e}") + raise RuntimeError(f"Error getting organizations {e}") def get_organization_list(self): return [organization.id for organization in self.organizations] @@ -123,7 +120,7 @@ def get_runner_list(self, organization_id, workspace_id): def update_solutions(self, organization_id): try: self.solutions[organization_id] = ( - self.solution_api_instance.find_all_solutions(organization_id) + self.solution_api_instance.list_solutions(organization_id) ) except Exception as e: print(f"error {e}") @@ -131,7 +128,7 @@ def update_solutions(self, organization_id): def update_workspaces(self, organization_id): try: self.workspaces[organization_id] = ( - self.workspace_api_instance.find_all_workspaces(organization_id) + self.workspace_api_instance.list_workspaces(organization_id) ) except Exception as e: print(f"error {e}") @@ -146,18 +143,11 @@ def update_runners(self, organization_id, workspace_id): def update_runs(self, organization_id, workspace_id, runner_id): try: - if refactored: - self.runs[organization_id, workspace_id, runner_id] = ( - self.run_api_instance.find_all_runs( - organization_id, workspace_id, runner_id - ) - ) - else: - self.runs[organization_id, workspace_id, runner_id] = ( - self.run_api_instance.list_runs( - organization_id, workspace_id, runner_id - ) + self.runs[organization_id, workspace_id, runner_id] = ( + self.run_api_instance.list_runs( + organization_id, workspace_id, runner_id ) + ) except Exception as e: print(f"error {e}") @@ -209,13 +199,10 @@ def update_summary_data(self): self.update_runners(organization.id, workspace.id) def create_organization(self, organization): - if refactored: - logger.warning("Not implemented yet") - else: - try: - self.organization_api_instance.register_organization(organization) - except Exception as e: - logger.error(f"kati pige strava {e}") + try: + self.organization_api_instance.register_organization(organization) + except Exception as e: + logger.error(f"kati pige strava {e}") def delete_organization(self, organization_id): try: diff --git a/pyproject.toml b/pyproject.toml index 9feaace..6b8867a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,11 @@ [project] name = "eye" -version = "0.6.0" +version = "0.7.0" description = "A sample Python project" authors = [{name = "Diamantis Sellis", email = "diamantis.sellis@cosmotech.com"}] license = { text = "MIT" } dependencies = [ - "cosmotech-api @ git+https://github.com/Cosmo-Tech/cosmotech-api-python-client.git", + "cosmotech-api==5.0.0b5", "pytest>=8.3.4", "ruff>=0.8.4", "python-keycloak~=5.1.1", From 7684de2ab03e406aa6c4bbcae6af2a272bcb1e1f Mon Sep 17 00:00:00 2001 From: Diamantis Sellis Date: Mon, 22 Sep 2025 13:47:15 +0200 Subject: [PATCH 2/2] feat: automate linting --- .github/workflows/lint.yml | 20 +++++++++++++++++++ .gitignore | 2 +- eye/app.py | 10 ++++++---- eye/llm.py | 5 +++-- eye/main.py | 32 ++++++++++++------------------ eye/views/chatbot_screen.py | 13 ++++++------ eye/views/object_explore_widget.py | 3 ++- eye/views/object_screen.py | 6 ++++-- eye/views/object_tree_widget.py | 6 +++--- eye/views/object_viewer_widget.py | 2 +- eye/views/organization_widget.py | 4 ++-- eye/views/user_screen.py | 10 ++++++---- eye/views/users_widget.py | 2 +- eye/widgets/status.py | 2 +- 14 files changed, 70 insertions(+), 47 deletions(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..628fe70 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,20 @@ +name: Lint + +on: + push: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v5 + + - name: setup ruff + uses: astral-sh/ruff-action@v3 + + - name: check + run: ruff check --output-format=github . + + - name: format + run: ruff format \ No newline at end of file diff --git a/.gitignore b/.gitignore index 15d5d04..2d56265 100644 --- a/.gitignore +++ b/.gitignore @@ -103,7 +103,7 @@ ipython_config.py # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. -#uv.lock +uv.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. diff --git a/eye/app.py b/eye/app.py index 27dab6e..1ba1ef1 100644 --- a/eye/app.py +++ b/eye/app.py @@ -1,12 +1,14 @@ +import logging +from pathlib import Path + from textual.app import App from textual.reactive import reactive + from eye.main import RUON -from pathlib import Path -import logging -from eye.views.user_screen import UserScreen +from eye.views.chatbot_screen import ChatBotScreen from eye.views.object_screen import ObjectScreen +from eye.views.user_screen import UserScreen from eye.widgets.status import ConnectionStatus -from eye.views.chatbot_screen import ChatBotScreen # Create loggers diff --git a/eye/llm.py b/eye/llm.py index e31741a..34a9635 100644 --- a/eye/llm.py +++ b/eye/llm.py @@ -1,7 +1,8 @@ -from typing import List, Dict +import logging import os +from typing import Dict, List + import aiohttp -import logging logger = logging.getLogger(__name__) diff --git a/eye/main.py b/eye/main.py index a0b83fc..3c339ae 100644 --- a/eye/main.py +++ b/eye/main.py @@ -1,22 +1,18 @@ -from dotenv import dotenv_values +import logging +import time + +import pandas as pd +from cosmotech_api import ApiClient, Configuration from cosmotech_api.api.organization_api import OrganizationApi +from cosmotech_api.api.run_api import RunApi +from cosmotech_api.api.runner_api import RunnerApi from cosmotech_api.api.solution_api import SolutionApi from cosmotech_api.api.workspace_api import WorkspaceApi -from cosmotech_api.api.runner_api import RunnerApi -from cosmotech_api.api.run_api import RunApi -from cosmotech_api import ApiClient, Configuration -from cosmotech_api.api.organization_api import OrganizationApi -from cosmotech_api.models.organization import Organization -from cosmotech_api.models.organization_security import OrganizationSecurity -from cosmotech_api.models.organization_access_control import OrganizationAccessControl -from cosmotech_api.models.organization_create_request import OrganizationCreateRequest +from dotenv import dotenv_values from keycloak import KeycloakOpenID -from rich.tree import Tree from rich.console import Console from rich.logging import RichHandler -import pandas as pd -import time -import logging +from rich.tree import Tree # feature flag refactored = False @@ -33,7 +29,7 @@ class RUON: def __init__(self): - logger.info(f"[bold blue]Initializing RUON[/]") + logger.info("[bold blue]Initializing RUON[/]") start_time = time.time() try: @@ -92,9 +88,7 @@ def load_token(self): def update_organizations(self): try: - self.organizations = ( - self.organization_api_instance.list_organizations() - ) + self.organizations = self.organization_api_instance.list_organizations() except Exception as e: logger.error(f"error {e}") raise RuntimeError(f"Error getting organizations {e}") @@ -119,8 +113,8 @@ def get_runner_list(self, organization_id, workspace_id): def update_solutions(self, organization_id): try: - self.solutions[organization_id] = ( - self.solution_api_instance.list_solutions(organization_id) + self.solutions[organization_id] = self.solution_api_instance.list_solutions( + organization_id ) except Exception as e: print(f"error {e}") diff --git a/eye/views/chatbot_screen.py b/eye/views/chatbot_screen.py index 9cb7f90..82fc5b1 100644 --- a/eye/views/chatbot_screen.py +++ b/eye/views/chatbot_screen.py @@ -1,10 +1,11 @@ -from textual.screen import Screen -from textual.widgets import Input, Markdown, Header, Footer -from textual.containers import Container, VerticalScroll -from textual import on, work -from textual import events import logging import os + +from textual import events, on, work +from textual.containers import Container, VerticalScroll +from textual.screen import Screen +from textual.widgets import Footer, Header, Input, Markdown + from ..llm import ChatAPI logger = logging.getLogger(__name__) @@ -50,7 +51,7 @@ def handle_input(self, event: Input.Submitted) -> None: async def get_bot_response(self, message: str) -> None: """Worker to get bot response asynchronously""" try: - response = await self.chat_api.send_message(message) + await self.chat_api.send_message(message) self.update_chat_display() except Exception as e: logger.error(f"Error getting bot response: {e}") diff --git a/eye/views/object_explore_widget.py b/eye/views/object_explore_widget.py index 078ad2d..11d3859 100644 --- a/eye/views/object_explore_widget.py +++ b/eye/views/object_explore_widget.py @@ -1,6 +1,7 @@ -from textual.containers import Horizontal from textual import on +from textual.containers import Horizontal from textual.widget import Widget + from eye.views.object_tree_widget import ObjectTreeWidget from eye.views.object_viewer_widget import ObjectViewerWidget diff --git a/eye/views/object_screen.py b/eye/views/object_screen.py index 7428d84..5c72f4e 100644 --- a/eye/views/object_screen.py +++ b/eye/views/object_screen.py @@ -1,6 +1,8 @@ -from textual.screen import Screen -from textual.widgets import Header, Footer import logging + +from textual.screen import Screen +from textual.widgets import Footer, Header + from eye.views.object_explore_widget import ObjectExplorerWidget logger = logging.getLogger("back.front") diff --git a/eye/views/object_tree_widget.py b/eye/views/object_tree_widget.py index aae747b..3332b2f 100644 --- a/eye/views/object_tree_widget.py +++ b/eye/views/object_tree_widget.py @@ -1,8 +1,8 @@ -from textual.widgets import Tree -from textual.notifications import Notify +import logging + from cosmotech_api.models.organization import Organization from cosmotech_api.models.workspace import Workspace -import logging +from textual.widgets import Tree logger = logging.getLogger(__name__) diff --git a/eye/views/object_viewer_widget.py b/eye/views/object_viewer_widget.py index d959bfb..164db64 100644 --- a/eye/views/object_viewer_widget.py +++ b/eye/views/object_viewer_widget.py @@ -1,6 +1,6 @@ -from textual.widgets import Pretty from textual.containers import ScrollableContainer from textual.widget import Widget +from textual.widgets import Pretty class ObjectViewerWidget(Widget): diff --git a/eye/views/organization_widget.py b/eye/views/organization_widget.py index da2db45..2b44346 100644 --- a/eye/views/organization_widget.py +++ b/eye/views/organization_widget.py @@ -1,7 +1,7 @@ +from textual import on +from textual.message import Message from textual.widgets import OptionList from textual.widgets.option_list import Option -from textual.message import Message -from textual import on class OrganizationWidget(OptionList): diff --git a/eye/views/user_screen.py b/eye/views/user_screen.py index 34ecac2..4d1ff36 100644 --- a/eye/views/user_screen.py +++ b/eye/views/user_screen.py @@ -1,10 +1,12 @@ -from textual.screen import Screen -from textual.widgets import Header, Footer -from textual.containers import Horizontal, Vertical, Container import logging + +from textual.containers import Container, Horizontal, Vertical +from textual.screen import Screen +from textual.widgets import Footer, Header + from eye.views.users_widget import UsersWidget -from eye.widgets.status import ConnectionStatus from eye.widgets.config_label import ConfigLabel +from eye.widgets.status import ConnectionStatus logger = logging.getLogger("back.front") diff --git a/eye/views/users_widget.py b/eye/views/users_widget.py index 1845e00..a87b565 100644 --- a/eye/views/users_widget.py +++ b/eye/views/users_widget.py @@ -1,6 +1,6 @@ +from textual import on from textual.containers import Horizontal from textual.widget import Widget -from textual import on from eye.views.organization_widget import OrganizationWidget from eye.views.security_widget import SecurityWidget diff --git a/eye/widgets/status.py b/eye/widgets/status.py index 61e0b7c..c06b141 100644 --- a/eye/widgets/status.py +++ b/eye/widgets/status.py @@ -1,5 +1,5 @@ -from textual.widgets import Static from textual.reactive import reactive +from textual.widgets import Static class ConnectionStatus(Static):