files-com 1.6.119__py3-none-any.whl → 1.6.191__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.
Potentially problematic release.
This version of files-com might be problematic. Click here for more details.
- README.md +1 -0
- _VERSION +1 -1
- {files_com-1.6.119.dist-info → files_com-1.6.191.dist-info}/METADATA +2 -1
- {files_com-1.6.119.dist-info → files_com-1.6.191.dist-info}/RECORD +36 -31
- files_sdk/__init__.py +11 -1
- files_sdk/error.py +15 -0
- files_sdk/models/__init__.py +5 -0
- files_sdk/models/agent_push_update.py +44 -0
- files_sdk/models/api_key.py +7 -21
- files_sdk/models/as2_incoming_message.py +3 -9
- files_sdk/models/as2_outgoing_message.py +3 -9
- files_sdk/models/as2_partner.py +7 -0
- files_sdk/models/as2_station.py +15 -4
- files_sdk/models/automation.py +10 -2
- files_sdk/models/automation_run.py +2 -1
- files_sdk/models/behavior.py +12 -14
- files_sdk/models/bundle.py +9 -1
- files_sdk/models/file.py +2 -2
- files_sdk/models/folder.py +2 -2
- files_sdk/models/gpg_key.py +51 -24
- files_sdk/models/group.py +10 -2
- files_sdk/models/inbound_s3_log.py +95 -0
- files_sdk/models/key_lifecycle_rule.py +243 -0
- files_sdk/models/partner.py +12 -1
- files_sdk/models/public_key.py +3 -2
- files_sdk/models/remote_server.py +141 -20
- files_sdk/models/remote_server_credential.py +855 -0
- files_sdk/models/restore.py +20 -0
- files_sdk/models/site.py +12 -12
- files_sdk/models/sync.py +14 -0
- files_sdk/models/sync_run.py +3 -2
- files_sdk/models/user.py +26 -2
- files_sdk/models/workspace.py +202 -0
- {files_com-1.6.119.dist-info → files_com-1.6.191.dist-info}/WHEEL +0 -0
- {files_com-1.6.119.dist-info → files_com-1.6.191.dist-info}/licenses/LICENSE +0 -0
- {files_com-1.6.119.dist-info → files_com-1.6.191.dist-info}/top_level.txt +0 -0
files_sdk/models/automation.py
CHANGED
|
@@ -11,6 +11,7 @@ from files_sdk.error import ( # noqa: F401
|
|
|
11
11
|
class Automation:
|
|
12
12
|
default_attributes = {
|
|
13
13
|
"id": None, # int64 - Automation ID
|
|
14
|
+
"workspace_id": None, # int64 - Workspace ID
|
|
14
15
|
"always_serialize_jobs": None, # boolean - Ordinarily, we will allow automation runs to run in parallel for non-scheduled automations. If this flag is `true` we will force automation runs to be serialized (run one at a time, one after another). This can resolve some issues with race conditions on remote systems at the cost of some performance.
|
|
15
16
|
"always_overwrite_size_matching_files": None, # boolean - Ordinarily, files with identical size in the source and destination will be skipped from copy operations to prevent wasted transfer. If this flag is `true` we will overwrite the destination file always. Note that this may cause large amounts of wasted transfer usage. This setting has no effect unless `overwrite_files` is also set to `true`.
|
|
16
17
|
"automation": None, # string - Automation type
|
|
@@ -312,8 +313,8 @@ class Automation:
|
|
|
312
313
|
# Parameters:
|
|
313
314
|
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
314
315
|
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
315
|
-
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `
|
|
316
|
-
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `disabled`, `last_modified_at` or `automation`. Valid field combinations are `[ disabled, last_modified_at ]`, `[ automation, disabled ]`, `[ automation, last_modified_at ]`
|
|
316
|
+
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `workspace_id`, `name`, `automation`, `last_modified_at` or `disabled`.
|
|
317
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `disabled`, `last_modified_at`, `workspace_id` or `automation`. Valid field combinations are `[ disabled, last_modified_at ]`, `[ workspace_id, disabled ]`, `[ disabled, automation ]`, `[ workspace_id, last_modified_at ]`, `[ automation, last_modified_at ]`, `[ workspace_id, automation ]`, `[ workspace_id, disabled, last_modified_at ]`, `[ disabled, automation, last_modified_at ]`, `[ workspace_id, disabled, automation ]`, `[ workspace_id, automation, last_modified_at ]` or `[ workspace_id, disabled, automation, last_modified_at ]`.
|
|
317
318
|
# filter_gt - object - If set, return records where the specified field is greater than the supplied value. Valid fields are `last_modified_at`.
|
|
318
319
|
# filter_gteq - object - If set, return records where the specified field is greater than or equal the supplied value. Valid fields are `last_modified_at`.
|
|
319
320
|
# filter_lt - object - If set, return records where the specified field is less than the supplied value. Valid fields are `last_modified_at`.
|
|
@@ -406,6 +407,7 @@ def get(id, params=None, options=None):
|
|
|
406
407
|
# value - object - A Hash of attributes specific to the automation type.
|
|
407
408
|
# recurring_day - int64 - If trigger type is `daily`, this specifies a day number to run in one of the supported intervals: `week`, `month`, `quarter`, `year`.
|
|
408
409
|
# automation (required) - string - Automation type
|
|
410
|
+
# workspace_id - int64 - Workspace ID
|
|
409
411
|
def create(params=None, options=None):
|
|
410
412
|
if not isinstance(params, dict):
|
|
411
413
|
params = {}
|
|
@@ -563,6 +565,12 @@ def create(params=None, options=None):
|
|
|
563
565
|
)
|
|
564
566
|
if "automation" in params and not isinstance(params["automation"], str):
|
|
565
567
|
raise InvalidParameterError("Bad parameter: automation must be an str")
|
|
568
|
+
if "workspace_id" in params and not isinstance(
|
|
569
|
+
params["workspace_id"], int
|
|
570
|
+
):
|
|
571
|
+
raise InvalidParameterError(
|
|
572
|
+
"Bad parameter: workspace_id must be an int"
|
|
573
|
+
)
|
|
566
574
|
if "automation" not in params:
|
|
567
575
|
raise MissingParameterError("Parameter missing: automation")
|
|
568
576
|
response, options = Api.send_request(
|
|
@@ -12,6 +12,7 @@ class AutomationRun:
|
|
|
12
12
|
default_attributes = {
|
|
13
13
|
"id": None, # int64 - ID.
|
|
14
14
|
"automation_id": None, # int64 - ID of the associated Automation.
|
|
15
|
+
"workspace_id": None, # int64 - Workspace ID.
|
|
15
16
|
"completed_at": None, # date-time - Automation run completion/failure date/time.
|
|
16
17
|
"created_at": None, # date-time - Automation run start date/time.
|
|
17
18
|
"retry_at": None, # date-time - If set, this automation will be retried at this date/time due to `failure` or `partial_failure`.
|
|
@@ -53,7 +54,7 @@ class AutomationRun:
|
|
|
53
54
|
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
54
55
|
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
55
56
|
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `automation_id`, `created_at` or `status`.
|
|
56
|
-
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `status`
|
|
57
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `status`, `workspace_id` or `automation_id`. Valid field combinations are `[ workspace_id, status ]`, `[ automation_id, status ]`, `[ workspace_id, automation_id ]` or `[ workspace_id, automation_id, status ]`.
|
|
57
58
|
# automation_id (required) - int64 - ID of the associated Automation.
|
|
58
59
|
def list(params=None, options=None):
|
|
59
60
|
if not isinstance(params, dict):
|
files_sdk/models/behavior.py
CHANGED
|
@@ -43,7 +43,7 @@ class Behavior:
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
# Parameters:
|
|
46
|
-
# value -
|
|
46
|
+
# value - object - This field stores a hash of data specific to the type of behavior. See The Behavior Types section for example values for each type of behavior.
|
|
47
47
|
# attachment_file - file - Certain behaviors may require a file, for instance, the `watermark` behavior requires a watermark image. Attach that file here.
|
|
48
48
|
# disable_parent_folder_behavior - boolean - If `true`, the parent folder's behavior will be disabled for this folder and its children. This is the main mechanism for canceling out a `recursive` behavior higher in the folder tree.
|
|
49
49
|
# recursive - boolean - If `true`, behavior is treated as recursive, meaning that it impacts child folders as well.
|
|
@@ -62,8 +62,6 @@ class Behavior:
|
|
|
62
62
|
raise MissingParameterError("Parameter missing: id")
|
|
63
63
|
if "id" in params and not isinstance(params["id"], int):
|
|
64
64
|
raise InvalidParameterError("Bad parameter: id must be an int")
|
|
65
|
-
if "value" in params and not isinstance(params["value"], str):
|
|
66
|
-
raise InvalidParameterError("Bad parameter: value must be an str")
|
|
67
65
|
if "name" in params and not isinstance(params["name"], str):
|
|
68
66
|
raise InvalidParameterError("Bad parameter: name must be an str")
|
|
69
67
|
if "description" in params and not isinstance(
|
|
@@ -117,7 +115,7 @@ class Behavior:
|
|
|
117
115
|
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
118
116
|
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
119
117
|
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `behavior`.
|
|
120
|
-
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `impacts_ui`
|
|
118
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `clickwrap_id`, `form_field_set_id`, `impacts_ui`, `remote_server_id` or `behavior`. Valid field combinations are `[ impacts_ui, behavior ]`.
|
|
121
119
|
def list(params=None, options=None):
|
|
122
120
|
if not isinstance(params, dict):
|
|
123
121
|
params = {}
|
|
@@ -201,7 +199,7 @@ def list_for(path, params=None, options=None):
|
|
|
201
199
|
|
|
202
200
|
|
|
203
201
|
# Parameters:
|
|
204
|
-
# value -
|
|
202
|
+
# value - object - This field stores a hash of data specific to the type of behavior. See The Behavior Types section for example values for each type of behavior.
|
|
205
203
|
# attachment_file - file - Certain behaviors may require a file, for instance, the `watermark` behavior requires a watermark image. Attach that file here.
|
|
206
204
|
# disable_parent_folder_behavior - boolean - If `true`, the parent folder's behavior will be disabled for this folder and its children. This is the main mechanism for canceling out a `recursive` behavior higher in the folder tree.
|
|
207
205
|
# recursive - boolean - If `true`, behavior is treated as recursive, meaning that it impacts child folders as well.
|
|
@@ -214,8 +212,8 @@ def create(params=None, options=None):
|
|
|
214
212
|
params = {}
|
|
215
213
|
if not isinstance(options, dict):
|
|
216
214
|
options = {}
|
|
217
|
-
if "value" in params and not isinstance(params["value"],
|
|
218
|
-
raise InvalidParameterError("Bad parameter: value must be an
|
|
215
|
+
if "value" in params and not isinstance(params["value"], dict):
|
|
216
|
+
raise InvalidParameterError("Bad parameter: value must be an dict")
|
|
219
217
|
if "disable_parent_folder_behavior" in params and not isinstance(
|
|
220
218
|
params["disable_parent_folder_behavior"], bool
|
|
221
219
|
):
|
|
@@ -272,7 +270,7 @@ def webhook_test(params=None, options=None):
|
|
|
272
270
|
|
|
273
271
|
|
|
274
272
|
# Parameters:
|
|
275
|
-
# value -
|
|
273
|
+
# value - object - This field stores a hash of data specific to the type of behavior. See The Behavior Types section for example values for each type of behavior.
|
|
276
274
|
# attachment_file - file - Certain behaviors may require a file, for instance, the `watermark` behavior requires a watermark image. Attach that file here.
|
|
277
275
|
# disable_parent_folder_behavior - boolean - If `true`, the parent folder's behavior will be disabled for this folder and its children. This is the main mechanism for canceling out a `recursive` behavior higher in the folder tree.
|
|
278
276
|
# recursive - boolean - If `true`, behavior is treated as recursive, meaning that it impacts child folders as well.
|
|
@@ -285,12 +283,12 @@ def update(id, params=None, options=None):
|
|
|
285
283
|
if not isinstance(options, dict):
|
|
286
284
|
options = {}
|
|
287
285
|
params["id"] = id
|
|
288
|
-
if "id" in params and not isinstance(params["id"], (str, int
|
|
286
|
+
if "id" in params and not isinstance(params["id"], (dict, str, int)):
|
|
289
287
|
raise InvalidParameterError(
|
|
290
|
-
"Bad parameter: id must be one of str, int
|
|
288
|
+
"Bad parameter: id must be one of dict, str, int"
|
|
291
289
|
)
|
|
292
|
-
if "value" in params and not isinstance(params["value"],
|
|
293
|
-
raise InvalidParameterError("Bad parameter: value must be an
|
|
290
|
+
if "value" in params and not isinstance(params["value"], dict):
|
|
291
|
+
raise InvalidParameterError("Bad parameter: value must be an dict")
|
|
294
292
|
if "disable_parent_folder_behavior" in params and not isinstance(
|
|
295
293
|
params["disable_parent_folder_behavior"], bool
|
|
296
294
|
):
|
|
@@ -306,10 +304,10 @@ def update(id, params=None, options=None):
|
|
|
306
304
|
"Bad parameter: description must be an str"
|
|
307
305
|
)
|
|
308
306
|
if "attachment_delete" in params and not isinstance(
|
|
309
|
-
params["attachment_delete"], (str, int
|
|
307
|
+
params["attachment_delete"], (dict, str, int)
|
|
310
308
|
):
|
|
311
309
|
raise InvalidParameterError(
|
|
312
|
-
"Bad parameter: attachment_delete must be one of str, int
|
|
310
|
+
"Bad parameter: attachment_delete must be one of dict, str, int"
|
|
313
311
|
)
|
|
314
312
|
if "id" not in params:
|
|
315
313
|
raise MissingParameterError("Parameter missing: id")
|
files_sdk/models/bundle.py
CHANGED
|
@@ -136,6 +136,7 @@ class Bundle:
|
|
|
136
136
|
# start_access_on_date - string - Date when share will start to be accessible. If `nil` access granted right after create.
|
|
137
137
|
# skip_email - boolean - BundleRegistrations can be saved without providing email?
|
|
138
138
|
# skip_name - boolean - BundleRegistrations can be saved without providing name?
|
|
139
|
+
# user_id - int64 - The owning user id. Only site admins can set this.
|
|
139
140
|
# watermark_attachment_delete - boolean - If true, will delete the file stored in watermark_attachment
|
|
140
141
|
# watermark_attachment_file - file - Preview watermark image applied to all bundle items.
|
|
141
142
|
def update(self, params=None):
|
|
@@ -218,6 +219,10 @@ class Bundle:
|
|
|
218
219
|
raise InvalidParameterError(
|
|
219
220
|
"Bad parameter: start_access_on_date must be an str"
|
|
220
221
|
)
|
|
222
|
+
if "user_id" in params and not isinstance(params["user_id"], int):
|
|
223
|
+
raise InvalidParameterError(
|
|
224
|
+
"Bad parameter: user_id must be an int"
|
|
225
|
+
)
|
|
221
226
|
response, _options = Api.send_request(
|
|
222
227
|
"PATCH",
|
|
223
228
|
"/bundles/{id}".format(id=params["id"]),
|
|
@@ -264,7 +269,7 @@ class Bundle:
|
|
|
264
269
|
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
265
270
|
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
266
271
|
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `expires_at`.
|
|
267
|
-
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `created_at`, `expires_at`, `code` or `user_id`. Valid field combinations are `[ user_id,
|
|
272
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `created_at`, `expires_at`, `code` or `user_id`. Valid field combinations are `[ user_id, expires_at ]`.
|
|
268
273
|
# filter_gt - object - If set, return records where the specified field is greater than the supplied value. Valid fields are `created_at` and `expires_at`.
|
|
269
274
|
# filter_gteq - object - If set, return records where the specified field is greater than or equal the supplied value. Valid fields are `created_at` and `expires_at`.
|
|
270
275
|
# filter_prefix - object - If set, return records where the specified field is prefixed by the supplied value. Valid fields are `code`.
|
|
@@ -531,6 +536,7 @@ def share(id, params=None, options=None):
|
|
|
531
536
|
# start_access_on_date - string - Date when share will start to be accessible. If `nil` access granted right after create.
|
|
532
537
|
# skip_email - boolean - BundleRegistrations can be saved without providing email?
|
|
533
538
|
# skip_name - boolean - BundleRegistrations can be saved without providing name?
|
|
539
|
+
# user_id - int64 - The owning user id. Only site admins can set this.
|
|
534
540
|
# watermark_attachment_delete - boolean - If true, will delete the file stored in watermark_attachment
|
|
535
541
|
# watermark_attachment_file - file - Preview watermark image applied to all bundle items.
|
|
536
542
|
def update(id, params=None, options=None):
|
|
@@ -641,6 +647,8 @@ def update(id, params=None, options=None):
|
|
|
641
647
|
)
|
|
642
648
|
if "skip_name" in params and not isinstance(params["skip_name"], bool):
|
|
643
649
|
raise InvalidParameterError("Bad parameter: skip_name must be an bool")
|
|
650
|
+
if "user_id" in params and not isinstance(params["user_id"], int):
|
|
651
|
+
raise InvalidParameterError("Bad parameter: user_id must be an int")
|
|
644
652
|
if "watermark_attachment_delete" in params and not isinstance(
|
|
645
653
|
params["watermark_attachment_delete"], bool
|
|
646
654
|
):
|
files_sdk/models/file.py
CHANGED
|
@@ -23,7 +23,7 @@ class File:
|
|
|
23
23
|
"created_by_bundle_registration_id": None, # int64 - ID of the Bundle Registration that created the file/folder
|
|
24
24
|
"created_by_inbox_id": None, # int64 - ID of the Inbox that created the file/folder
|
|
25
25
|
"created_by_remote_server_id": None, # int64 - ID of the Remote Server that created the file/folder
|
|
26
|
-
"
|
|
26
|
+
"created_by_sync_id": None, # int64 - ID of the Sync that created the file/folder
|
|
27
27
|
"custom_metadata": None, # object - Custom metadata map of keys and values. Limited to 32 keys, 256 characters per key and 1024 characters per value.
|
|
28
28
|
"display_name": None, # string - File/Folder display name
|
|
29
29
|
"type": None, # string - Type: `directory` or `file`.
|
|
@@ -34,7 +34,7 @@ class File:
|
|
|
34
34
|
"last_modified_by_automation_id": None, # int64 - ID of the Automation that last modified the file/folder
|
|
35
35
|
"last_modified_by_bundle_registration_id": None, # int64 - ID of the Bundle Registration that last modified the file/folder
|
|
36
36
|
"last_modified_by_remote_server_id": None, # int64 - ID of the Remote Server that last modified the file/folder
|
|
37
|
-
"
|
|
37
|
+
"last_modified_by_sync_id": None, # int64 - ID of the Sync that last modified the file/folder
|
|
38
38
|
"mtime": None, # date-time - File last modified date/time, according to the server. This is the timestamp of the last Files.com operation of the file, regardless of what modified timestamp was sent.
|
|
39
39
|
"provided_mtime": None, # date-time - File last modified date/time, according to the client who set it. Files.com allows desktop, FTP, SFTP, and WebDAV clients to set modified at times. This allows Desktop<->Cloud syncing to preserve modified at times.
|
|
40
40
|
"crc32": None, # string - File CRC32 checksum. This is sometimes delayed, so if you get a blank response, wait and try again.
|
files_sdk/models/folder.py
CHANGED
|
@@ -19,7 +19,7 @@ class Folder:
|
|
|
19
19
|
"created_by_bundle_registration_id": None, # int64 - ID of the Bundle Registration that created the file/folder
|
|
20
20
|
"created_by_inbox_id": None, # int64 - ID of the Inbox that created the file/folder
|
|
21
21
|
"created_by_remote_server_id": None, # int64 - ID of the Remote Server that created the file/folder
|
|
22
|
-
"
|
|
22
|
+
"created_by_sync_id": None, # int64 - ID of the Sync that created the file/folder
|
|
23
23
|
"custom_metadata": None, # object - Custom metadata map of keys and values. Limited to 32 keys, 256 characters per key and 1024 characters per value.
|
|
24
24
|
"display_name": None, # string - File/Folder display name
|
|
25
25
|
"type": None, # string - Type: `directory` or `file`.
|
|
@@ -30,7 +30,7 @@ class Folder:
|
|
|
30
30
|
"last_modified_by_automation_id": None, # int64 - ID of the Automation that last modified the file/folder
|
|
31
31
|
"last_modified_by_bundle_registration_id": None, # int64 - ID of the Bundle Registration that last modified the file/folder
|
|
32
32
|
"last_modified_by_remote_server_id": None, # int64 - ID of the Remote Server that last modified the file/folder
|
|
33
|
-
"
|
|
33
|
+
"last_modified_by_sync_id": None, # int64 - ID of the Sync that last modified the file/folder
|
|
34
34
|
"mtime": None, # date-time - File last modified date/time, according to the server. This is the timestamp of the last Files.com operation of the file, regardless of what modified timestamp was sent.
|
|
35
35
|
"provided_mtime": None, # date-time - File last modified date/time, according to the client who set it. Files.com allows desktop, FTP, SFTP, and WebDAV clients to set modified at times. This allows Desktop<->Cloud syncing to preserve modified at times.
|
|
36
36
|
"crc32": None, # string - File CRC32 checksum. This is sometimes delayed, so if you get a blank response, wait and try again.
|
files_sdk/models/gpg_key.py
CHANGED
|
@@ -10,20 +10,21 @@ from files_sdk.error import ( # noqa: F401
|
|
|
10
10
|
|
|
11
11
|
class GpgKey:
|
|
12
12
|
default_attributes = {
|
|
13
|
-
"id": None, # int64 -
|
|
14
|
-
"
|
|
15
|
-
"
|
|
13
|
+
"id": None, # int64 - GPG key ID.
|
|
14
|
+
"workspace_id": None, # int64 - Workspace ID (0 for default workspace).
|
|
15
|
+
"expires_at": None, # date-time - GPG key expiration date.
|
|
16
|
+
"name": None, # string - GPG key name.
|
|
16
17
|
"partner_id": None, # int64 - Partner ID who owns this GPG Key, if applicable.
|
|
17
18
|
"partner_name": None, # string - Name of the Partner who owns this GPG Key, if applicable.
|
|
18
19
|
"user_id": None, # int64 - User ID who owns this GPG Key, if applicable.
|
|
19
|
-
"public_key_md5": None, # string - MD5 hash of
|
|
20
|
-
"private_key_md5": None, # string - MD5 hash of
|
|
21
|
-
"generated_public_key": None, # string -
|
|
22
|
-
"generated_private_key": None, # string -
|
|
23
|
-
"private_key_password_md5": None, # string -
|
|
24
|
-
"public_key": None, # string -
|
|
25
|
-
"private_key": None, # string -
|
|
26
|
-
"private_key_password": None, # string -
|
|
20
|
+
"public_key_md5": None, # string - MD5 hash of the GPG public key
|
|
21
|
+
"private_key_md5": None, # string - MD5 hash of the GPG private key.
|
|
22
|
+
"generated_public_key": None, # string - GPG public key
|
|
23
|
+
"generated_private_key": None, # string - GPG private key.
|
|
24
|
+
"private_key_password_md5": None, # string - GPG private key password. Only required for password protected keys.
|
|
25
|
+
"public_key": None, # string - The GPG public key
|
|
26
|
+
"private_key": None, # string - The GPG private key
|
|
27
|
+
"private_key_password": None, # string - The GPG private key password
|
|
27
28
|
"generate_expires_at": None, # string - Expiration date of the key. Used for the generation of the key. Will be ignored if `generate_keypair` is false.
|
|
28
29
|
"generate_keypair": None, # boolean - If true, generate a new GPG key pair. Can not be used with `public_key`/`private_key`
|
|
29
30
|
"generate_full_name": None, # string - Full name of the key owner. Used for the generation of the key. Will be ignored if `generate_keypair` is false.
|
|
@@ -51,10 +52,10 @@ class GpgKey:
|
|
|
51
52
|
|
|
52
53
|
# Parameters:
|
|
53
54
|
# partner_id - int64 - Partner ID who owns this GPG Key, if applicable.
|
|
54
|
-
# public_key - string -
|
|
55
|
-
# private_key - string -
|
|
56
|
-
# private_key_password - string -
|
|
57
|
-
# name - string -
|
|
55
|
+
# public_key - string - The GPG public key
|
|
56
|
+
# private_key - string - The GPG private key
|
|
57
|
+
# private_key_password - string - The GPG private key password
|
|
58
|
+
# name - string - GPG key name.
|
|
58
59
|
def update(self, params=None):
|
|
59
60
|
if not isinstance(params, dict):
|
|
60
61
|
params = {}
|
|
@@ -138,7 +139,12 @@ class GpgKey:
|
|
|
138
139
|
# user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
|
|
139
140
|
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
140
141
|
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
141
|
-
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `name`
|
|
142
|
+
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `workspace_id`, `name` or `expires_at`.
|
|
143
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `workspace_id`, `partner_id` or `expires_at`. Valid field combinations are `[ workspace_id, expires_at ]`.
|
|
144
|
+
# filter_gt - object - If set, return records where the specified field is greater than the supplied value. Valid fields are `expires_at`.
|
|
145
|
+
# filter_gteq - object - If set, return records where the specified field is greater than or equal the supplied value. Valid fields are `expires_at`.
|
|
146
|
+
# filter_lt - object - If set, return records where the specified field is less than the supplied value. Valid fields are `expires_at`.
|
|
147
|
+
# filter_lteq - object - If set, return records where the specified field is less than or equal the supplied value. Valid fields are `expires_at`.
|
|
142
148
|
def list(params=None, options=None):
|
|
143
149
|
if not isinstance(params, dict):
|
|
144
150
|
params = {}
|
|
@@ -152,6 +158,20 @@ def list(params=None, options=None):
|
|
|
152
158
|
raise InvalidParameterError("Bad parameter: per_page must be an int")
|
|
153
159
|
if "sort_by" in params and not isinstance(params["sort_by"], dict):
|
|
154
160
|
raise InvalidParameterError("Bad parameter: sort_by must be an dict")
|
|
161
|
+
if "filter" in params and not isinstance(params["filter"], dict):
|
|
162
|
+
raise InvalidParameterError("Bad parameter: filter must be an dict")
|
|
163
|
+
if "filter_gt" in params and not isinstance(params["filter_gt"], dict):
|
|
164
|
+
raise InvalidParameterError("Bad parameter: filter_gt must be an dict")
|
|
165
|
+
if "filter_gteq" in params and not isinstance(params["filter_gteq"], dict):
|
|
166
|
+
raise InvalidParameterError(
|
|
167
|
+
"Bad parameter: filter_gteq must be an dict"
|
|
168
|
+
)
|
|
169
|
+
if "filter_lt" in params and not isinstance(params["filter_lt"], dict):
|
|
170
|
+
raise InvalidParameterError("Bad parameter: filter_lt must be an dict")
|
|
171
|
+
if "filter_lteq" in params and not isinstance(params["filter_lteq"], dict):
|
|
172
|
+
raise InvalidParameterError(
|
|
173
|
+
"Bad parameter: filter_lteq must be an dict"
|
|
174
|
+
)
|
|
155
175
|
return ListObj(GpgKey, "GET", "/gpg_keys", params, options)
|
|
156
176
|
|
|
157
177
|
|
|
@@ -184,10 +204,11 @@ def get(id, params=None, options=None):
|
|
|
184
204
|
# Parameters:
|
|
185
205
|
# user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
|
|
186
206
|
# partner_id - int64 - Partner ID who owns this GPG Key, if applicable.
|
|
187
|
-
# public_key - string -
|
|
188
|
-
# private_key - string -
|
|
189
|
-
# private_key_password - string -
|
|
190
|
-
# name (required) - string -
|
|
207
|
+
# public_key - string - The GPG public key
|
|
208
|
+
# private_key - string - The GPG private key
|
|
209
|
+
# private_key_password - string - The GPG private key password
|
|
210
|
+
# name (required) - string - GPG key name.
|
|
211
|
+
# workspace_id - int64 - Workspace ID (0 for default workspace).
|
|
191
212
|
# generate_expires_at - string - Expiration date of the key. Used for the generation of the key. Will be ignored if `generate_keypair` is false.
|
|
192
213
|
# generate_keypair - boolean - If true, generate a new GPG key pair. Can not be used with `public_key`/`private_key`
|
|
193
214
|
# generate_full_name - string - Full name of the key owner. Used for the generation of the key. Will be ignored if `generate_keypair` is false.
|
|
@@ -215,6 +236,12 @@ def create(params=None, options=None):
|
|
|
215
236
|
)
|
|
216
237
|
if "name" in params and not isinstance(params["name"], str):
|
|
217
238
|
raise InvalidParameterError("Bad parameter: name must be an str")
|
|
239
|
+
if "workspace_id" in params and not isinstance(
|
|
240
|
+
params["workspace_id"], int
|
|
241
|
+
):
|
|
242
|
+
raise InvalidParameterError(
|
|
243
|
+
"Bad parameter: workspace_id must be an int"
|
|
244
|
+
)
|
|
218
245
|
if "generate_expires_at" in params and not isinstance(
|
|
219
246
|
params["generate_expires_at"], str
|
|
220
247
|
):
|
|
@@ -247,10 +274,10 @@ def create(params=None, options=None):
|
|
|
247
274
|
|
|
248
275
|
# Parameters:
|
|
249
276
|
# partner_id - int64 - Partner ID who owns this GPG Key, if applicable.
|
|
250
|
-
# public_key - string -
|
|
251
|
-
# private_key - string -
|
|
252
|
-
# private_key_password - string -
|
|
253
|
-
# name - string -
|
|
277
|
+
# public_key - string - The GPG public key
|
|
278
|
+
# private_key - string - The GPG private key
|
|
279
|
+
# private_key_password - string - The GPG private key password
|
|
280
|
+
# name - string - GPG key name.
|
|
254
281
|
def update(id, params=None, options=None):
|
|
255
282
|
if not isinstance(params, dict):
|
|
256
283
|
params = {}
|
files_sdk/models/group.py
CHANGED
|
@@ -22,6 +22,7 @@ class Group:
|
|
|
22
22
|
"dav_permission": None, # boolean - If true, users in this group can use WebDAV to login. This will override a false value of `dav_permission` on the user level.
|
|
23
23
|
"restapi_permission": None, # boolean - If true, users in this group can use the REST API to login. This will override a false value of `restapi_permission` on the user level.
|
|
24
24
|
"site_id": None, # int64 - Site ID
|
|
25
|
+
"workspace_id": None, # int64 - Workspace ID
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
def __init__(self, attributes=None, options=None):
|
|
@@ -127,8 +128,8 @@ class Group:
|
|
|
127
128
|
# Parameters:
|
|
128
129
|
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
129
130
|
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
130
|
-
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `site_id`
|
|
131
|
-
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `name`.
|
|
131
|
+
# sort_by - object - If set, sort records by the specified field in either `asc` or `desc` direction. Valid fields are `site_id`, `workspace_id` or `name`.
|
|
132
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `name` and `workspace_id`. Valid field combinations are `[ workspace_id, name ]`.
|
|
132
133
|
# filter_prefix - object - If set, return records where the specified field is prefixed by the supplied value. Valid fields are `name`.
|
|
133
134
|
# ids - string - Comma-separated list of group ids to include in results.
|
|
134
135
|
# include_parent_site_groups - boolean - Include groups from the parent site.
|
|
@@ -198,6 +199,7 @@ def get(id, params=None, options=None):
|
|
|
198
199
|
# restapi_permission - boolean - If true, users in this group can use the REST API to login. This will override a false value of `restapi_permission` on the user level.
|
|
199
200
|
# allowed_ips - string - A list of allowed IPs if applicable. Newline delimited
|
|
200
201
|
# name (required) - string - Group name.
|
|
202
|
+
# workspace_id - int64 - Workspace ID
|
|
201
203
|
def create(params=None, options=None):
|
|
202
204
|
if not isinstance(params, dict):
|
|
203
205
|
params = {}
|
|
@@ -239,6 +241,12 @@ def create(params=None, options=None):
|
|
|
239
241
|
)
|
|
240
242
|
if "name" in params and not isinstance(params["name"], str):
|
|
241
243
|
raise InvalidParameterError("Bad parameter: name must be an str")
|
|
244
|
+
if "workspace_id" in params and not isinstance(
|
|
245
|
+
params["workspace_id"], int
|
|
246
|
+
):
|
|
247
|
+
raise InvalidParameterError(
|
|
248
|
+
"Bad parameter: workspace_id must be an int"
|
|
249
|
+
)
|
|
242
250
|
if "name" not in params:
|
|
243
251
|
raise MissingParameterError("Parameter missing: name")
|
|
244
252
|
response, options = Api.send_request("POST", "/groups", params, options)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import builtins # noqa: F401
|
|
2
|
+
from files_sdk.api import Api # noqa: F401
|
|
3
|
+
from files_sdk.list_obj import ListObj
|
|
4
|
+
from files_sdk.error import ( # noqa: F401
|
|
5
|
+
InvalidParameterError,
|
|
6
|
+
MissingParameterError,
|
|
7
|
+
NotImplementedError,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class InboundS3Log:
|
|
12
|
+
default_attributes = {
|
|
13
|
+
"path": None, # string - Request Path. This must be slash-delimited, but it must neither start nor end with a slash. Maximum of 5000 characters.
|
|
14
|
+
"client_ip": None, # string - Client IP
|
|
15
|
+
"operation": None, # string - S3 Operation Type
|
|
16
|
+
"status": None, # string - HTTP Status Code
|
|
17
|
+
"aws_access_key": None, # string - AWS Access Key ID
|
|
18
|
+
"error_message": None, # string - Error message, if applicable
|
|
19
|
+
"error_type": None, # string - Error type, if applicable
|
|
20
|
+
"duration_ms": None, # int64 - Duration (in milliseconds)
|
|
21
|
+
"request_id": None, # string - Request ID
|
|
22
|
+
"user_agent": None, # string - User Agent
|
|
23
|
+
"created_at": None, # date-time - Start Time of Request
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
def __init__(self, attributes=None, options=None):
|
|
27
|
+
if not isinstance(attributes, dict):
|
|
28
|
+
attributes = {}
|
|
29
|
+
if not isinstance(options, dict):
|
|
30
|
+
options = {}
|
|
31
|
+
self.set_attributes(attributes)
|
|
32
|
+
self.options = options
|
|
33
|
+
|
|
34
|
+
def set_attributes(self, attributes):
|
|
35
|
+
for (
|
|
36
|
+
attribute,
|
|
37
|
+
default_value,
|
|
38
|
+
) in InboundS3Log.default_attributes.items():
|
|
39
|
+
setattr(self, attribute, attributes.get(attribute, default_value))
|
|
40
|
+
|
|
41
|
+
def get_attributes(self):
|
|
42
|
+
return {
|
|
43
|
+
k: getattr(self, k, None)
|
|
44
|
+
for k in InboundS3Log.default_attributes
|
|
45
|
+
if getattr(self, k, None) is not None
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# Parameters:
|
|
50
|
+
# cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
|
|
51
|
+
# per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
|
|
52
|
+
# filter - object - If set, return records where the specified field is equal to the supplied value. Valid fields are `operation`, `status`, `path`, `client_ip` or `created_at`. Valid field combinations are `[ operation ]`, `[ status ]`, `[ path ]`, `[ client_ip ]`, `[ created_at ]`, `[ operation, status ]`, `[ operation, path ]`, `[ operation, client_ip ]`, `[ operation, created_at ]`, `[ status, path ]`, `[ status, client_ip ]`, `[ status, created_at ]`, `[ path, client_ip ]`, `[ path, created_at ]`, `[ client_ip, created_at ]`, `[ operation, status, path ]`, `[ operation, status, client_ip ]`, `[ operation, status, created_at ]`, `[ operation, path, client_ip ]`, `[ operation, path, created_at ]`, `[ operation, client_ip, created_at ]`, `[ status, path, client_ip ]`, `[ status, path, created_at ]`, `[ status, client_ip, created_at ]`, `[ path, client_ip, created_at ]`, `[ operation, status, path, client_ip ]`, `[ operation, status, path, created_at ]`, `[ operation, status, client_ip, created_at ]`, `[ operation, path, client_ip, created_at ]` or `[ status, path, client_ip, created_at ]`.
|
|
53
|
+
# filter_gt - object - If set, return records where the specified field is greater than the supplied value. Valid fields are `created_at`. Valid field combinations are `[ operation ]`, `[ status ]`, `[ path ]`, `[ client_ip ]`, `[ created_at ]`, `[ operation, status ]`, `[ operation, path ]`, `[ operation, client_ip ]`, `[ operation, created_at ]`, `[ status, path ]`, `[ status, client_ip ]`, `[ status, created_at ]`, `[ path, client_ip ]`, `[ path, created_at ]`, `[ client_ip, created_at ]`, `[ operation, status, path ]`, `[ operation, status, client_ip ]`, `[ operation, status, created_at ]`, `[ operation, path, client_ip ]`, `[ operation, path, created_at ]`, `[ operation, client_ip, created_at ]`, `[ status, path, client_ip ]`, `[ status, path, created_at ]`, `[ status, client_ip, created_at ]`, `[ path, client_ip, created_at ]`, `[ operation, status, path, client_ip ]`, `[ operation, status, path, created_at ]`, `[ operation, status, client_ip, created_at ]`, `[ operation, path, client_ip, created_at ]` or `[ status, path, client_ip, created_at ]`.
|
|
54
|
+
# filter_gteq - object - If set, return records where the specified field is greater than or equal the supplied value. Valid fields are `created_at`. Valid field combinations are `[ operation ]`, `[ status ]`, `[ path ]`, `[ client_ip ]`, `[ created_at ]`, `[ operation, status ]`, `[ operation, path ]`, `[ operation, client_ip ]`, `[ operation, created_at ]`, `[ status, path ]`, `[ status, client_ip ]`, `[ status, created_at ]`, `[ path, client_ip ]`, `[ path, created_at ]`, `[ client_ip, created_at ]`, `[ operation, status, path ]`, `[ operation, status, client_ip ]`, `[ operation, status, created_at ]`, `[ operation, path, client_ip ]`, `[ operation, path, created_at ]`, `[ operation, client_ip, created_at ]`, `[ status, path, client_ip ]`, `[ status, path, created_at ]`, `[ status, client_ip, created_at ]`, `[ path, client_ip, created_at ]`, `[ operation, status, path, client_ip ]`, `[ operation, status, path, created_at ]`, `[ operation, status, client_ip, created_at ]`, `[ operation, path, client_ip, created_at ]` or `[ status, path, client_ip, created_at ]`.
|
|
55
|
+
# filter_prefix - object - If set, return records where the specified field is prefixed by the supplied value. Valid fields are `operation`, `status`, `path` or `client_ip`. Valid field combinations are `[ operation ]`, `[ status ]`, `[ path ]`, `[ client_ip ]`, `[ created_at ]`, `[ operation, status ]`, `[ operation, path ]`, `[ operation, client_ip ]`, `[ operation, created_at ]`, `[ status, path ]`, `[ status, client_ip ]`, `[ status, created_at ]`, `[ path, client_ip ]`, `[ path, created_at ]`, `[ client_ip, created_at ]`, `[ operation, status, path ]`, `[ operation, status, client_ip ]`, `[ operation, status, created_at ]`, `[ operation, path, client_ip ]`, `[ operation, path, created_at ]`, `[ operation, client_ip, created_at ]`, `[ status, path, client_ip ]`, `[ status, path, created_at ]`, `[ status, client_ip, created_at ]`, `[ path, client_ip, created_at ]`, `[ operation, status, path, client_ip ]`, `[ operation, status, path, created_at ]`, `[ operation, status, client_ip, created_at ]`, `[ operation, path, client_ip, created_at ]` or `[ status, path, client_ip, created_at ]`.
|
|
56
|
+
# filter_lt - object - If set, return records where the specified field is less than the supplied value. Valid fields are `created_at`. Valid field combinations are `[ operation ]`, `[ status ]`, `[ path ]`, `[ client_ip ]`, `[ created_at ]`, `[ operation, status ]`, `[ operation, path ]`, `[ operation, client_ip ]`, `[ operation, created_at ]`, `[ status, path ]`, `[ status, client_ip ]`, `[ status, created_at ]`, `[ path, client_ip ]`, `[ path, created_at ]`, `[ client_ip, created_at ]`, `[ operation, status, path ]`, `[ operation, status, client_ip ]`, `[ operation, status, created_at ]`, `[ operation, path, client_ip ]`, `[ operation, path, created_at ]`, `[ operation, client_ip, created_at ]`, `[ status, path, client_ip ]`, `[ status, path, created_at ]`, `[ status, client_ip, created_at ]`, `[ path, client_ip, created_at ]`, `[ operation, status, path, client_ip ]`, `[ operation, status, path, created_at ]`, `[ operation, status, client_ip, created_at ]`, `[ operation, path, client_ip, created_at ]` or `[ status, path, client_ip, created_at ]`.
|
|
57
|
+
# filter_lteq - object - If set, return records where the specified field is less than or equal the supplied value. Valid fields are `created_at`. Valid field combinations are `[ operation ]`, `[ status ]`, `[ path ]`, `[ client_ip ]`, `[ created_at ]`, `[ operation, status ]`, `[ operation, path ]`, `[ operation, client_ip ]`, `[ operation, created_at ]`, `[ status, path ]`, `[ status, client_ip ]`, `[ status, created_at ]`, `[ path, client_ip ]`, `[ path, created_at ]`, `[ client_ip, created_at ]`, `[ operation, status, path ]`, `[ operation, status, client_ip ]`, `[ operation, status, created_at ]`, `[ operation, path, client_ip ]`, `[ operation, path, created_at ]`, `[ operation, client_ip, created_at ]`, `[ status, path, client_ip ]`, `[ status, path, created_at ]`, `[ status, client_ip, created_at ]`, `[ path, client_ip, created_at ]`, `[ operation, status, path, client_ip ]`, `[ operation, status, path, created_at ]`, `[ operation, status, client_ip, created_at ]`, `[ operation, path, client_ip, created_at ]` or `[ status, path, client_ip, created_at ]`.
|
|
58
|
+
def list(params=None, options=None):
|
|
59
|
+
if not isinstance(params, dict):
|
|
60
|
+
params = {}
|
|
61
|
+
if not isinstance(options, dict):
|
|
62
|
+
options = {}
|
|
63
|
+
if "cursor" in params and not isinstance(params["cursor"], str):
|
|
64
|
+
raise InvalidParameterError("Bad parameter: cursor must be an str")
|
|
65
|
+
if "per_page" in params and not isinstance(params["per_page"], int):
|
|
66
|
+
raise InvalidParameterError("Bad parameter: per_page must be an int")
|
|
67
|
+
if "filter" in params and not isinstance(params["filter"], dict):
|
|
68
|
+
raise InvalidParameterError("Bad parameter: filter must be an dict")
|
|
69
|
+
if "filter_gt" in params and not isinstance(params["filter_gt"], dict):
|
|
70
|
+
raise InvalidParameterError("Bad parameter: filter_gt must be an dict")
|
|
71
|
+
if "filter_gteq" in params and not isinstance(params["filter_gteq"], dict):
|
|
72
|
+
raise InvalidParameterError(
|
|
73
|
+
"Bad parameter: filter_gteq must be an dict"
|
|
74
|
+
)
|
|
75
|
+
if "filter_prefix" in params and not isinstance(
|
|
76
|
+
params["filter_prefix"], dict
|
|
77
|
+
):
|
|
78
|
+
raise InvalidParameterError(
|
|
79
|
+
"Bad parameter: filter_prefix must be an dict"
|
|
80
|
+
)
|
|
81
|
+
if "filter_lt" in params and not isinstance(params["filter_lt"], dict):
|
|
82
|
+
raise InvalidParameterError("Bad parameter: filter_lt must be an dict")
|
|
83
|
+
if "filter_lteq" in params and not isinstance(params["filter_lteq"], dict):
|
|
84
|
+
raise InvalidParameterError(
|
|
85
|
+
"Bad parameter: filter_lteq must be an dict"
|
|
86
|
+
)
|
|
87
|
+
return ListObj(InboundS3Log, "GET", "/inbound_s3_logs", params, options)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def all(params=None, options=None):
|
|
91
|
+
list(params, options)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def new(*args, **kwargs):
|
|
95
|
+
return InboundS3Log(*args, **kwargs)
|