Skip to content

Commit 1637a05

Browse files
chore: format code with ruff, add ruff config
- Run ruff format on src/ - Add ruff config to pyproject.toml (line-length=100, ignore E501) - Fix import ordering Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 2b1f5fe commit 1637a05

6 files changed

Lines changed: 91 additions & 58 deletions

File tree

pyproject.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,10 @@ dev = [
4545
"python-dotenv>=1.0.0",
4646
"ruff>=0.4.0",
4747
]
48+
49+
[tool.ruff]
50+
line-length = 100
51+
52+
[tool.ruff.lint]
53+
select = ["E", "F", "I"]
54+
ignore = ["E501"]

src/scrapegraph_py/__init__.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,37 @@
1-
from .client import ScrapeGraphAI
21
from .async_client import AsyncScrapeGraphAI
3-
2+
from .client import ScrapeGraphAI
43
from .schemas import (
54
ApiResult,
6-
ScrapeRequest,
7-
ScrapeResponse,
8-
ExtractRequest,
9-
ExtractResponse,
10-
SearchRequest,
11-
SearchResponse,
12-
SearchResult,
5+
BrandingFormatConfig,
6+
CrawlPage,
137
CrawlRequest,
148
CrawlResponse,
15-
CrawlPage,
16-
MonitorCreateRequest,
17-
MonitorUpdateRequest,
18-
MonitorResponse,
19-
MonitorResult,
20-
MonitorDiffs,
21-
HistoryFilter,
22-
HistoryPage,
23-
HistoryEntry,
249
CreditsResponse,
25-
HealthResponse,
26-
TokenUsage,
10+
ExtractRequest,
11+
ExtractResponse,
2712
FetchConfig,
28-
MarkdownFormatConfig,
13+
HealthResponse,
14+
HistoryEntry,
15+
HistoryFilter,
16+
HistoryPage,
2917
HtmlFormatConfig,
30-
ScreenshotFormatConfig,
18+
ImagesFormatConfig,
3119
JsonFormatConfig,
3220
LinksFormatConfig,
33-
ImagesFormatConfig,
21+
MarkdownFormatConfig,
22+
MonitorCreateRequest,
23+
MonitorDiffs,
24+
MonitorResponse,
25+
MonitorResult,
26+
MonitorUpdateRequest,
27+
ScrapeRequest,
28+
ScrapeResponse,
29+
ScreenshotFormatConfig,
30+
SearchRequest,
31+
SearchResponse,
32+
SearchResult,
3433
SummaryFormatConfig,
35-
BrandingFormatConfig,
34+
TokenUsage,
3635
)
3736

