From 140590d71cda779993a27db78019d1a1acc168a7 Mon Sep 17 00:00:00 2001
From: MARCHAL Julien <julien.marchal@univ-lorraine.fr>
Date: Fri, 24 Jan 2025 10:21:00 +0100
Subject: [PATCH] lot of changes

---
 README                |   6 +-
 config.sample.py      |   2 +-
 createUsers.py        |  64 +++++++++++++++++
 list.sample.csv       |   2 -
 putVideo.py           | 161 +++++++++++++++++++-----------------------
 putVideos.py          |  92 ++++++++++++++++++++++++
 usersList.sample.csv  |   2 +
 videosList.sample.csv |   2 +
 8 files changed, 238 insertions(+), 93 deletions(-)
 create mode 100644 createUsers.py
 delete mode 100644 list.sample.csv
 create mode 100644 putVideos.py
 create mode 100644 usersList.sample.csv
 create mode 100644 videosList.sample.csv

diff --git a/README b/README
index 2faf2f6..8b369ed 100644
--- a/README
+++ b/README
@@ -5,6 +5,8 @@ pip install requests
 pip install requests_toolbelt
 
 rename and adapt config.sample.py to config.py
-rename and adapt list.sample.csv to config.csv
+rename and adapt usersList.sample.csv to usersList.csv
+rename and adapt videosList.sample.csv to videosList.csv
 
-python3 putVideo.py
\ No newline at end of file
+python3 createUsers.py usersList.csv
+python3 putVideos.py videosList.csv
\ No newline at end of file
diff --git a/config.sample.py b/config.sample.py
index b3c2707..9f67ba1 100644
--- a/config.sample.py
+++ b/config.sample.py
@@ -1,4 +1,3 @@
-INPUT_FILE='./list.csv'
 POD_TOKEN = "xxxxxx"
 POD_BASE_URL = "https://pod.univ.fr"
 POD_API_UPLOAD_VIDEO = POD_BASE_URL + "/rest/videos/"
@@ -7,3 +6,4 @@ POD_API_LAUNCH_ENCODE = POD_BASE_URL + "/rest/launch_encode_view/"
 
 VIDEO_TYPE_BASE = POD_BASE_URL + "/rest/types/"
 VIDEO_SITE = POD_BASE_URL + "/rest/sites/1/"
