Skip to content

Commit e851c63

Browse files
committed
chore: enforce new ruff lint rules
1 parent d00e631 commit e851c63

File tree

4 files changed

+74
-50
lines changed

4 files changed

+74
-50
lines changed

pyproject.toml

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,35 @@ target-version = "py39"
5757
[tool.ruff.lint]
5858
extend-ignore = ["D107"]
5959
pydocstyle = { convention = "google" }
60-
select = ["D", "E", "F", "I", "S", "UP"]
60+
# TODO: enable commented out rules and fix errors
61+
select = [
62+
# "A", # flake8-builtins: avoid shadowing built-in names
63+
# "ANN", # flake8-annotations: check for missing type annotations
64+
"ASYNC", # flake8-async: enforce best practices for async code
65+
"B", # flake8-bugbear: find likely bugs and design problems in your program
66+
"C4", # flake8-comprehensions: enforce best practices for list/set/dict comprehensions
67+
"D", # pydocstyle: check compliance with docstring conventions
68+
"E", # pycodestyle errors: check for PEP 8 style convention errors
69+
"F", # pyflakes: check for Python source file errors
70+
# "FA", # flake8-future-annotations: enforce usage of future annotations when relevant
71+
"I", # isort: enforce import sorting
72+
"ICN", # flake8-import-conventions: enforce general import conventions
73+
"ISC", # flake8-implicit-str-concat: check for invalid implicit or explicit string concatenation
74+
"N", # pep8-naming: check for naming convention violations
75+
"PERF", # perflint: check for performance anti-patterns
76+
# "PT", # flake8-pytest-style: check common style issues and inconsistencies in pytest-based tests
77+
"PTH", # flake8-use-pathlib: enforce usage of pathlib for path manipulations instead of os.path
78+
"Q", # flake8-quotes: enforce consistent string quote usage
79+
"RET", # flake8-return: enforce best practices for return statements
80+
"RSE", # flake8-raise: enforce best practices for raise statements
81+
"RUF", # ruff: enforce ruff specific rules
82+
"S", # flake8-bandit: check for security issues
83+
"SLF", # flake8-self: prevent accessing private class member
84+
"TC", # flake8-type-checking: enforce best practices for type checking imports
85+
"TD", # flake8-todos: check issues on TODO comment syntax
86+
"UP", # pyupgrade: upgrade syntax for newer versions of Python
87+
"W", # pycodestyle warnings: check for PEP 8 style convention warnings
88+
]
6189

6290
[tool.ruff.lint.extend-per-file-ignores]
6391
"examples/*.py" = ["D"]

src/linkup/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,20 @@
2020
)
2121

2222
__all__ = [
23-
"__version__",
24-
"LinkupClient",
2523
"LinkupAuthenticationError",
24+
"LinkupClient",
2625
"LinkupFailedFetchError",
26+
"LinkupFetchResponse",
2727
"LinkupInsufficientCreditError",
2828
"LinkupInvalidRequestError",
2929
"LinkupNoResultError",
30-
"LinkupTooManyRequestsError",
31-
"LinkupUnknownError",
32-
"LinkupFetchResponse",
3330
"LinkupSearchImageResult",
3431
"LinkupSearchResults",
3532
"LinkupSearchStructuredResponse",
3633
"LinkupSearchTextResult",
3734
"LinkupSource",
3835
"LinkupSourcedAnswer",
36+
"LinkupTooManyRequestsError",
37+
"LinkupUnknownError",
38+
"__version__",
3939
]