3837
__all__ = [

src/scrapegraph_py/async_client.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,50 @@
11
from __future__ import annotations
2+
23
import os
34
import re
45
import time
6+
57
import httpx
68
from pydantic import BaseModel
79

810
from .env import env
9-
10-
_SERVER_TIMING_RE = re.compile(r"dur=(\d+(?:\.\d+)?)")
1111
from .schemas import (
1212
ApiResult,
13-
ScrapeRequest,
14-
ScrapeResponse,
15-
ExtractRequest,
16-
ExtractResponse,
17-
SearchRequest,
18-
SearchResponse,
1913
CrawlRequest,
2014
CrawlResponse,
21-
MonitorCreateRequest,
22-
MonitorUpdateRequest,
23-
MonitorResponse,
24-
HistoryFilter,
25-
HistoryPage,
26-
HistoryEntry,
2715
CreditsResponse,
16+
ExtractRequest,
17+
ExtractResponse,
2818
HealthResponse,
19+
HistoryEntry,
20+
HistoryFilter,
21+
HistoryPage,
22+
MonitorCreateRequest,
23+
MonitorResponse,
24+
MonitorUpdateRequest,
25+
ScrapeRequest,
26+
ScrapeResponse,
27+
SearchRequest,
28+
SearchResponse,
2929
)
3030

31+
_SERVER_TIMING_RE = re.compile(r"dur=(\d+(?:\.\d+)?)")
32+
3133

3234
def _debug(label: str, data: object = None) -> None:
3335
if not env.debug:
3436
return
3537
from datetime import datetime
38+
3639
ts = datetime.now().isoformat()
3740
if data is not None:
3841
import json
39-
print(f"[{ts}] {label}", json.dumps(data, indent=2, default=str), file=__import__("sys").stderr)
42+
43+
print(
44+
f"[{ts}] {label}",
45+
json.dumps(data, indent=2, default=str),
46+
file=__import__("sys").stderr,
47+
)
4048
else:
4149
print(f"[{ts}] {label}", file=__import__("sys").stderr)
4250

@@ -198,7 +206,9 @@ async def _request[T](
198206
except Exception as e:
199207
return ApiResult(status="error", data=None, error=str(e), elapsed_ms=0)
200208

201-
async def _get[T](self, path: str, response_type: type[T], params: dict | None = None) -> ApiResult[T]:
209+
async def _get[T](
210+
self, path: str, response_type: type[T], params: dict | None = None
211+
) -> ApiResult[T]:
202212
return await self._request("GET", path, response_type, params=params)
203213

204214
async def _post[T](self, path: str, body: BaseModel, response_type: type[T]) -> ApiResult[T]:

src/scrapegraph_py/client.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,50 @@
11
from __future__ import annotations
2+
23
import os
34
import re
45
import time
6+
57
import httpx
68
from pydantic import BaseModel
79

810
from .env import env
9-
10-
_SERVER_TIMING_RE = re.compile(r"dur=(\d+(?:\.\d+)?)")
1111
from .schemas import (
1212
ApiResult,
13-
ScrapeRequest,
14-
ScrapeResponse,
15-
ExtractRequest,
16-
ExtractResponse,
17-
SearchRequest,
18-
SearchResponse,
1913
CrawlRequest,
2014
CrawlResponse,
21-
MonitorCreateRequest,
22-
MonitorUpdateRequest,
23-
MonitorResponse,
24-
HistoryFilter,
25-
HistoryPage,
26-
HistoryEntry,
2715
CreditsResponse,
16+
ExtractRequest,
17+
ExtractResponse,
2818
HealthResponse,
19+
HistoryEntry,
20+
HistoryFilter,
21+
HistoryPage,
22+
MonitorCreateRequest,
23+
MonitorResponse,
24+
MonitorUpdateRequest,
25+
ScrapeRequest,
26+
ScrapeResponse,
27+
SearchRequest,
28+
SearchResponse,
2929
)
3030

31+
_SERVER_TIMING_RE = re.compile(r"dur=(\d+(?:\.\d+)?)")
32+
3133

3234
def _debug(label: str, data: object = None) -> None:
3335
if not env.debug:
3436
return
3537
from datetime import datetime
38+
3639
ts = datetime.now().isoformat()
3740
if data is not None:
3841
import json
39-
print(f"[{ts}] {label}", json.dumps(data, indent=2, default=str), file=__import__("sys").stderr)
42+
43+
print(
44+
f"[{ts}] {label}",
45+
json.dumps(data, indent=2, default=str),
46+
file=__import__("sys").stderr,
47+
)
4048
else:
4149
print(f"[{ts}] {label}", file=__import__("sys").stderr)
4250

@@ -198,7 +206,9 @@ def _request[T](
198206
except Exception as e:
199207
return ApiResult(status="error", data=None, error=str(e), elapsed_ms=0)
200208

201-
def _get[T](self, path: str, response_type: type[T], params: dict | None = None) -> ApiResult[T]:
209+
def _get[T](
210+
self, path: str, response_type: type[T], params: dict | None = None
211+
) -> ApiResult[T]:
202212
return self._request("GET", path, response_type, params=params)
203213

204214
def _post[T](self, path: str, body: BaseModel, response_type: type[T]) -> ApiResult[T]:

src/scrapegraph_py/env.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from __future__ import annotations
2+
23
import os
34

45

@@ -21,6 +22,7 @@ def health_url(self) -> str:
2122
custom = os.environ.get("SGAI_API_URL")
2223
if custom:
2324
import re
25+
2426
return re.sub(r"/v\d+$", "", custom)
2527
return "https://api.scrapegraphai.com"
2628

src/scrapegraph_py/schemas.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
2-
from typing import Literal, Annotated, Generic, TypeVar
2+
3+
from typing import Annotated, Generic, Literal, TypeVar
4+
35
from pydantic import BaseModel, ConfigDict, Field, HttpUrl, model_validator
46
from pydantic.alias_generators import to_camel
57

@@ -9,11 +11,14 @@
911
class CamelModel(BaseModel):
1012
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
1113

14+
1215
ApiService = Literal["scrape", "extract", "search", "monitor", "crawl"]
1316
ApiStatus = Literal["completed", "failed"]
1417
ApiHtmlMode = Literal["normal", "reader", "prune"]
1518
ApiFetchMode = Literal["auto", "fast", "js"]
16-
ApiScrapeFormat = Literal["markdown", "html", "links", "images", "summary", "json", "branding", "screenshot"]
19+
ApiScrapeFormat = Literal[
20+
"markdown", "html", "links", "images", "summary", "json", "branding", "screenshot"
21+
]
1722
ApiTimeRange = Literal["past_hour", "past_24_hours", "past_week", "past_month", "past_year"]
1823
ApiCrawlStatus = Literal["running", "completed", "failed", "paused", "deleted"]
1924
ApiCrawlPageStatus = Literal["completed", "failed", "skipped"]

0 commit comments

Comments
 (0)