@@ -34,7 +34,12 @@ class AssetsEndpoint:
3434 def __init__ (self , client : Client ) -> None :
3535 self ._client = client
3636
37- def list (self , sort : Optional [str ] = None , q : Optional [str ] = None ) -> list [Asset ]:
37+ def list (
38+ self ,
39+ sort : Optional [str ] = None ,
40+ q : Optional [str ] = None ,
41+ project_id : Optional [str ] = None ,
42+ ) -> list [Asset ]:
3843 """List assets.
3944
4045 Args:
@@ -43,84 +48,106 @@ def list(self, sort: Optional[str] = None, q: Optional[str] = None) -> list[Asse
4348 "modified".
4449 q: Query string. For details on syntax see the Metafold API docs.
4550 Supported search fields are: "id" and "filename".
51+ project_id: Asset project ID.
4652
4753 Returns:
4854 List of asset resources.
4955 """
50- url = f"/projects/{ self ._client .project_id } /assets"
56+ project_id = self ._client .project_id (project_id )
57+ url = f"/projects/{ project_id } /assets"
5158 payload = asdict (sort = sort , q = q )
5259 r : Response = self ._client .get (url , params = payload )
5360 return [Asset (** a ) for a in r .json ()]
5461
55- def get (self , id : str ) -> Asset :
62+ def get (self , asset_id : str , project_id : Optional [ str ] = None ) -> Asset :
5663 """Get an asset.
5764
5865 Args:
59- id: ID of asset to get.
66+ asset_id: ID of asset to get.
67+ project_id: Asset project ID.
6068
6169 Returns:
6270 Asset resource.
6371 """
64- url = f"/projects/{ self ._client .project_id } /assets/{ id } "
72+ project_id = self ._client .project_id (project_id )
73+ url = f"/projects/{ project_id } /assets/{ asset_id } "
6574 r : Response = self ._client .get (url )
6675 return Asset (** r .json ())
6776
68- def download_file (self , id : str , path : Union [str , PathLike ]):
77+ def download_file (
78+ self , asset_id : str , path : Union [str , PathLike ],
79+ project_id : Optional [str ] = None ,
80+ ):
6981 """Download an asset.
7082
7183 Args:
72- id : ID of asset to download.
84+ asset_id : ID of asset to download.
7385 path: Path to downloaded file.
86+ project_id: Asset project ID.
7487 """
75- url = f"/projects/{ self ._client .project_id } /assets/{ id } "
88+ project_id = self ._client .project_id (project_id )
89+ url = f"/projects/{ project_id } /assets/{ asset_id } "
7690 r : Response = self ._client .get (url , params = {"download" : "true" })
7791 r = requests .get (r .json ()["link" ], stream = True )
7892 with open (path , "wb" ) as f :
7993 for chunk in r .iter_content (chunk_size = 65536 ): # 64 KiB
8094 f .write (chunk )
8195
82- def create (self , f : Union [str , bytes , PathLike , IO [bytes ]]) -> Asset :
96+ def create (
97+ self , f : Union [str , bytes , PathLike , IO [bytes ]],
98+ project_id : Optional [str ] = None ,
99+ ) -> Asset :
83100 """Upload an asset.
84101
85102 Args:
86103 f: File-like object (opened in binary mode) or path to file on disk.
104+ project_id: Asset project ID.
87105
88106 Returns:
89107 Asset resource.
90108 """
109+ project_id = self ._client .project_id (project_id )
91110 fp : IO [bytes ] = _open_file (f )
92111 try :
93- url = f"/projects/{ self . _client . project_id } /assets"
112+ url = f"/projects/{ project_id } /assets"
94113 r : Response = self ._client .post (url , files = {"file" : fp })
95114 finally :
96115 fp .close ()
97116 return Asset (** r .json ())
98117
99- def update (self , id : str , f : Union [str , bytes , PathLike , IO [bytes ]]) -> Asset :
118+ def update (
119+ self , asset_id : str ,
120+ f : Union [str , bytes , PathLike , IO [bytes ]],
121+ project_id : Optional [str ] = None ,
122+ ) -> Asset :
100123 """Update an asset.
101124
102125 Args:
103- id : ID of asset to update.
126+ asset_id : ID of asset to update.
104127 f: File-like object (opened in binary mode) or path to file on disk.
128+ project_id: Asset project ID.
105129
106130 Returns:
107131 Updated asset resource.
108132 """
133+ project_id = self ._client .project_id (project_id )
109134 fp : IO [bytes ] = _open_file (f )
110135 try :
111- url = f"/projects/{ self . _client . project_id } /assets/{ id } "
136+ url = f"/projects/{ project_id } /assets/{ asset_id } "
112137 r : Response = self ._client .patch (url , files = {"file" : fp })
113138 finally :
114139 fp .close ()
115140 return Asset (** r .json ())
116141
117- def delete (self , id : str ) -> None :
142+ def delete (self , asset_id : str , project_id : Optional [ str ] = None ) -> None :
118143 """Delete an asset.
119144
120145 Args:
121- id: ID of asset to delete.
146+ asset_id: ID of asset to delete.
147+ project_id: Asset project ID.
122148 """
123- url = f"/projects/{ self ._client .project_id } /assets/{ id } "
149+ project_id = self ._client .project_id (project_id )
150+ url = f"/projects/{ project_id } /assets/{ asset_id } "
124151 self ._client .delete (url )
125152
126153
0 commit comments