+LAUNCH_ENCODE_AFTER_PUT=False
\ No newline at end of file
diff --git a/createUsers.py b/createUsers.py
new file mode 100644
index 0000000..fd57ab3
--- /dev/null
+++ b/createUsers.py
@@ -0,0 +1,64 @@
+import requests
+from requests_toolbelt.multipart.encoder import MultipartEncoder
+import csv
+import sys
+import json
+import os
+
+import config
+
+headers_json={
+    'Content-Type':'application/json',
+    'Authorization': 'Token {}'.format(config.POD_TOKEN)
+}
+inputCsvFile=sys.argv[1]
+
+try:
+    with open(inputCsvFile, newline='') as csvfile:
+        reader = csv.reader(csvfile, delimiter=',', quotechar='|')
+        for row in reader:
+            if(row[0].startswith("#") != True):
+                # print(row)
+                username=row[0]
+                user_first_name=row[1]
+                user_last_name=row[2]
+                user_email=row[3]
+                # print("%s %s %s %s" % (username, user_first_name, user_last_name, user_email))
+                
+                # TEST IF USER EXIST
+                payload_search_user={
+                    "username": username
+                }
+                
+                response = requests.get(config.POD_API_USERS, headers=headers_json, params=payload_search_user)
+                if(response.status_code != 200):
+                    print("ERROR Test User exists [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                else:
+                    result = json.loads(response.content.decode("utf-8"))
+                    if(result['count'] != 1):
+                        # print("User don't exists [%s]" % (username))
+                        
+                        # CREATE USER
+                        payload_create_user={
+                            "username": username,
+                            "first_name": user_first_name,
+                            "is_staff": "true",
+                            "last_name": user_last_name,
+                            "email": user_email,
+                            "groups": []
+                        }
+                        
+                        response = requests.post(config.POD_API_USERS, headers=headers_json, data=json.dumps(payload_create_user))
+                        if(response.status_code != 201):
+                            print("ERROR Create User [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                        else:
+                            result = json.loads(response.content.decode("utf-8"))
+                            username=result['username']
+                            user_url=result['url']
+                            print("New user created [%s] [%s]" % (username, user_url))
+                    else:
+                        user_url=result['results'][0]['url']        
+                        print("User already exists [%s] [%s]" % (username, user_url))
+
+except FileNotFoundError as e:
+    print('File [%s] not found' % inputCsvFile)   
\ No newline at end of file
diff --git a/list.sample.csv b/list.sample.csv
deleted file mode 100644
index 58f0f76..0000000
--- a/list.sample.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-#username,user_first_name,user_last_name,user_email,video_type,video_title,video_description,video_allow_downloading,video_is_draft,video_file
-bond@esup-portail.org,James,Bond,James.Bond@esup-portail.org,1,Titre de test,Description de test,false,true,./videos/test1.mp4
diff --git a/putVideo.py b/putVideo.py
index 7986fa4..52ecc8b 100644
--- a/putVideo.py
+++ b/putVideo.py
@@ -12,97 +12,82 @@ headers_json={
     'Authorization': 'Token {}'.format(config.POD_TOKEN)
 }
 
-
+try:
+    inputCsvFile=sys.argv[1]
+except IndexError as e:
+    sys.exit('No file name in input param') 
+    
 # READ CSV FILE
-with open(config.INPUT_FILE, newline='') as csvfile:
-    reader = csv.reader(csvfile, delimiter=',', quotechar='|')
-    for row in reader:
-        if(row[0].startswith("#") != True):
-            username=row[0]
-            user_first_name=row[1]
-            user_last_name=row[2]
-            user_email=row[3]
-            video_type=row[4]
-            video_title=row[5]
-            video_description=row[6]
-            video_allow_downloading=row[7]
-            video_is_draft=row[8]
-            video_file=row[9]
-            
-            # print("%s %s %s %s %s %s %s %s %s %s" % (username, user_first_name, user_last_name, user_email, video_type, video_title, video_description, video_allow_downloading, video_is_draft, video_file))
-            
-
-            
-            # TEST IF USER EXIST
-            payload_search_user={
-                "username": username
-            }
-            
-            response = requests.get(config.POD_API_USERS, headers=headers_json, params=payload_search_user)
-            if(response.status_code != 200):
-                print("ERROR Test User exists [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
-            else:
-                result = json.loads(response.content.decode("utf-8"))
-                if(result['count'] != 1):
-                    print("User don't exists [%s]" % (username))
-                    
-                    # CREATE USER
-                    payload_create_user={
-                        "username": username,
-                        "first_name": user_first_name,
-                        "is_staff": "true",
-                        "last_name": user_last_name,
-                        "email": user_email,
-                        "groups": []
-                    }
-                    
-                    response = requests.post(config.POD_API_USERS, headers=headers_json, data=json.dumps(payload_create_user))
-                    if(response.status_code != 201):
-                        print("ERROR Create User [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
-                    else:
-                        result = json.loads(response.content.decode("utf-8"))
-                        username=result['username']
-                        user_url=result['url']
-                        print("New user created [%s] [%s]" % (username, user_url))
-                else:
-                    user_url=result['results'][0]['url']        
-                    print("User already exists [%s] [%s]" % (username, user_url))
-
-            # INSERT NEW VIDEO
-            stream_video_file = open(video_file, 'rb')
-            name_video_file = os.path.basename(video_file)
-            
-            multipart_data = MultipartEncoder(
-                fields={
-                        'owner': user_url, 
-                        'type': config.VIDEO_TYPE_BASE+video_type+"/",
-                        'title': video_title,
-                        'description': video_description,
-                        'allow_downloading': video_allow_downloading,
-                        'is_draft': video_is_draft,
-                        'sites': config.VIDEO_SITE,
-                        'video': (name_video_file, stream_video_file, 'text/plain')            
-                       }
-            )
-
-            headers_multipart=headers_json
-            headers_multipart['Content-Type']=multipart_data.content_type
-            response = requests.post(config.POD_API_UPLOAD_VIDEO, headers=headers_multipart, data=multipart_data)
-            if(response.status_code != 201):
-                print("ERROR Insert video [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
-            else:
-                result = json.loads(response.content.decode("utf-8"))
-                slug = result['slug']
-                print("Insert video [USER:%s] [FILE:%s] [SLUG:%s]" % (username, video_file, slug))
+try:
+    with open(inputCsvFile, newline='') as csvfile:
+        reader = csv.reader(csvfile, delimiter=',', quotechar='|')
+        for row in reader:
+            if(row[0].startswith("#") != True):
+                username=row[0]
+                video_type=row[1]
+                video_title=row[2]
+                video_description=row[3]
+                video_allow_downloading=row[4]
+                video_is_draft=row[5]
+                video_file=row[6]
                 
-                # LAUNCH VIDEO ENCODE
-                payload_encode_video={
-                    "slug": slug
+                # print("%s %s %s %s %s %s %s" % (username,  video_type, video_title, video_description, video_allow_downloading, video_is_draft, video_file))
+                
+                
+                # TEST IF USER EXIST
+                payload_search_user={
+                    "username": username
                 }
-                response = requests.get(config.POD_API_LAUNCH_ENCODE, headers=headers_json, params=payload_encode_video)
+                
+                response = requests.get(config.POD_API_USERS, headers=headers_json, params=payload_search_user)
                 if(response.status_code != 200):
-                    print("ERROR Launch encode video [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                    print("ERROR Test User exists [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
                 else:
-                    print("Encode video is launch [USER:%s] [FILE:%s] [SLUG:%s]" % (username, video_file, slug))
-            
+                    result = json.loads(response.content.decode("utf-8"))
+                    if(result['count'] != 1):                    
+                        print("User not found [%s] [%s]" % (username, video_file))
+                        
+                    else:
+                        # print(result)
+                        user_url=result['results'][0]['url']
+
+                        # INSERT NEW VIDEO
+                        stream_video_file = open(video_file, 'rb')
+                        name_video_file = os.path.basename(video_file)
+                        
+                        multipart_data = MultipartEncoder(
+                            fields={
+                                    'owner': user_url, 
+                                    'type': config.VIDEO_TYPE_BASE+video_type+"/",
+                                    'title': video_title,
+                                    'description': video_description,
+                                    'allow_downloading': video_allow_downloading,
+                                    'is_draft': video_is_draft,
+                                    'sites': config.VIDEO_SITE,
+                                    'video': (name_video_file, stream_video_file, 'text/plain')            
+                                   }
+                        )
+
+                        headers_multipart=headers_json
+                        headers_multipart['Content-Type']=multipart_data.content_type
+                        response = requests.post(config.POD_API_UPLOAD_VIDEO, headers=headers_multipart, data=multipart_data)
+                        if(response.status_code != 201):
+                            print("ERROR Insert video [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                        else:
+                            result = json.loads(response.content.decode("utf-8"))
+                            slug = result['slug']
+                            print("Insert video [USER:%s] [FILE:%s] [SLUG:%s]" % (username, video_file, slug))
+                            
+                            # LAUNCH VIDEO ENCODE
+                            if(config.LAUNCH_ENCODE_AFTER_PUT):
+                                payload_encode_video={
+                                    "slug": slug
+                                }
+                                response = requests.get(config.POD_API_LAUNCH_ENCODE, headers=headers_json, params=payload_encode_video)
+                                if(response.status_code != 200):
+                                    print("ERROR Launch encode video [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                                else:
+                                    print("Encode video is launch [USER:%s] [FILE:%s] [SLUG:%s]" % (username, video_file, slug))
+except FileNotFoundError as e:
+    print('File [%s] not found' % inputCsvFile)               
  
\ No newline at end of file
diff --git a/putVideos.py b/putVideos.py
new file mode 100644
index 0000000..ad0a579
--- /dev/null
+++ b/putVideos.py
@@ -0,0 +1,92 @@
+import requests
+from requests_toolbelt.multipart.encoder import MultipartEncoder
+import csv
+import sys
+import json
+import os
+
+import config
+
+headers_json={
+    'Content-Type':'application/json',
+    'Authorization': 'Token {}'.format(config.POD_TOKEN)
+}
+
+try:
+    inputCsvFile=sys.argv[1]
+except IndexError as e:
+    sys.exit('No file name in input param') 
+    
+# READ CSV FILE
+try:
+    with open(inputCsvFile, newline='') as csvfile:
+        reader = csv.reader(csvfile, delimiter=',', quotechar='|')
+        for row in reader:
+            if(row[0].startswith("#") != True):
+                username=row[0]
+                video_type=row[1]
+                video_title=row[2]
+                video_description=row[3]
+                video_allow_downloading=row[4]
+                video_is_draft=row[5]
+                video_file=row[6]
+                
+                # print("%s %s %s %s %s %s %s" % (username,  video_type, video_title, video_description, video_allow_downloading, video_is_draft, video_file))
+                
+                
+                # TEST IF USER EXIST
+                payload_search_user={
+                    "username": username
+                }
+                
+                response = requests.get(config.POD_API_USERS, headers=headers_json, params=payload_search_user)
+                if(response.status_code != 200):
+                    print("ERROR Test User exists [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                else:
+                    result = json.loads(response.content.decode("utf-8"))
+                    if(result['count'] != 1):                    
+                        print("User not foung [%s] [%s]" % (username))
+                        
+                    else:
+                        # print(result)
+                        user_url=result['results'][0]['url']
+
+                        # INSERT NEW VIDEO
+                        stream_video_file = open(video_file, 'rb')
+                        name_video_file = os.path.basename(video_file)
+                        
+                        multipart_data = MultipartEncoder(
+                            fields={
+                                    'owner': user_url, 
+                                    'type': config.VIDEO_TYPE_BASE+video_type+"/",
+                                    'title': video_title,
+                                    'description': video_description,
+                                    'allow_downloading': video_allow_downloading,
+                                    'is_draft': video_is_draft,
+                                    'sites': config.VIDEO_SITE,
+                                    'video': (name_video_file, stream_video_file, 'text/plain')            
+                                   }
+                        )
+
+                        headers_multipart=headers_json
+                        headers_multipart['Content-Type']=multipart_data.content_type
+                        response = requests.post(config.POD_API_UPLOAD_VIDEO, headers=headers_multipart, data=multipart_data)
+                        if(response.status_code != 201):
+                            print("ERROR Insert video [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                        else:
+                            result = json.loads(response.content.decode("utf-8"))
+                            slug = result['slug']
+                            print("Insert video [USER:%s] [FILE:%s] [SLUG:%s]" % (username, video_file, slug))
+                            
+                            # LAUNCH VIDEO ENCODE
+                            payload_encode_video={
+                                "slug": slug
+                            }
+                            response = requests.get(config.POD_API_LAUNCH_ENCODE, headers=headers_json, params=payload_encode_video)
+                            if(response.status_code != 200):
+                                print("ERROR Launch encode video [%s] : [CODE:%s] [MSG:%s]" % (username,response.status_code, json.loads(response.content.decode("utf-8"))))
+                            else:
+                                print("Encode video is launch [USER:%s] [FILE:%s] [SLUG:%s]" % (username, video_file, slug))
+except FileNotFoundError as e:
+    print('File [%s] not found' % inputCsvFile)               
+ 
\ No newline at end of file
diff --git a/usersList.sample.csv b/usersList.sample.csv
new file mode 100644
index 0000000..b625f60
--- /dev/null
+++ b/usersList.sample.csv
@@ -0,0 +1,2 @@
+#username,user_first_name,user_last_name,user_email
+bond@esup-portail.org,James,Bond,James.Bond@esup-portail.org
\ No newline at end of file
diff --git a/videosList.sample.csv b/videosList.sample.csv
new file mode 100644
index 0000000..7d16305
--- /dev/null
+++ b/videosList.sample.csv
@@ -0,0 +1,2 @@
+#username,video_type,video_title,video_description,video_allow_downloading,video_is_draft,video_file
+bond@esup-portail.org,1,Titre de test,Description de test,false,true,./videos/test1.mp4
-- 
GitLab