Skip to content

Commit 1271d90

Browse files
committed
implement upload result
1 parent 3d4e11d commit 1271d90

File tree

3 files changed

+73
-3
lines changed

3 files changed

+73
-3
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from .page_result import PageResult
22
from .large_file_upload_session import LargeFileUploadSession
3+
from .upload_result import UploadResult, UploadSessionDataHolder
34

4-
__all__ = ['PageResult', 'LargeFileUploadSession']
5+
__all__ = ['PageResult', 'LargeFileUploadSession', 'UploadResult', 'UploadSessionDataHolder']
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from typing import Any, Callable, Dict, List, Optional, TypeVar
2+
3+
from dataclasses import dataclass
4+
from datetime import datetime
5+
6+
from kiota_abstractions.serialization import (
7+
AdditionalDataHolder, Parsable, ParseNode, SerializationWriter
8+
)
9+
10+
T = TypeVar('T')
11+
12+
13+
@dataclass
14+
class UploadSessionDataHolder(AdditionalDataHolder, Parsable):
15+
expiration_datetime: Optional[datetime] = None
16+
next_expected_ranges: Optional[List[str]] = None
17+
upload_url: Optional[str] = None
18+
19+
def get_field_deserializers(self, ) -> Dict[str, Callable[[ParseNode], None]]:
20+
"""
21+
The deserialization information for the current model
22+
Returns: Dict[str, Callable[[ParseNode], None]]
23+
"""
24+
fields: Dict[str, Callable[[Any], None]] = {
25+
"expirationDateTime":
26+
lambda n: setattr(self, 'expiration_date_time', n.get_datetime_value()),
27+
"nextExpectedRanges":
28+
lambda n:
29+
setattr(self, 'next_expected_ranges', n.get_collection_of_primitive_values(str)),
30+
"@odata.type":
31+
lambda n: setattr(self, 'odata_type', n.get_str_value()),
32+
"uploadUrl":
33+
lambda n: setattr(self, 'upload_url', n.get_str_value()),
34+
}
35+
return fields
36+
37+
def serialize(self, writer: SerializationWriter) -> None:
38+
"""
39+
Serializes information the current object
40+
param writer: Serialization writer to use to serialize this model
41+
Returns: None
42+
"""
43+
if not writer:
44+
raise TypeError("writer cannot be null.")
45+
writer.write_datetime_value("expirationDateTime", self.expiration_date_time)
46+
writer.write_collection_of_primitive_values("nextExpectedRanges", self.next_expected_ranges)
47+
writer.write_str_value("@odata.type", self.odata_type)
48+
writer.write_str_value("uploadUrl", self.upload_url)
49+
writer.write_additional_data_value(self.additional_data)
50+
51+
52+
class UploadResult:
53+
54+
def __init__(self):
55+
self.upload_session: Optional[UploadSessionDataHolder] = None
56+
self.item_response: Optional[T] = None
57+
self.location: Optional[str] = None
58+
59+
@property
60+
def upload_succeeded(self) -> bool:
61+
return self.item_response is not None or self.location is not None

src/msgraph_core/tasks/large_file_upload.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from kiota_abstractions.request_adapter import RequestAdapter
1515

16-
from msgraph_core.models import LargeFileUploadSession # check imports
16+
from msgraph_core.models import LargeFileUploadSession, UploadResult, UploadSessionDataHolder # check imports
1717

1818

1919
class LargeFileUploadTask:
@@ -123,7 +123,15 @@ async def upload(self, after_chunk_upload: Optional[Callable] = None):
123123
logging.error("Error uploading chunk %s", error)
124124
finally:
125125
self.chunks -= 1
126-
return session
126+
upload_result = UploadResult()
127+
upload_result.upload_session = UploadSessionDataHolder(
128+
expiration_datetime=self.upload_session.expiration_date_time,
129+
next_expected_ranges=self.upload_session.next_expected_ranges,
130+
upload_url=self.upload_session.upload_url
131+
)
132+
upload_result.item_response = session
133+
upload_result.location = self.upload_session.upload_url
134+
return upload_result
127135

128136
@property
129137
def next_range(self):

0 commit comments

Comments
 (0)