Merge branch 'main' into saga/pr_description
This commit is contained in:
commit
58f1422e88
12 changed files with 71 additions and 17 deletions
|
|
@ -1,7 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="MypyConfigService">
|
||||
<option name="customMypyPath" value="$USER_HOME$/miniforge3/envs/codeflash311/bin/mypy" />
|
||||
<option name="customMypyPath" value="$USER_HOME$/miniforge3/envs/codeflash312/bin/mypy" />
|
||||
<option name="mypyConfigFilePath" value="$PROJECT_DIR$/cli/pyproject.toml" />
|
||||
<option name="scanBeforeCheckin" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -15,7 +15,6 @@ import inquirer.themes
|
|||
import tomlkit
|
||||
from git import InvalidGitRepositoryError, Repo
|
||||
from pydantic.dataclasses import dataclass
|
||||
from returns.pipeline import is_successful
|
||||
|
||||
from codeflash.api.cfapi import is_github_app_installed_on_repo
|
||||
from codeflash.cli_cmds.cli_common import apologize_and_exit, inquirer_wrapper, inquirer_wrapper_path
|
||||
|
|
@ -26,6 +25,7 @@ from codeflash.code_utils.env_utils import get_codeflash_api_key
|
|||
from codeflash.code_utils.git_utils import get_git_remotes, get_repo_owner_and_name
|
||||
from codeflash.code_utils.github_utils import get_github_secrets_page_url, require_github_app_or_exit
|
||||
from codeflash.code_utils.shell_utils import get_shell_rc_path, save_api_key_to_rc
|
||||
from codeflash.either import is_successful
|
||||
from codeflash.telemetry.posthog_cf import ph
|
||||
from codeflash.version import __version__ as version
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@ import re
|
|||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
from returns.result import Failure, Result, Success
|
||||
|
||||
from codeflash.code_utils.compat import LF
|
||||
from codeflash.either import Failure, Result, Success
|
||||
|
||||
if os.name == "nt": # Windows
|
||||
SHELL_RC_EXPORT_PATTERN = re.compile(r"^set CODEFLASH_API_KEY=(cf-.*)$", re.MULTILINE)
|
||||
|
|
|
|||
41
cli/codeflash/either.py
Normal file
41
cli/codeflash/either.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
L = TypeVar("L")
|
||||
R = TypeVar("R")
|
||||
|
||||
|
||||
class Result(Generic[L, R]):
|
||||
def __init__(self, value: L | R) -> None:
|
||||
self.value = value
|
||||
|
||||
def is_failure(self) -> bool:
|
||||
return isinstance(self, Failure)
|
||||
|
||||
def is_successful(self) -> bool:
|
||||
return isinstance(self, Success)
|
||||
|
||||
def unwrap(self) -> L | R:
|
||||
if self.is_failure():
|
||||
msg = "Cannot unwrap a failure"
|
||||
raise ValueError(msg)
|
||||
return self.value
|
||||
|
||||
def failure(self) -> L | R:
|
||||
if self.is_successful():
|
||||
msg = "Cannot get failure value from a success"
|
||||
raise ValueError(msg)
|
||||
return self.value
|
||||
|
||||
|
||||
class Failure(Result[L, R]):
|
||||
pass
|
||||
|
||||
|
||||
class Success(Result[L, R]):
|
||||
pass
|
||||
|
||||
|
||||
def is_successful(result: Result[L, R]) -> bool:
|
||||
return result.is_successful()
|
||||
|
|
@ -14,8 +14,6 @@ from typing import TYPE_CHECKING
|
|||
|
||||
import isort
|
||||
import libcst as cst
|
||||
from returns.pipeline import is_successful
|
||||
from returns.result import Failure, Success
|
||||
from rich.console import Group
|
||||
from rich.panel import Panel
|
||||
from rich.syntax import Syntax
|
||||
|
|
@ -44,6 +42,7 @@ from codeflash.code_utils.static_analysis import analyze_imported_modules, get_f
|
|||
from codeflash.code_utils.time_utils import humanize_runtime
|
||||
from codeflash.discovery.discover_unit_tests import discover_unit_tests
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize, get_functions_to_optimize
|
||||
from codeflash.either import Failure, Success, is_successful
|
||||
from codeflash.models.ExperimentMetadata import ExperimentMetadata
|
||||
from codeflash.models.models import (
|
||||
BestOptimization,
|
||||
|
|
@ -74,8 +73,7 @@ from codeflash.verification.verifier import generate_tests
|
|||
if TYPE_CHECKING:
|
||||
from argparse import Namespace
|
||||
|
||||
from returns.result import Result
|
||||
|
||||
from codeflash.either import Result
|
||||
from codeflash.models.models import CoverageData, FunctionCalledInTest, FunctionSource, OptimizedCandidate
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ click = ">=8.1.0"
|
|||
inquirer = ">=3.0.0"
|
||||
sentry-sdk = ">=1.40.6,<3.0.0"
|
||||
parameterized = ">=0.9.0"
|
||||
returns = ">=0.23"
|
||||
isort = ">=5.11.0"
|
||||
dill = ">=0.3.8"
|
||||
rich = ">=13.8.1"
|
||||
|
|
@ -135,7 +134,7 @@ show_error_end = true
|
|||
strict = true
|
||||
warn_unreachable = true
|
||||
install_types = true
|
||||
plugins = ["returns.contrib.mypy.returns_plugin", "pydantic.mypy"]
|
||||
plugins = ["pydantic.mypy"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = ["jedi", "jedi.api.classes", "inquirer", "inquirer.themes"]
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ from enum import Enum, Flag, IntFlag, auto
|
|||
|
||||
import pydantic
|
||||
import pytest
|
||||
from codeflash.either import Failure, Success
|
||||
from codeflash.verification.comparator import comparator
|
||||
from codeflash.verification.equivalence import compare_test_results
|
||||
from codeflash.verification.test_results import FunctionTestInvocation, InvocationId, TestResults, TestType
|
||||
from returns.result import Failure, Success
|
||||
|
||||
|
||||
def test_basic_python_objects():
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@ from dataclasses import dataclass
|
|||
|
||||
import pytest
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
||||
from codeflash.either import is_successful
|
||||
from codeflash.models.models import FunctionParent
|
||||
from codeflash.optimization.function_context import get_function_variables_definitions
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from returns.pipeline import is_successful
|
||||
|
||||
|
||||
def calculate_something(data):
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ from pathlib import Path
|
|||
|
||||
import pytest
|
||||
from codeflash.discovery.functions_to_optimize import FunctionToOptimize
|
||||
from codeflash.either import is_successful
|
||||
from codeflash.models.models import FunctionParent
|
||||
from codeflash.optimization.optimizer import Optimizer
|
||||
from returns.pipeline import is_successful
|
||||
|
||||
|
||||
class HelperClass:
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@ import unittest
|
|||
from pathlib import Path
|
||||
from unittest.mock import mock_open, patch
|
||||
|
||||
from returns.result import Failure, Success
|
||||
|
||||
from codeflash.code_utils.shell_utils import read_api_key_from_shell_config, save_api_key_to_rc
|
||||
from codeflash.either import Failure, Success
|
||||
|
||||
|
||||
class TestShellUtils(unittest.TestCase):
|
||||
|
|
|
|||
|
|
@ -72,7 +72,6 @@ sentry-sdk = { extras = ["django"], version = "^2.3.1" }
|
|||
isort = "^5.13.2"
|
||||
gitpython = "^3.1.43"
|
||||
ruff = ">=0.7.0"
|
||||
returns = "^0.23.0"
|
||||
pytest-django = "^4.8.0"
|
||||
nltk = "^3.9.1"
|
||||
openai = "^1.52.2"
|
||||
|
|
@ -97,7 +96,6 @@ strict = true
|
|||
warn_unreachable = true
|
||||
install_types = true
|
||||
plugins = [
|
||||
"returns.contrib.mypy.returns_plugin",
|
||||
"pydantic.mypy"
|
||||
]
|
||||
|
||||
|
|
|
|||
19
mypy.ini
Normal file
19
mypy.ini
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Global options:
|
||||
|
||||
[mypy]
|
||||
plugins = pydantic.mypy
|
||||
|
||||
show_error_code_links = True
|
||||
pretty = True
|
||||
show_absolute_path = True
|
||||
show_error_context = True
|
||||
show_error_end = True
|
||||
strict = True
|
||||
warn_unreachable = True
|
||||
install_types = True
|
||||
|
||||
[pydantic-mypy]
|
||||
init_forbid_extra = True
|
||||
init_typed = True
|
||||
warn_required_dynamic_aliases = True
|
||||
warn_untyped_fields = True
|
||||
Loading…
Reference in a new issue