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