diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4e7e0f3..c22a440 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,10 +13,10 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, 3.10, 3.11] + python-version: ['3.8', '3.9', '3.10', '3.11'] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 @@ -30,14 +30,15 @@ jobs: - name: Lint run: | - pip install flake8 + pip install flake8 ruff flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # stop the build if there are Python syntax errors or undefined names - #ruff --format=github --select=E9,F63,F7,F82 --target-version=py37 . + ruff --format=github --select=E9,F63,F7,F82 --target-version=py37 . # default set of ruff rules with GitHub Annotations - #ruff --format=github --target-version=py37 . + #ruff --format=github --target-version=py37 --ignore=F401,E501 . - name: Run tests run: | pip install pytest - pytest + cd pilot + PYTHONPATH=. pytest diff --git a/pilot/database/models/architecture.py b/pilot/database/models/architecture.py index 261acb9..e806130 100644 --- a/pilot/database/models/architecture.py +++ b/pilot/database/models/architecture.py @@ -12,4 +12,4 @@ class Architecture(ProgressStep): architecture = JSONField() # Custom JSON field for SQLite class Meta: - db_table = 'architecture' + table_name = 'architecture' diff --git a/pilot/database/models/command_runs.py b/pilot/database/models/command_runs.py index b6c34c4..a6b55fb 100644 --- a/pilot/database/models/command_runs.py +++ b/pilot/database/models/command_runs.py @@ -13,7 +13,7 @@ class CommandRuns(BaseModel): previous_step = ForeignKeyField('self', null=True, column_name='previous_step') class Meta: - db_table = 'command_runs' + table_name = 'command_runs' indexes = ( (('app', 'hash_id'), True), ) \ No newline at end of file diff --git a/pilot/database/models/development.py b/pilot/database/models/development.py index dea5a7e..2d3faaa 100644 --- a/pilot/database/models/development.py +++ b/pilot/database/models/development.py @@ -5,4 +5,4 @@ from database.models.components.progress_step import ProgressStep class Development(ProgressStep): class Meta: - db_table = 'development' + table_name = 'development' diff --git a/pilot/database/models/development_planning.py b/pilot/database/models/development_planning.py index 8fe7a55..c5831a9 100644 --- a/pilot/database/models/development_planning.py +++ b/pilot/database/models/development_planning.py @@ -12,4 +12,4 @@ class DevelopmentPlanning(ProgressStep): development_plan = JSONField() # Custom JSON field for SQLite class Meta: - db_table = 'development_planning' + table_name = 'development_planning' diff --git a/pilot/database/models/development_steps.py b/pilot/database/models/development_steps.py index 6492a4d..aaf6b66 100644 --- a/pilot/database/models/development_steps.py +++ b/pilot/database/models/development_steps.py @@ -20,7 +20,7 @@ class DevelopmentSteps(BaseModel): previous_step = ForeignKeyField('self', null=True, column_name='previous_step') class Meta: - db_table = 'development_steps' + table_name = 'development_steps' indexes = ( (('app', 'hash_id'), True), ) diff --git a/pilot/database/models/environment_setup.py b/pilot/database/models/environment_setup.py index e34d609..1fe22b7 100644 --- a/pilot/database/models/environment_setup.py +++ b/pilot/database/models/environment_setup.py @@ -3,4 +3,4 @@ from database.models.components.progress_step import ProgressStep class EnvironmentSetup(ProgressStep): class Meta: - db_table = 'environment_setup' + table_name = 'environment_setup' diff --git a/pilot/database/models/file_snapshot.py b/pilot/database/models/file_snapshot.py index 9138a5f..68659f2 100644 --- a/pilot/database/models/file_snapshot.py +++ b/pilot/database/models/file_snapshot.py @@ -12,7 +12,7 @@ class FileSnapshot(BaseModel): content = TextField() class Meta: - db_table = 'file_snapshot' + table_name = 'file_snapshot' indexes = ( (('development_step', 'file'), True), ) \ No newline at end of file diff --git a/pilot/database/models/project_description.py b/pilot/database/models/project_description.py index 462c1a2..bb4b5ac 100644 --- a/pilot/database/models/project_description.py +++ b/pilot/database/models/project_description.py @@ -7,4 +7,4 @@ class ProjectDescription(ProgressStep): summary = TextField() class Meta: - db_table = 'project_description' + table_name = 'project_description' diff --git a/pilot/database/models/user_apps.py b/pilot/database/models/user_apps.py index d70672f..38aee23 100644 --- a/pilot/database/models/user_apps.py +++ b/pilot/database/models/user_apps.py @@ -12,7 +12,7 @@ class UserApps(BaseModel): workspace = CharField(null=True) class Meta: - db_table = 'user_apps' + table_name = 'user_apps' indexes = ( (('app', 'user'), True), ) diff --git a/pilot/database/models/user_inputs.py b/pilot/database/models/user_inputs.py index 7d2451c..8c83993 100644 --- a/pilot/database/models/user_inputs.py +++ b/pilot/database/models/user_inputs.py @@ -13,7 +13,7 @@ class UserInputs(BaseModel): previous_step = ForeignKeyField('self', null=True, column_name='previous_step') class Meta: - db_table = 'user_inputs' + table_name = 'user_inputs' indexes = ( (('app', 'hash_id'), True), ) \ No newline at end of file diff --git a/pilot/database/models/user_stories.py b/pilot/database/models/user_stories.py index 025e255..dd7e06a 100644 --- a/pilot/database/models/user_stories.py +++ b/pilot/database/models/user_stories.py @@ -11,4 +11,4 @@ class UserStories(ProgressStep): else: user_stories = JSONField() # Custom JSON field for SQLite class Meta: - db_table = 'user_stories' + table_name = 'user_stories' diff --git a/pilot/database/models/user_tasks.py b/pilot/database/models/user_tasks.py index 533340a..261de2d 100644 --- a/pilot/database/models/user_tasks.py +++ b/pilot/database/models/user_tasks.py @@ -12,4 +12,4 @@ class UserTasks(ProgressStep): user_tasks = JSONField() # Custom JSON field for SQLite class Meta: - db_table = 'user_tasks' + table_name = 'user_tasks' diff --git a/pilot/logger/__init__.py b/pilot/logger/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pilot/main.py b/pilot/main.py index 751ea9a..d4f9a84 100644 --- a/pilot/main.py +++ b/pilot/main.py @@ -2,13 +2,10 @@ from __future__ import print_function, unicode_literals import sys - from dotenv import load_dotenv -from termcolor import colored load_dotenv() - +from termcolor import colored from helpers.Project import Project - from utils.arguments import get_arguments from utils.exit import exit_gpt_pilot from logger.logger import logger diff --git a/pilot/utils/arguments.py b/pilot/utils/arguments.py index 036cc2e..c4ed1a0 100644 --- a/pilot/utils/arguments.py +++ b/pilot/utils/arguments.py @@ -1,12 +1,10 @@ +import hashlib import os import re -import getpass -import hashlib import sys import uuid - +from getpass import getuser from termcolor import colored - from database.database import get_app, get_app_by_user_workspace @@ -27,7 +25,7 @@ def get_arguments(): arguments[arg] = True if 'user_id' not in arguments: - arguments['user_id'] = username_to_uuid(getpass.getuser()) + arguments['user_id'] = username_to_uuid(getuser()) app = None if 'workspace' in arguments: @@ -42,7 +40,6 @@ def get_arguments(): if app is None: app = get_app(arguments['app_id']) - # arguments['user_id'] = str(app.user.id) arguments['app_type'] = app.app_type arguments['name'] = app.name # Add any other fields from the App model you wish to include @@ -57,11 +54,10 @@ def get_arguments(): arguments['app_id'] = str(uuid.uuid4()) print(colored('\n------------------ STARTING NEW PROJECT ----------------------', 'green', attrs=['bold'])) - print(f"If you wish to continue with this project in future run:") + print("If you wish to continue with this project in future run:") print(colored(f'python {sys.argv[0]} app_id={arguments["app_id"]}', 'green', attrs=['bold'])) print(colored('--------------------------------------------------------------\n', 'green', attrs=['bold'])) - if 'email' not in arguments: arguments['email'] = get_email() diff --git a/pilot/utils/llm_connection.py b/pilot/utils/llm_connection.py index 17a7b64..c2ff747 100644 --- a/pilot/utils/llm_connection.py +++ b/pilot/utils/llm_connection.py @@ -118,7 +118,7 @@ def create_gpt_chat_completion(messages: List[dict], req_type, min_tokens=MIN_TO # Check if the error message is related to token limit if "context_length_exceeded" in error_message.lower(): - raise Exception(f'Too many tokens in the request. Please try to continue the project with some previous development step.') + raise Exception('Too many tokens in the request. Please try to continue the project with some previous development step.') else: print('The request to OpenAI API failed. Here is the error message:') print(e) @@ -163,7 +163,7 @@ def retry_on_exception(func): continue spinner_stop(spinner) - print(colored(f'There was a problem with request to openai API:', 'red')) + print(colored('There was a problem with request to openai API:', 'red')) print(err_str) user_message = questionary.text( @@ -251,7 +251,7 @@ def stream_gpt_completion(data, req_type): if json_line['choices'][0]['finish_reason'] == 'function_call': function_calls['arguments'] = load_data_to_json(function_calls['arguments']) - return return_result({'function_calls': function_calls}, lines_printed); + return return_result({'function_calls': function_calls}, lines_printed) json_line = json_line['choices'][0]['delta'] diff --git a/pilot/utils/test_arguments.py b/pilot/utils/test_arguments.py index f1844fc..25998e3 100644 --- a/pilot/utils/test_arguments.py +++ b/pilot/utils/test_arguments.py @@ -10,8 +10,9 @@ def test_email_found_in_gitconfig(): name = test_user email = test@example.com """ - with patch('builtins.open', mock_open(read_data=mock_file_content)): - assert get_email() == "test@example.com" + with patch('os.path.exists', return_value=True): + with patch('builtins.open', mock_open(read_data=mock_file_content)): + assert get_email() == "test@example.com" def test_email_not_found_in_gitconfig(): @@ -21,9 +22,10 @@ def test_email_not_found_in_gitconfig(): """ mock_uuid = "12345678-1234-5678-1234-567812345678" - with patch('builtins.open', mock_open(read_data=mock_file_content)): - with patch.object(uuid, "uuid4", return_value=mock_uuid): - assert get_email() == mock_uuid + with patch('os.path.exists', return_value=True): + with patch('builtins.open', mock_open(read_data=mock_file_content)): + with patch.object(uuid, "uuid4", return_value=mock_uuid): + assert get_email() == mock_uuid def test_gitconfig_not_present():