55from __future__ import annotations
66
77from enum import Enum
8- from pydantic import BaseModel , ConfigDict , Field
9- from typing import List , Literal , Optional , Union
8+ from pydantic import BaseModel , BeforeValidator , ConfigDict , Field , PlainSerializer
9+ from typing import Annotated , List , Literal , Optional , Union
10+
11+
12+ def serialize_binary_data (value : bytes ) -> list [int ]:
13+ return list (value )
14+
15+
16+ def deserialize_binary_data (value ):
17+ if isinstance (value , list ):
18+ if all (isinstance (x , int ) and 0 <= x <= 255 for x in value ):
19+ return bytes (value )
20+ raise ValueError ("All elements must be integers in the range 0-255 (u8)." )
21+ elif isinstance (value , bytes ):
22+ return value
23+ raise TypeError ("Content must be a list of integers (0-255) or bytes." )
24+
25+
26+ class FilePositionFieldFileInner (BaseModel ):
27+ """
28+ Generated type representing the anonymous struct variant `FieldFile` of the `FilePosition` Rust enum
29+ """
30+
31+ model_config = ConfigDict (populate_by_name = True )
32+
33+ section_id : str = Field (alias = "sectionId" )
34+ field_id : str = Field (alias = "fieldId" )
35+
36+
37+ class FilePositionTypes (str , Enum ):
38+ DOCUMENT = "Document"
39+ FIELD_FILE = "FieldFile"
40+
41+
42+ class FilePositionDocument (BaseModel ):
43+ """
44+ The document file saved in a Document item (can only be used with items of Document category)
45+ """
46+
47+ type : Literal [FilePositionTypes .DOCUMENT ] = FilePositionTypes .DOCUMENT
48+
49+
50+ class FilePositionFieldFile (BaseModel ):
51+ """
52+ A file stored as an item field
53+ """
54+
55+ type : Literal [FilePositionTypes .FIELD_FILE ] = FilePositionTypes .FIELD_FILE
56+ content : FilePositionFieldFileInner
57+
58+
59+ FilePosition = Union [FilePositionDocument , FilePositionFieldFile ]
60+
61+
62+ class FileAttachParams (BaseModel ):
63+ name : str
64+ """
65+ the name of the file
66+ """
67+ content : Annotated [
68+ bytes ,
69+ BeforeValidator (deserialize_binary_data ),
70+ PlainSerializer (serialize_binary_data ),
71+ ]
72+ """
73+ the content of the file
74+ """
75+ position : FilePosition
76+ """
77+ where the file is stored in the item
78+ """
79+
80+
81+ class FileAttributes (BaseModel ):
82+ name : str
83+ """
84+ The name of the file
85+ """
86+ id : str
87+ """
88+ The ID of the file retrieved from the server
89+ """
90+ size : int
91+ """
92+ The size of the file in bytes
93+ """
1094
1195
1296class GeneratePasswordResponse (BaseModel ):
@@ -58,11 +142,14 @@ class ItemFieldType(str, Enum):
58142 TOTP = "Totp"
59143 EMAIL = "Email"
60144 REFERENCE = "Reference"
145+ SSHKEY = "SshKey"
146+ MENU = "Menu"
61147 UNSUPPORTED = "Unsupported"
62148
63149
64150class ItemFieldDetailsTypes (str , Enum ):
65151 OTP = "Otp"
152+ SSH_KEY = "SshKey"
66153
67154
68155class ItemFieldDetailsOtp (BaseModel ):
@@ -74,8 +161,17 @@ class ItemFieldDetailsOtp(BaseModel):
74161 content : OtpFieldDetails
75162
76163
164+ class ItemFieldDetailsSshKey (BaseModel ):
165+ """
166+ Computed SSH Key attributes
167+ """
168+
169+ type : Literal [ItemFieldDetailsTypes .SSH_KEY ] = ItemFieldDetailsTypes .SSH_KEY
170+ content : Optional [SshKeyAttributes ]
171+
172+
77173# Field type-specific attributes.
78- ItemFieldDetails = ItemFieldDetailsOtp
174+ ItemFieldDetails = Union [ ItemFieldDetailsOtp , ItemFieldDetailsSshKey ]
79175
80176
81177class ItemField (BaseModel ):
@@ -167,6 +263,17 @@ class Website(BaseModel):
167263 """
168264
169265
266+ class ItemFile (BaseModel ):
267+ attributes : FileAttributes
268+ """
269+ the attributes of the file
270+ """
271+ position : FilePosition
272+ """
273+ where the file is stored in the item
274+ """
275+
276+
170277class Item (BaseModel ):
171278 """
172279 Represents a 1Password item.
@@ -214,6 +321,10 @@ class Item(BaseModel):
214321 """
215322 The item's version
216323 """
324+ files : List [ItemFile ]
325+ """
326+ The item's files
327+ """
217328
218329
219330class ItemCreateParams (BaseModel ):
@@ -251,6 +362,10 @@ class ItemCreateParams(BaseModel):
251362 """
252363 The websites used for autofilling for items of the Login and Password categories.
253364 """
365+ files : Optional [List [FileAttachParams ]] = Field (default = None )
366+ """
367+ The item's files
368+ """
254369
255370
256371class ItemOverview (BaseModel ):
@@ -453,6 +568,23 @@ class OtpFieldDetails(BaseModel):
453568 """
454569
455570
571+ class SshKeyAttributes (BaseModel ):
572+ model_config = ConfigDict (populate_by_name = True )
573+
574+ public_key : str = Field (alias = "publicKey" )
575+ """
576+ The public part of the SSH Key
577+ """
578+ fingerprint : str
579+ """
580+ The fingerprint of the SSH Key
581+ """
582+ key_type : str = Field (alias = "keyType" )
583+ """
584+ The key type ("Ed25519" or "RSA, {length}-bit")
585+ """
586+
587+
456588class VaultOverview (BaseModel ):
457589 """
458590 Represents a decrypted 1Password vault.
0 commit comments