Removing Returns dependency.

This commit is contained in:
RD 2024-12-16 15:33:48 -08:00
parent f5ec0835b8
commit 2214b55394
12 changed files with 71 additions and 17 deletions

View file

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="MypyConfigService"> <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" /> <option name="scanBeforeCheckin" value="true" />
</component> </component>
</project> </project>

View file

@ -15,7 +15,6 @@ import inquirer.themes
import tomlkit import tomlkit
from git import InvalidGitRepositoryError, Repo from git import InvalidGitRepositoryError, Repo
from pydantic.dataclasses import dataclass from pydantic.dataclasses import dataclass
from returns.pipeline import is_successful
from codeflash.api.cfapi import is_github_app_installed_on_repo 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 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.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.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.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.telemetry.posthog_cf import ph
from codeflash.version import __version__ as version from codeflash.version import __version__ as version

View file

@ -3,9 +3,8 @@ import re
from pathlib import Path from pathlib import Path
from typing import Optional from typing import Optional
from returns.result import Failure, Result, Success
from codeflash.code_utils.compat import LF from codeflash.code_utils.compat import LF
from codeflash.either import Failure, Result, Success
if os.name == "nt": # Windows if os.name == "nt": # Windows
SHELL_RC_EXPORT_PATTERN = re.compile(r"^set CODEFLASH_API_KEY=(cf-.*)$", re.MULTILINE) SHELL_RC_EXPORT_PATTERN = re.compile(r"^set CODEFLASH_API_KEY=(cf-.*)$", re.MULTILINE)

41
cli/codeflash/either.py Normal file
View 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()

View file

@ -14,8 +14,6 @@ from typing import TYPE_CHECKING
import isort import isort
import libcst as cst import libcst as cst
from returns.pipeline import is_successful
from returns.result import Failure, Success
from rich.console import Group from rich.console import Group
from rich.panel import Panel from rich.panel import Panel
from rich.syntax import Syntax 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.code_utils.time_utils import humanize_runtime
from codeflash.discovery.discover_unit_tests import discover_unit_tests from codeflash.discovery.discover_unit_tests import discover_unit_tests
from codeflash.discovery.functions_to_optimize import FunctionToOptimize, get_functions_to_optimize 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.ExperimentMetadata import ExperimentMetadata
from codeflash.models.models import ( from codeflash.models.models import (
BestOptimization, BestOptimization,
@ -74,8 +73,7 @@ from codeflash.verification.verifier import generate_tests
if TYPE_CHECKING: if TYPE_CHECKING:
from argparse import Namespace from argparse import Namespace
from returns.result import Result from codeflash.either import Result
from codeflash.models.models import CoverageData, FunctionCalledInTest, FunctionSource, OptimizedCandidate from codeflash.models.models import CoverageData, FunctionCalledInTest, FunctionSource, OptimizedCandidate

View file

@ -87,7 +87,6 @@ click = ">=8.1.0"
inquirer = ">=3.0.0" inquirer = ">=3.0.0"
sentry-sdk = ">=1.40.6,<3.0.0" sentry-sdk = ">=1.40.6,<3.0.0"
parameterized = ">=0.9.0" parameterized = ">=0.9.0"
returns = ">=0.23"
isort = ">=5.11.0" isort = ">=5.11.0"
dill = ">=0.3.8" dill = ">=0.3.8"
rich = ">=13.8.1" rich = ">=13.8.1"
@ -135,7 +134,7 @@ show_error_end = true
strict = true strict = true
warn_unreachable = true warn_unreachable = true
install_types = true install_types = true
plugins = ["returns.contrib.mypy.returns_plugin", "pydantic.mypy"] plugins = ["pydantic.mypy"]
[[tool.mypy.overrides]] [[tool.mypy.overrides]]
module = ["jedi", "jedi.api.classes", "inquirer", "inquirer.themes"] module = ["jedi", "jedi.api.classes", "inquirer", "inquirer.themes"]

View file

@ -5,10 +5,10 @@ from enum import Enum, Flag, IntFlag, auto
import pydantic import pydantic
import pytest import pytest
from codeflash.either import Failure, Success
from codeflash.verification.comparator import comparator from codeflash.verification.comparator import comparator
from codeflash.verification.equivalence import compare_test_results from codeflash.verification.equivalence import compare_test_results
from codeflash.verification.test_results import FunctionTestInvocation, InvocationId, TestResults, TestType from codeflash.verification.test_results import FunctionTestInvocation, InvocationId, TestResults, TestType
from returns.result import Failure, Success
def test_basic_python_objects(): def test_basic_python_objects():

View file

@ -4,10 +4,10 @@ from dataclasses import dataclass
import pytest import pytest
from codeflash.discovery.functions_to_optimize import FunctionToOptimize from codeflash.discovery.functions_to_optimize import FunctionToOptimize
from codeflash.either import is_successful
from codeflash.models.models import FunctionParent from codeflash.models.models import FunctionParent
from codeflash.optimization.function_context import get_function_variables_definitions from codeflash.optimization.function_context import get_function_variables_definitions
from codeflash.optimization.optimizer import Optimizer from codeflash.optimization.optimizer import Optimizer
from returns.pipeline import is_successful
def calculate_something(data): def calculate_something(data):

View file

@ -4,9 +4,9 @@ from pathlib import Path
import pytest import pytest
from codeflash.discovery.functions_to_optimize import FunctionToOptimize from codeflash.discovery.functions_to_optimize import FunctionToOptimize
from codeflash.either import is_successful
from codeflash.models.models import FunctionParent from codeflash.models.models import FunctionParent
from codeflash.optimization.optimizer import Optimizer from codeflash.optimization.optimizer import Optimizer
from returns.pipeline import is_successful
class HelperClass: class HelperClass:

View file

@ -3,9 +3,8 @@ import unittest
from pathlib import Path from pathlib import Path
from unittest.mock import mock_open, patch 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.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): class TestShellUtils(unittest.TestCase):

View file

@ -72,7 +72,6 @@ sentry-sdk = { extras = ["django"], version = "^2.3.1" }
isort = "^5.13.2" isort = "^5.13.2"
gitpython = "^3.1.43" gitpython = "^3.1.43"
ruff = ">=0.7.0" ruff = ">=0.7.0"
returns = "^0.23.0"
pytest-django = "^4.8.0" pytest-django = "^4.8.0"
nltk = "^3.9.1" nltk = "^3.9.1"
openai = "^1.52.2" openai = "^1.52.2"
@ -97,7 +96,6 @@ strict = true
warn_unreachable = true warn_unreachable = true
install_types = true install_types = true
plugins = [ plugins = [
"returns.contrib.mypy.returns_plugin",
"pydantic.mypy" "pydantic.mypy"
] ]

19
mypy.ini Normal file
View 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