metaso-sdk 0.1.4__py3-none-any.whl → 0.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
metaso_sdk/__init__.py CHANGED
@@ -5,19 +5,22 @@ The official Python SDK for https://metaso.cn
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
- from .model import File, Query, Status, Topic
8
+ from .model import File, Book, Query, Status, Topic
9
9
  from .search import search
10
10
  from .subject import create_topic, delete_file, delete_topic, update_progress, upload_directory, upload_file
11
+ from .bookshelf import upload_book
11
12
 
12
13
  __all__: list[str] = [
13
14
  "Status",
14
15
  "Query",
15
16
  "Topic",
16
17
  "File",
18
+ "Book",
17
19
  "search",
18
20
  "create_topic",
19
21
  "delete_topic",
20
22
  "upload_file",
23
+ "upload_book",
21
24
  "update_progress",
22
25
  "delete_file",
23
26
  "upload_directory",
@@ -0,0 +1,23 @@
1
+ from typing import Optional
2
+
3
+ from .client import client
4
+ from .model import Status, Book
5
+
6
+
7
+ def upload_book(fileobj_or_url) -> Optional[Book]:
8
+ """上传文件或 URL 到书架。
9
+
10
+ :param fileobj_or_url: 待上传的文件对象或则 URL。
11
+ :return: 如果文件上传成功,返回 Book 对象;否则返回 None。
12
+ """
13
+ if isinstance(fileobj_or_url, str):
14
+ params = {"data": {"url": fileobj_or_url}}
15
+ else:
16
+ params = {"files": {"file": fileobj_or_url}}
17
+ resp = client.put("/book", **params)
18
+ resp.raise_for_status()
19
+ json = resp.json()
20
+ status = Status.model_validate(json)
21
+ if status.errCode == 0:
22
+ book = Book.model_validate(json["data"])
23
+ return book
metaso_sdk/model.py CHANGED
@@ -35,3 +35,16 @@ class File(BaseModel):
35
35
  previewUrl: Optional[str] = None
36
36
  originalUrl: Optional[str] = None
37
37
  progress: int
38
+
39
+
40
+ class Book(BaseModel):
41
+ id: Optional[str]
42
+ thumbImg: Optional[str]
43
+ hasPpt: bool
44
+ title: str
45
+ url: str
46
+ fileId: str
47
+ lastPage: int
48
+ totalPage: int
49
+ progress: int
50
+ size: int
metaso_sdk/search.py CHANGED
@@ -32,4 +32,5 @@ def search(query: Query, *, stream: bool = False, topic: Topic = None):
32
32
  return _gen()
33
33
 
34
34
  resp = client.post("/search/v2", json=query.model_dump())
35
+ resp.raise_for_status()
35
36
  return resp.json()["data"]
metaso_sdk/subject.py CHANGED
@@ -1,10 +1,10 @@
1
1
  from pathlib import Path
2
- from typing import List, Optional
2
+ from typing import List, Optional, Union
3
3
 
4
4
  from streamable import Stream
5
5
 
6
6
  from .client import client
7
- from .model import File, Status, Topic
7
+ from .model import File, Book, Status, Topic
8
8
 
9
9
 
10
10
  def create_topic(topic: Topic) -> Optional[Topic]:
@@ -14,6 +14,7 @@ def create_topic(topic: Topic) -> Optional[Topic]:
14
14
  :return: 专题对象。
15
15
  """
16
16
  resp = client.put("/topic", json=topic.model_dump())
17
+ resp.raise_for_status()
17
18
  json = resp.json()
18
19
  status = Status.model_validate(json)
19
20
  if status.errCode == 0:
@@ -28,6 +29,7 @@ def delete_topic(topic: Topic) -> bool:
28
29
  :return: 如果成功删除Topic返回True,否则返回False。
29
30
  """
30
31
  resp = client.post("/topic/trash", json={"ids": [topic.id]})
32
+ resp.raise_for_status()
31
33
  status = Status.model_validate(resp.json())
32
34
  return status.errCode == 0
33
35
 
@@ -40,6 +42,7 @@ def upload_file(topic: Topic, file) -> Optional[File]:
40
42
  :return: 如果文件上传成功,返回文件对象;否则返回None。
41
43
  """
42
44
  resp = client.put(f"/file/{topic.dirRootId}", files={"file": file})
45
+ resp.raise_for_status()
43
46
  json = resp.json()
44
47
  status = Status.model_validate(json)
45
48
  if status.errCode == 0:
@@ -47,27 +50,31 @@ def upload_file(topic: Topic, file) -> Optional[File]:
47
50
  return file
48
51
 
49
52
 
50
- def update_progress(file: File) -> File:
51
- """更新文件处理进度。
53
+ def update_progress(file_or_book: Union[File, Book]) -> Union[File, Book]:
54
+ """更新处理进度。
52
55
 
53
- :param file: 需要更新进度的文件对象。
54
- :return: 更新后的文件对象。
56
+ :param file_or_book: 待更新进度的 File 或者 Book 对象。
57
+ :return: 更新 progress 后的对象。
55
58
  """
56
- resp = client.get(f"/file/{file.id}/progress")
59
+ file_id = file_or_book.id if isinstance(file_or_book, File) else file_or_book.fileId
60
+ resp = client.get(f"/file/{file_id}/progress")
61
+ resp.raise_for_status()
57
62
  json = resp.json()
58
63
  status = Status.model_validate(json)
59
64
  if status.errCode == 0:
60
- file.progress = json["data"]
61
- return file
65
+ file_or_book.progress = json["data"]
66
+ return file_or_book
62
67
 
63
68
 
64
- def delete_file(file: File) -> bool:
65
- """删除指定的文件。
69
+ def delete_file(file_or_book: Union[File, Book]) -> bool:
70
+ """删除文件。
66
71
 
67
- :param file: 要删除的File对象。
68
- :return: 如果成功删除File返回True,否则返回False。
72
+ :param file_or_book: 待删除的 File 或者 Book 对象。
73
+ :return: 如果删除成功,返回True。否则返回False。
69
74
  """
70
- resp = client.post("/file/trash", json={"ids": [file.id]})
75
+ file_id = file_or_book.id if isinstance(file_or_book, File) else file_or_book.fileId
76
+ resp = client.post("/file/trash", json={"ids": [file_id]})
77
+ resp.raise_for_status()
71
78
  status = Status.model_validate(resp.json())
72
79
  return status.errCode == 0
73
80
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaso-sdk
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Summary: The official Python SDK for https://metaso.cn
5
5
  Author-Email: Zhao Xiaohong <zhaoxiaohong@metasota.ai>
6
6
  License: MIT
@@ -0,0 +1,15 @@
1
+ metaso_sdk-0.1.6.dist-info/METADATA,sha256=hC_yNcOnjofg2HJ7to-ePGlmDht6TpabzFetAvrMBHc,3270
2
+ metaso_sdk-0.1.6.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
+ metaso_sdk-0.1.6.dist-info/entry_points.txt,sha256=VqvzYeWOYZKCpogIumetYL8h5UZsI93oLI15kJjbwj4,63
4
+ metaso_sdk-0.1.6.dist-info/licenses/LICENSE,sha256=7nWd1jm_pniRaOJtzgZnzECn_eeGLoPMvPTjCyRpj1A,1065
5
+ metaso_sdk/__init__.py,sha256=ZXHdIXVXKtjC1QgE6v7AYBXAkOgzOivIzwcVRCEvvvM,582
6
+ metaso_sdk/__main__.py,sha256=WCRS7Ehbf26-NWDSnt-Zmy0eP63paf67q9eYV4V_Q3g,345
7
+ metaso_sdk/bookshelf.py,sha256=wkcSR5NQFweYslT-c1fSjPerfgsCi--Jd0vWVgBKpgI,721
8
+ metaso_sdk/cli.py,sha256=Z7I54ojBpWxQ_Pce7-XM7gucneDIpC21yAqRGkYrm9I,1734
9
+ metaso_sdk/client.py,sha256=j2hC1NBbxsRFHC4hOSD06YrfV5JLffgrA-H5iGNBPq4,204
10
+ metaso_sdk/debug.py,sha256=K3ypLgs78a8bhiAHE_5fZZAL-U622fuKPyEdL7M1UW8,2831
11
+ metaso_sdk/model.py,sha256=_2cSadnrM-YV03e67f8wlLoAbMF3jfIsMvgNqDA5zzg,935
12
+ metaso_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ metaso_sdk/search.py,sha256=gdruxkw7_MAwjMICv4b8Xvqr5Q3P4_BFSydd756vfKw,1110
14
+ metaso_sdk/subject.py,sha256=07jvVeU3kTMPZ1odnAzmzw8DVIT6idZoIIthVR5E4cg,3395
15
+ metaso_sdk-0.1.6.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- metaso_sdk-0.1.4.dist-info/METADATA,sha256=Ci3lD-LlXIN7M48tAwsDkqfBqq-p96JzfzR47YYTFu8,3270
2
- metaso_sdk-0.1.4.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- metaso_sdk-0.1.4.dist-info/entry_points.txt,sha256=VqvzYeWOYZKCpogIumetYL8h5UZsI93oLI15kJjbwj4,63
4
- metaso_sdk-0.1.4.dist-info/licenses/LICENSE,sha256=7nWd1jm_pniRaOJtzgZnzECn_eeGLoPMvPTjCyRpj1A,1065
5
- metaso_sdk/__init__.py,sha256=wP088gdhNJt1byFsSYest-ucQJdwosorwaG7FqCyqwE,510
6
- metaso_sdk/__main__.py,sha256=WCRS7Ehbf26-NWDSnt-Zmy0eP63paf67q9eYV4V_Q3g,345
7
- metaso_sdk/cli.py,sha256=Z7I54ojBpWxQ_Pce7-XM7gucneDIpC21yAqRGkYrm9I,1734
8
- metaso_sdk/client.py,sha256=j2hC1NBbxsRFHC4hOSD06YrfV5JLffgrA-H5iGNBPq4,204
9
- metaso_sdk/debug.py,sha256=K3ypLgs78a8bhiAHE_5fZZAL-U622fuKPyEdL7M1UW8,2831
10
- metaso_sdk/model.py,sha256=Y-8Gn_9K4lbtqhiGVs796hB3UXMfgUALAFOjwJXiwDQ,730
11
- metaso_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- metaso_sdk/search.py,sha256=3iA9lIncpAcbPHPby0XnTYaYvhM2983bEOBa40Nu_kY,1082
13
- metaso_sdk/subject.py,sha256=qJBSn5LimFJ1df4sEWnp4or1rQlAGq-nWdPjac_heq4,2966
14
- metaso_sdk-0.1.4.dist-info/RECORD,,