|
5 | 5 | import json |
6 | 6 | import mimetypes |
7 | 7 | from pathlib import Path |
8 | | -from typing import Any, Optional, Union |
| 8 | +from typing import Any |
9 | 9 | from urllib.parse import urlencode |
10 | 10 |
|
11 | 11 | import httpx |
12 | 12 |
|
| 13 | +from .crypto import create_integrity_proof, sha256, sign_integrity_proof |
| 14 | +from .errors import CaptureError, ValidationError, create_api_error |
13 | 15 | from .types import ( |
14 | | - FileInput, |
15 | | - CaptureOptions, |
16 | | - RegisterOptions, |
17 | | - UpdateOptions, |
18 | 16 | Asset, |
19 | | - Commit, |
20 | | - AssetTree, |
21 | 17 | AssetSearchOptions, |
22 | 18 | AssetSearchResult, |
23 | | - SimilarMatch, |
24 | | - NftSearchResult, |
| 19 | + AssetTree, |
| 20 | + CaptureOptions, |
| 21 | + Commit, |
| 22 | + FileInput, |
25 | 23 | NftRecord, |
| 24 | + NftSearchResult, |
| 25 | + RegisterOptions, |
| 26 | + SimilarMatch, |
| 27 | + UpdateOptions, |
26 | 28 | ) |
27 | | -from .errors import ValidationError, CaptureError, create_api_error |
28 | | -from .crypto import sha256, create_integrity_proof, sign_integrity_proof |
29 | | - |
30 | 29 |
|
31 | 30 | DEFAULT_BASE_URL = "https://api.numbersprotocol.io/api/v3" |
32 | 31 | HISTORY_API_URL = "https://e23hi68y55.execute-api.us-east-1.amazonaws.com/default/get-commits-storage-backend-jade-near" |
@@ -65,7 +64,7 @@ def _get_mime_type(filename: str) -> str: |
65 | 64 |
|
66 | 65 | def _normalize_file( |
67 | 66 | file_input: FileInput, |
68 | | - options: Optional[RegisterOptions] = None, |
| 67 | + options: RegisterOptions | None = None, |
69 | 68 | ) -> tuple[bytes, str, str]: |
70 | 69 | """ |
71 | 70 | Normalizes various file input types to a common format. |
@@ -93,7 +92,7 @@ def _normalize_file( |
93 | 92 | return data, filename, mime_type |
94 | 93 |
|
95 | 94 | # 3. bytes or bytearray |
96 | | - if isinstance(file_input, (bytes, bytearray)): |
| 95 | + if isinstance(file_input, bytes | bytearray): |
97 | 96 | if not options or not options.filename: |
98 | 97 | raise ValidationError("filename is required for binary input") |
99 | 98 | data = bytes(file_input) |
@@ -128,11 +127,11 @@ class Capture: |
128 | 127 |
|
129 | 128 | def __init__( |
130 | 129 | self, |
131 | | - token: Optional[str] = None, |
| 130 | + token: str | None = None, |
132 | 131 | *, |
133 | 132 | testnet: bool = False, |
134 | | - base_url: Optional[str] = None, |
135 | | - options: Optional[CaptureOptions] = None, |
| 133 | + base_url: str | None = None, |
| 134 | + options: CaptureOptions | None = None, |
136 | 135 | ): |
137 | 136 | """ |
138 | 137 | Initialize the Capture client. |
@@ -171,10 +170,10 @@ def _request( |
171 | 170 | method: str, |
172 | 171 | url: str, |
173 | 172 | *, |
174 | | - data: Optional[dict[str, Any]] = None, |
175 | | - files: Optional[dict[str, Any]] = None, |
176 | | - json_body: Optional[dict[str, Any]] = None, |
177 | | - nid: Optional[str] = None, |
| 173 | + data: dict[str, Any] | None = None, |
| 174 | + files: dict[str, Any] | None = None, |
| 175 | + json_body: dict[str, Any] | None = None, |
| 176 | + nid: str | None = None, |
178 | 177 | ) -> dict[str, Any]: |
179 | 178 | """Makes an authenticated API request.""" |
180 | 179 | headers = {"Authorization": f"token {self._token}"} |
@@ -221,12 +220,12 @@ def register( |
221 | 220 | self, |
222 | 221 | file: FileInput, |
223 | 222 | *, |
224 | | - filename: Optional[str] = None, |
225 | | - caption: Optional[str] = None, |
226 | | - headline: Optional[str] = None, |
| 223 | + filename: str | None = None, |
| 224 | + caption: str | None = None, |
| 225 | + headline: str | None = None, |
227 | 226 | public_access: bool = True, |
228 | | - sign: Optional[dict[str, str]] = None, |
229 | | - options: Optional[RegisterOptions] = None, |
| 227 | + sign: dict[str, str] | None = None, |
| 228 | + options: RegisterOptions | None = None, |
230 | 229 | ) -> Asset: |
231 | 230 | """ |
232 | 231 | Registers a new asset. |
@@ -330,11 +329,11 @@ def update( |
330 | 329 | self, |
331 | 330 | nid: str, |
332 | 331 | *, |
333 | | - caption: Optional[str] = None, |
334 | | - headline: Optional[str] = None, |
335 | | - commit_message: Optional[str] = None, |
336 | | - custom_metadata: Optional[dict[str, Any]] = None, |
337 | | - options: Optional[UpdateOptions] = None, |
| 332 | + caption: str | None = None, |
| 333 | + headline: str | None = None, |
| 334 | + commit_message: str | None = None, |
| 335 | + custom_metadata: dict[str, Any] | None = None, |
| 336 | + options: UpdateOptions | None = None, |
338 | 337 | ) -> Asset: |
339 | 338 | """ |
340 | 339 | Updates an existing asset's metadata. |
@@ -565,12 +564,12 @@ def get_asset_tree(self, nid: str) -> AssetTree: |
565 | 564 | def search_asset( |
566 | 565 | self, |
567 | 566 | *, |
568 | | - file_url: Optional[str] = None, |
569 | | - file: Optional[FileInput] = None, |
570 | | - nid: Optional[str] = None, |
571 | | - threshold: Optional[float] = None, |
572 | | - sample_count: Optional[int] = None, |
573 | | - options: Optional[AssetSearchOptions] = None, |
| 567 | + file_url: str | None = None, |
| 568 | + file: FileInput | None = None, |
| 569 | + nid: str | None = None, |
| 570 | + threshold: float | None = None, |
| 571 | + sample_count: int | None = None, |
| 572 | + options: AssetSearchOptions | None = None, |
574 | 573 | ) -> AssetSearchResult: |
575 | 574 | """ |
576 | 575 | Searches for similar assets using image similarity. |
@@ -632,7 +631,7 @@ def search_asset( |
632 | 631 | form_data: dict[str, Any] = {"token": self._token} |
633 | 632 |
|
634 | 633 | # Add input source |
635 | | - files_data: Optional[dict[str, Any]] = None |
| 634 | + files_data: dict[str, Any] | None = None |
636 | 635 | if options.file_url: |
637 | 636 | form_data["url"] = options.file_url |
638 | 637 | elif options.nid: |
|
0 commit comments