src/linkup/client.py

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -391,52 +391,49 @@ def _raise_linkup_error(self, response: httpx.Response) -> None:
391391
"The provided URL might not be found or can't be fetched.\n"
392392
f"Original error message: {error_msg}."
393393
)
394-
else:
395-
raise LinkupInvalidRequestError(
396-
"The Linkup API returned an invalid request error (400). Make sure the "
397-
"parameters you used are valid (correct values, types, mandatory "
398-
"parameters, etc.) and you are using the latest version of the Python "
399-
"SDK.\n"
400-
f"Original error message: {error_msg}."
401-
)
402-
elif response.status_code == 401:
394+
raise LinkupInvalidRequestError(
395+
"The Linkup API returned an invalid request error (400). Make sure the "
396+
"parameters you used are valid (correct values, types, mandatory "
397+
"parameters, etc.) and you are using the latest version of the Python "
398+
"SDK.\n"
399+
f"Original error message: {error_msg}."
400+
)
401+
if response.status_code == 401:
403402
raise LinkupAuthenticationError(
404403
"The Linkup API returned an authentication error (401). Make sure your API "
405404
"key is valid.\n"
406405
f"Original error message: {error_msg}."
407406
)
408-
elif response.status_code == 403:
407+
if response.status_code == 403:
409408
raise LinkupAuthenticationError(
410409
"The Linkup API returned an authorization error (403). Make sure your API "
411410
"key is valid.\n"
412411
f"Original error message: {error_msg}."
413412
)
414-
elif response.status_code == 429:
413+
if response.status_code == 429:
415414
if code == "INSUFFICIENT_FUNDS_CREDITS":
416415
raise LinkupInsufficientCreditError(
417416
"The Linkup API returned an insufficient credit error (429). Make sure "
418417
"you haven't exhausted your credits.\n"
419418
f"Original error message: {error_msg}."
420419
)
421-
elif code == "TOO_MANY_REQUESTS":
420+
if code == "TOO_MANY_REQUESTS":
422421
raise LinkupTooManyRequestsError(
423422
"The Linkup API returned a too many requests error (429). Make sure "
424423
"you not sending too many requests at a time.\n"
425424
f"Original error message: {error_msg}."
426425
)
427-
else:
428-
raise LinkupUnknownError(
429-
"The Linkup API returned an invalid request error (429). Make sure the "
430-
"parameters you used are valid (correct values, types, mandatory "
431-
"parameters, etc.) and you are using the latest version of the Python "
432-
"SDK.\n"
433-
f"Original error message: {error_msg}."
434-
)
435-
else:
436426
raise LinkupUnknownError(
437-
f"The Linkup API returned an unknown error ({response.status_code}).\n"
438-
f"Original error message: ({error_msg})."
427+
"The Linkup API returned an invalid request error (429). Make sure the "
428+
"parameters you used are valid (correct values, types, mandatory "
429+
"parameters, etc.) and you are using the latest version of the Python "
430+
"SDK.\n"
431+
f"Original error message: {error_msg}."
439432
)
433+
raise LinkupUnknownError(
434+
f"The Linkup API returned an unknown error ({response.status_code}).\n"
435+
f"Original error message: ({error_msg})."
436+
)
440437

441438
def _get_search_params(
442439
self,
@@ -452,11 +449,11 @@ def _get_search_params(
452449
include_inline_citations: Optional[bool],
453450
include_sources: Optional[bool],
454451
) -> dict[str, Union[str, bool, list[str]]]:
455-
params: dict[str, Union[str, bool, list[str]]] = dict(
456-
q=query,
457-
depth=depth,
458-
outputType=output_type,
459-
)
452+
params: dict[str, Union[str, bool, list[str]]] = {
453+
"q": query,
454+
"depth": depth,
455+
"outputType": output_type,
456+
}
460457

461458
if structured_output_schema is not None:
462459
if isinstance(structured_output_schema, str):
@@ -513,9 +510,9 @@ def _parse_search_response(
513510
response_data: Any = response.json()
514511
if output_type == "searchResults":
515512
return LinkupSearchResults.model_validate(response_data)
516-
elif output_type == "sourcedAnswer":
513+
if output_type == "sourcedAnswer":
517514
return LinkupSourcedAnswer.model_validate(response_data)
518-
elif output_type == "structured":
515+
if output_type == "structured":
519516
if structured_output_schema is None:
520517
raise ValueError(
521518
"structured_output_schema must be provided when output_type is 'structured'"
@@ -535,8 +532,7 @@ def _parse_search_response(
535532
):
536533
return structured_output_schema.model_validate(response_data)
537534
return response_data
538-
else:
539-
raise ValueError(f"Unexpected output_type value: '{output_type}'")
535+
raise ValueError(f"Unexpected output_type value: '{output_type}'")
540536

541537
def _parse_fetch_response(self, response: httpx.Response) -> LinkupFetchResponse:
542538
return LinkupFetchResponse.model_validate(response.json())

tests/unit/client_test.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,12 @@ class Company(BaseModel):
179179
"website_url": "https://www.linkup.so/"
180180
}
181181
""",
182-
dict(
183-
name="Linkup",
184-
founders_names=["Philippe Mizrahi", "Denis Charrier", "Boris Toledano"],
185-
creation_date="2024",
186-
website_url="https://www.linkup.so/",
187-
),
182+
{
183+
"name": "Linkup",
184+
"founders_names": ["Philippe Mizrahi", "Denis Charrier", "Boris Toledano"],
185+
"creation_date": "2024",
186+
"website_url": "https://www.linkup.so/",
187+
},
188188
),
189189
(
190190
{
@@ -273,12 +273,12 @@ class Company(BaseModel):
273273
}
274274
""",
275275
LinkupSearchStructuredResponse(
276-
data=dict(
277-
name="Linkup",
278-
founders_names=["Philippe Mizrahi", "Denis Charrier", "Boris Toledano"],
279-
creation_date="2024",
280-
website_url="https://www.linkup.so/",
281-
),
276+
data={
277+
"name": "Linkup",
278+
"founders_names": ["Philippe Mizrahi", "Denis Charrier", "Boris Toledano"],
279+
"creation_date": "2024",
280+
"website_url": "https://www.linkup.so/",
281+
},
282282
sources=[
283283
LinkupSearchTextResult(
284284
type="text",

0 commit comments

Comments
 (0)