From 8a76cff53fb9fd56f2272ffaaeef58492dfe130e Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 17:53:55 -0700 Subject: [PATCH 1/7] Add helper functions and missing PresentationException --- frameioclient/client.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/frameioclient/client.py b/frameioclient/client.py index 7706706b..bddc30b0 100644 --- a/frameioclient/client.py +++ b/frameioclient/client.py @@ -4,8 +4,15 @@ from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry -from .lib import ClientVersion, PaginatedResponse, Utils, ClientVersion, FrameioDownloader - +from .lib import ( + ClientVersion, + PaginatedResponse, + Utils, + Helpers, + ClientVersion, + FrameioDownloader, + PresentationException +) class FrameioConnection(object): def __init__(self, token, host='https://api.frame.io'): @@ -128,3 +135,8 @@ def projects(self): def teams(self): from .service import Team return Team(self) + + @property + def helpers(self): + from .lib import FrameioHelpers + return FrameioHelpers(self) From 89f72545fdab72247f10333d3fe98cca78f40c69 Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 17:54:20 -0700 Subject: [PATCH 2/7] Add helper functions to simplify a couple of tasks --- frameioclient/client.py | 1 - frameioclient/lib/__init__.py | 3 ++- frameioclient/lib/download.py | 12 +++++++++--- frameioclient/lib/helpers.py | 30 ++++++++++++++++++++++++++++++ frameioclient/service/assets.py | 20 +++++++++++++++++++- 5 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 frameioclient/lib/helpers.py diff --git a/frameioclient/client.py b/frameioclient/client.py index bddc30b0..9c66d4f1 100644 --- a/frameioclient/client.py +++ b/frameioclient/client.py @@ -8,7 +8,6 @@ ClientVersion, PaginatedResponse, Utils, - Helpers, ClientVersion, FrameioDownloader, PresentationException diff --git a/frameioclient/lib/__init__.py b/frameioclient/lib/__init__.py index a29d8999..9ea4ae6c 100644 --- a/frameioclient/lib/__init__.py +++ b/frameioclient/lib/__init__.py @@ -2,4 +2,5 @@ from .upload import FrameioUploader from .utils import Utils, PaginatedResponse, KB, MB from .exceptions import * -from .version import ClientVersion \ No newline at end of file +from .version import ClientVersion +from .helpers import FrameioHelpers \ No newline at end of file diff --git a/frameioclient/lib/download.py b/frameioclient/lib/download.py index 9605d71a..2533bde5 100644 --- a/frameioclient/lib/download.py +++ b/frameioclient/lib/download.py @@ -1,5 +1,6 @@ import io import os +import sys import math import time import requests @@ -12,7 +13,7 @@ thread_local = threading.local() class FrameioDownloader(object): - def __init__(self, asset, download_folder, prefix, multi_part=False, concurrency=5): + def __init__(self, asset, download_folder, prefix, multi_part=False, concurrency=5, replace=False): self.multi_part = multi_part self.asset = asset self.asset_type = None @@ -27,6 +28,7 @@ def __init__(self, asset, download_folder, prefix, multi_part=False, concurrency self.chunks = math.ceil(self.file_size/self.chunk_size) self.prefix = prefix self.filename = Utils.normalize_filename(asset["name"]) + self.replace = replace self._evaluate_asset() @@ -48,8 +50,12 @@ def _create_file_stub(self): # fp.write(b"\0" * self.file_size) # Disabled to prevent pre-allocatation of disk space fp.close() except FileExistsError as e: - print(e) - raise e + if self.replace == True: + os.remove(self.destination) # Remove the file + self._create_file_stub() # Create a new stub + else: + print(e) + raise e return True def get_download_key(self): diff --git a/frameioclient/lib/helpers.py b/frameioclient/lib/helpers.py new file mode 100644 index 00000000..aa8d1117 --- /dev/null +++ b/frameioclient/lib/helpers.py @@ -0,0 +1,30 @@ +class FrameioHelpers(object): + def get_updated_assets(self, account_id, project_id, timestamp): + """ + Get assets added or updated since timestamp. + + :Args: + account_id (string): The account id. + project_id (string): The project id. + timestamp (string): ISO 8601 UTC format. + (datetime.now(timezone.utc).isoformat()) + """ + payload = { + "account_id": account_id, + "page": 1, + "page_size": 50, + "include": "children", + "sort": "-inserted_at", + "filter": { + "project_id": { + "op": "eq", + "value": project_id + }, + "updated_at": { + "op": "gte", + "value": timestamp + } + } + } + endpoint = '/search/library' + return self._api_call('post', endpoint, payload=payload) diff --git a/frameioclient/service/assets.py b/frameioclient/service/assets.py index 28e07bc9..3e691482 100644 --- a/frameioclient/service/assets.py +++ b/frameioclient/service/assets.py @@ -75,6 +75,24 @@ def create(self, parent_asset_id, **kwargs): endpoint = '/assets/{}/children'.format(parent_asset_id) return self.client._api_call('post', endpoint, payload=kwargs) + def create_folder(self, parent_asset_id, name="New Folder"): + """ + Create a new folder. + + :Args: + parent_asset_id (string): The parent asset id. + name (string): The name of the new folder. + + Example:: + + client.assets.create_folder( + parent_asset_id="123abc", + name="ExampleFile.mp4", + ) + """ + endpoint = '/assets/{}/children'.format(parent_asset_id) + return self.client._api_call('post', endpoint, payload={"name": name, "type":"folder"}) + def from_url(self, parent_asset_id, name, url): """ Create an asset from a URL. @@ -242,7 +260,7 @@ def upload(self, destination_id, filepath, asset=None): return asset - def download(self, asset, download_folder, prefix=None, multi_part=False, concurrency=5): + def download(self, asset, download_folder, prefix=None, multi_part=False, concurrency=5, replace=False): """ Download an asset. The method will exit once the file is downloaded. From 8285b7d7228b791d23a5e1309cee334a2d3ceabf Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 17:54:39 -0700 Subject: [PATCH 3/7] =?UTF-8?q?Bump=20version:=201.1.0=20=E2=86=92=201.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index a9f550e4..484cfe2d 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.1.0 +current_version = 1.2.0 commit = True tag = True diff --git a/setup.py b/setup.py index 70acd024..aab7c210 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from setuptools.command.install import install -version='1.1.0' +version='1.2.0' with open("README.md", "r") as f: long_description = f.read() From 303d22a0121525b8d5cf13eb2bad777a2f239b59 Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 18:19:11 -0700 Subject: [PATCH 4/7] Fix FrameioHelpers class --- frameioclient/{lib => service}/helpers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename frameioclient/{lib => service}/helpers.py (92%) diff --git a/frameioclient/lib/helpers.py b/frameioclient/service/helpers.py similarity index 92% rename from frameioclient/lib/helpers.py rename to frameioclient/service/helpers.py index aa8d1117..2296423c 100644 --- a/frameioclient/lib/helpers.py +++ b/frameioclient/service/helpers.py @@ -1,4 +1,6 @@ -class FrameioHelpers(object): +from .service import Service + +class FrameioHelpers(Service): def get_updated_assets(self, account_id, project_id, timestamp): """ Get assets added or updated since timestamp. From 1ee7f6535bf64cf453169d8fb23dbe9ebecc3269 Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 18:25:01 -0700 Subject: [PATCH 5/7] Fix FrameioHelpers import --- frameioclient/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameioclient/client.py b/frameioclient/client.py index 9c66d4f1..9985cd39 100644 --- a/frameioclient/client.py +++ b/frameioclient/client.py @@ -137,5 +137,5 @@ def teams(self): @property def helpers(self): - from .lib import FrameioHelpers + from .service import FrameioHelpers return FrameioHelpers(self) From b82ba6768049dbdc781e79315ffa5447e40950dc Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 18:29:32 -0700 Subject: [PATCH 6/7] Fix __init__ imports --- frameioclient/lib/__init__.py | 1 - frameioclient/service/__init__.py | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameioclient/lib/__init__.py b/frameioclient/lib/__init__.py index 9ea4ae6c..6bc3b71e 100644 --- a/frameioclient/lib/__init__.py +++ b/frameioclient/lib/__init__.py @@ -3,4 +3,3 @@ from .utils import Utils, PaginatedResponse, KB, MB from .exceptions import * from .version import ClientVersion -from .helpers import FrameioHelpers \ No newline at end of file diff --git a/frameioclient/service/__init__.py b/frameioclient/service/__init__.py index 0cd634d5..8959ebc8 100644 --- a/frameioclient/service/__init__.py +++ b/frameioclient/service/__init__.py @@ -4,4 +4,5 @@ from .logs import AuditLogs from .comments import Comment from .projects import Project -from .links import ReviewLink, PresentationLink \ No newline at end of file +from .links import ReviewLink, PresentationLink +from .helpers import FrameioHelpers \ No newline at end of file From 7430f2bdd96e3d885e44e85351e98df5f21e5600 Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Fri, 4 Jun 2021 18:50:24 -0700 Subject: [PATCH 7/7] Finish fixing helpers... --- frameioclient/service/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameioclient/service/helpers.py b/frameioclient/service/helpers.py index 2296423c..adaa5fba 100644 --- a/frameioclient/service/helpers.py +++ b/frameioclient/service/helpers.py @@ -29,4 +29,4 @@ def get_updated_assets(self, account_id, project_id, timestamp): } } endpoint = '/search/library' - return self._api_call('post', endpoint, payload=payload) + return self.client._api_call('post', endpoint, payload=payload)