From d8780e8add5449c2247094745e7b8ed23d81b3fe Mon Sep 17 00:00:00 2001
From: Kyle Robbertze <kyle@paddatrapper.com>
Date: Fri, 20 Aug 2021 13:35:33 +0200
Subject: [PATCH 1/3] use api_clients method to update file size of items on
 the server

---
 python_apps/api_clients/api_clients/utils.py  |  9 ++++++++-
 .../api_clients/api_clients/version2.py       |  5 +++++
 python_apps/pypo/pypo/pypofile.py             | 19 +++++++------------
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/python_apps/api_clients/api_clients/utils.py b/python_apps/api_clients/api_clients/utils.py
index 90a3f40cd..c0091705d 100644
--- a/python_apps/api_clients/api_clients/utils.py
+++ b/python_apps/api_clients/api_clients/utils.py
@@ -91,7 +91,7 @@ class ApiRequest:
             self.logger = logger
         self.auth = KeyAuth(api_key)
 
-    def __call__(self, _post_data=None, params=None, **kwargs):
+    def __call__(self, _post_data=None, _put_data=None, params=None, **kwargs):
         final_url = self.url.params(**kwargs).url()
         self.logger.debug(final_url)
         try:
@@ -102,6 +102,13 @@ class ApiRequest:
                     auth=self.auth,
                     timeout=ApiRequest.API_HTTP_REQUEST_TIMEOUT,
                 )
+            elif _put_data is not None:
+                res = requests.put(
+                    final_url,
+                    data=_put_data,
+                    auth=self.auth,
+                    timeout=ApiRequest.API_HTTP_REQUEST_TIMEOUT,
+                )
             else:
                 res = requests.get(
                     final_url,
diff --git a/python_apps/api_clients/api_clients/version2.py b/python_apps/api_clients/api_clients/version2.py
index 15c6cf6b4..f15d1f28a 100644
--- a/python_apps/api_clients/api_clients/version2.py
+++ b/python_apps/api_clients/api_clients/version2.py
@@ -130,3 +130,8 @@ class AirtimeApiClient:
                     "independent_event": current["independent_event"],
                 }
         return result
+
+    def update_file(self, file_id, payload):
+        data = self.services.file_url(id=file_id)
+        data.update(payload)
+        return self.services.file_url(id=file_id, _put_data=data)
diff --git a/python_apps/pypo/pypo/pypofile.py b/python_apps/pypo/pypo/pypofile.py
index f7d5a2cab..638404b1d 100644
--- a/python_apps/pypo/pypo/pypofile.py
+++ b/python_apps/pypo/pypo/pypofile.py
@@ -88,8 +88,8 @@ class PypoFile(Thread):
                 os.chmod(dst, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
 
                 if media_item["filesize"] == 0:
-                    file_size = self.report_file_size_and_md5_to_airtime(
-                        dst, media_item["id"], host, username
+                    file_size = self.report_file_size_and_md5_to_libretime(
+                        dst, media_item["id"]
                     )
                     media_item["filesize"] = file_size
 
@@ -98,7 +98,7 @@ class PypoFile(Thread):
                 self.logger.error("Could not copy from %s to %s" % (src, dst))
                 self.logger.error(e)
 
-    def report_file_size_and_md5_to_airtime(self, file_path, file_id, host, api_key):
+    def report_file_size_and_md5_to_libretime(self, file_path, file_id):
         try:
             file_size = os.path.getsize(file_path)
 
@@ -117,18 +117,13 @@ class PypoFile(Thread):
             )
             self.logger.error(e)
 
-        # Make PUT request to Airtime to update the file size and hash
+        # Make PUT request to LibreTime to update the file size and hash
         error_msg = (
-            "Could not update media file %s with file size and md5 hash" % file_id
+            "Could not update media file %s with file size and md5 hash:" % file_id
         )
         try:
-            put_url = "%s://%s:%s/rest/media/%s" % (host[0], host[1], host[2], file_id)
-            payload = json.dumps({"filesize": file_size, "md5": md5_hash})
-            response = requests.put(
-                put_url, data=payload, auth=requests.auth.HTTPBasicAuth(api_key, "")
-            )
-            if not response.ok:
-                self.logger.error(error_msg)
+            payload = {"filesize": file_size, "md5": md5_hash}
+            response = self.api_client.update_file(file_id, payload)
         except (ConnectionError, Timeout):
             self.logger.error(error_msg)
         except Exception as e:

From 9c001a6d06ddc06d0b0a21db8800713389dfb6b6 Mon Sep 17 00:00:00 2001
From: Kyle Robbertze <kyle@paddatrapper.com>
Date: Tue, 31 Aug 2021 20:11:39 +0200
Subject: [PATCH 2/3] force keyword only arguments

---
 python_apps/api_clients/api_clients/utils.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/python_apps/api_clients/api_clients/utils.py b/python_apps/api_clients/api_clients/utils.py
index c0091705d..50b3b66e9 100644
--- a/python_apps/api_clients/api_clients/utils.py
+++ b/python_apps/api_clients/api_clients/utils.py
@@ -91,7 +91,7 @@ class ApiRequest:
             self.logger = logger
         self.auth = KeyAuth(api_key)
 
-    def __call__(self, _post_data=None, _put_data=None, params=None, **kwargs):
+    def __call__(self, *, _post_data=None, _put_data=None, params=None, **kwargs):
         final_url = self.url.params(**kwargs).url()
         self.logger.debug(final_url)
         try:

From ce3957fef19cd2a7d61e3061326cb170328553ef Mon Sep 17 00:00:00 2001
From: Kyle Robbertze <kyle@paddatrapper.com>
Date: Wed, 1 Sep 2021 15:25:38 +0200
Subject: [PATCH 3/3] rename report function

---
 python_apps/pypo/pypo/pypofile.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/python_apps/pypo/pypo/pypofile.py b/python_apps/pypo/pypo/pypofile.py
index 638404b1d..29c9912d4 100644
--- a/python_apps/pypo/pypo/pypofile.py
+++ b/python_apps/pypo/pypo/pypofile.py
@@ -88,7 +88,7 @@ class PypoFile(Thread):
                 os.chmod(dst, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
 
                 if media_item["filesize"] == 0:
-                    file_size = self.report_file_size_and_md5_to_libretime(
+                    file_size = self.report_file_size_and_md5_to_api(
                         dst, media_item["id"]
                     )
                     media_item["filesize"] = file_size
@@ -98,7 +98,7 @@ class PypoFile(Thread):
                 self.logger.error("Could not copy from %s to %s" % (src, dst))
                 self.logger.error(e)
 
-    def report_file_size_and_md5_to_libretime(self, file_path, file_id):
+    def report_file_size_and_md5_to_api(self, file_path, file_id):
         try:
             file_size = os.path.getsize(file_path)