Nothingness
Nothingness

Reputation: 27

requests.packages.urllib3.util.retry import error in Python

I'm using pipenv with Python 3.9.
The following code makes an error on the line 13; from requests.packages.urllib3.util.retry import Retry.
The error message is; Import "requests.packages.urllib3.util.retry" could not be resolved. No quick fixes available.
But I have no clue what wrong is exactly. Everything is imported properly though.

import requests
from random import choice
import wget
from moviepy.editor import *
import urllib.request
from PIL import Image as IMG
import os
from keys import *
from datetime import datetime, date
from csv import reader
import pyttsx3
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry


session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)


class DidYouKnow:
    def __init__(self):
        self.category = None
        self.question = None
        self.answer = None
        self.searchKey = None
        self.color = choice(['26,188,156', '22,160,133', '46,204,113', '39,174,96', '52,152,219', '41,128,185', '155,89,182',
                            '142,68,173', '52,73,94', '44,62,80', '241,196,15', '243,156,18', '230,126,34', '211,84,0', '231,76,60', '192,57,43'])
    
    def __init__(self, category, question, answer, searchKey):
        self.category = category
        self.question = question
        self.answer = answer
        self.searchKey = searchKey
        self.color = choice(['26,188,156', '22,160,133', '46,204,113', '39,174,96', '52,152,219', '41,128,185', '155,89,182',
                            '142,68,173', '52,73,94', '44,62,80', '241,196,15', '243,156,18', '230,126,34', '211,84,0', '231,76,60', '192,57,43'])

    def generateVideo(self):
        backgrounds = []
        try:
            # Download a Background Video

            videos = session.get(f'https://pixabay.com/api/videos/?key={API_KEY}&q={self.searchKey}&min_width=1920&min_height=1080')
            try:
                videos = videos.json()
            except Exception as e:
                pass
            if videos["total"] <= 0:
                print(
                    f'Cannot find background video for {self.searchKey}, Adding random Background')
                videos = session.get(f'https://pixabay.com/api/videos/?key={API_KEY}&category=backgrounds&min_width=1920&min_height=1080')
                videos = videos.json()

            # sorting videos to select best quality videos
            for video in videos["hits"]:
                for size in video["videos"]:
                    for quality in video["videos"][size]:
                        if video["videos"][size][quality] == 1920:
                            # print()
                            backgrounds.append(video["videos"][size])

            background = choice(backgrounds)
            wget.download(
                background["url"], 'temp.mp4')

            # Editing Video
            try:
                self.editVideo()
            except Exception as err:
                print("Editing Video", err)
        except Exception as e:
            print("Generating Video", e)

    def editVideo(self):
        try:
            baseClip = VideoFileClip(
            'temp.mp4')

            Clip = baseClip.set_duration(16)
            Clip = Clip.rotate(90)
            # Clip = Clip.resize((1080,1920))

            heading_clip = TextClip(
                str(self.category), fontsize=100, color='white', bg_color=f'rgb({self.color})', font='Swis721-Cn-BT-Bold-Italic', align='center', kerning=6, transparent=True)
            heading_clip = heading_clip.set_pos(
                'top').set_duration(16).margin(20)

            question_clip = TextClip(
                str(self.question), fontsize=130, color='white', stroke_color='black', stroke_width=5, font='tahoma-bold', align='center', method='caption', bg_color=f'rgba({self.color},0.5)')
            question_clip = question_clip.set_pos(
                'center').set_duration(10).margin(10)

            answer_clip = TextClip(
                str(self.answer), fontsize=130, color=f'rgb({self.color})', stroke_color='black', stroke_width=5, font='Rockwell-Extra-Bold', align='center', method='caption', bg_color='black')
            answer_clip = answer_clip.set_pos(
                'center').set_duration(6).margin(10, color=(236, 240, 241))

            print("trying to concatenate")

            Fact = concatenate_videoclips(
                [question_clip, answer_clip], method='chain')

            Clip = CompositeVideoClip(
                [Clip, heading_clip, Fact.set_position("center")])


            #Generate Both Audio for Question And Answer
            pyttsx3Driver = "sapi5"
            if os.name == "nt":
                pyttsx3Driver = "sapi5"
                print(f"os windown, using sapi5 as Voice Generator Driver")
            elif os.name == "posix":
                pyttsx3Driver = "espeak"
                print(f"os linux, using espeak as Voice Generator Driver")
            else:
                pyttsx3Driver = "nsss"
                print(f"os mac, using nsss as Voice Generator Driver")

            engine = pyttsx3.init()
            voices = engine.getProperty('voices')
            engine.setProperty('voice', choice(voices).id)
            rate = engine.getProperty('rate')
            engine.setProperty('rate', 125)
            engine.save_to_file(self.question, 'question_audio.mp3')
            engine.runAndWait()
            engine.save_to_file(self.answer, 'answer_audio.mp3')
            engine.runAndWait()

            QuestionAudio = CompositeAudioClip(
                [AudioFileClip('question_audio.mp3'), AudioFileClip(BACKGROUNDAUDIOFILE)])
            QuestionAudio.set_duration(10)
            QuestionAudio = CompositeAudioClip([QuestionAudio])

            AnswerAudio = CompositeAudioClip(
                [AudioFileClip('answer_audio.mp3')])
            AnswerAudio.set_duration(6)

            audio = concatenate_audioclips([QuestionAudio, AnswerAudio])
            print(f'Audio Duration = {audio.duration}')

            Clip.audio = audio
            Clip.write_videofile(
                f'output/{self.question}.mp4')
            Clip.close()
            baseClip.close()
            os.remove('temp.mp4')
            os.remove('backdrop.jpeg')
            os.remove('background.jpeg')
        except Exception as e:
            print("Error at editing Video:",e)

    def generatePromoPic(self):
        try:
            ims = session.get(f'https://pixabay.com/api/?key={API_KEY}&q={self.searchKey}&image_type=photo&orientation=horizontal&order=popular')
            try:
                ims = ims.json()
            except Exception as E:
                print(E)

            if ims["total"] <= 0:
                print(f'Cannot find image result for {self.searchKey}, Adding random Pic')
                ims = session.get(f'https://pixabay.com/api/?key={API_KEY}&image_type=photo&orientation=horizontal&order=popular')
                try:
                    ims = ims.json()
                except Exception as E:
                    print(E)
            photo = choice(ims["hits"])
            print(f'Downloading: {photo["largeImageURL"]}')
            opener = urllib.request.build_opener()
            opener.addheaders = [
                ('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
            urllib.request.install_opener(opener)

            # setting filename and image URL
            filename = 'background.jpeg'
            image_url = photo["largeImageURL"]

            # calling urlretrieve function to get resource
            urllib.request.urlretrieve(image_url, filename)

            size = (1920,1920)
            outfile = "backdrop.jpeg"
            im = IMG.open(filename)
            im.resize(size, IMG.ANTIALIAS)
            im.save(outfile, "JPEG")

            im = IMG.open(outfile)
            print(im.size)
            width, height = im.size

            imageHeightRemaining = width - height

            textheight = 200 if imageHeightRemaining < 200 else 300

            BGCOLOR = choice(['#1ABC9C', '#16A085', '#2ECC71', '#27AE60', '#3498DB', '#2980B9', '#9B59B6',
                             '#8E44AD', '#34495E', '#2C3E50', '#F1C40F', '#F39C12', '#E67E22', '#D35400', '#E74C3C', '#C0392B'])
            Title = TextClip(
                str(self.category), color='white', font='tahoma-bold', align='center', method='caption', size=(1080, 100), bg_color='black').set_position("top")
            Title = Title.margin(bottom=20)
            thumbnail = TextClip(
                str(self.question), color='white', bg_color=BGCOLOR, font='tahoma-bold', align='center', method='caption', size=(1080, textheight)).set_pos(('left', 'bottom'))
            thumbnail = thumbnail.margin(top=10, bottom=20)

            back = ImageClip(outfile)
            back = back.margin(top=20, bottom=20, left=20, right=20)

            bigBack = TextClip(
                ' ', color='black', bg_color='black', font='tahoma-bold', align='center', method='caption', size=(1080, 720)).set_pos(('left', 'bottom'))

            final = CompositeVideoClip(
                [bigBack, back.set_position("top"), thumbnail.set_position("bottom"), Title.set_position("top")])
            final.save_frame(f'output/{self.question}.png', t=1)
            final.close()
        except Exception as e:
            print("GeneratePromoPic", e)

def startProcess(category, question, answer, searchKey):
    didyouknow = DidYouKnow(category, question, answer, searchKey)
    if not os.path.exists('output'):
        os.makedirs('output')
    didyouknow.generatePromoPic()
    print("PromoPic Generated \n")
    didyouknow.generateVideo()
    print("Video Generated \n")


with open('data.csv', 'r',) as read_obj:
    csv_dict_reader = reader(read_obj)
    next(csv_dict_reader)
    for row in csv_dict_reader:
        print(row)
        startProcess(row[0], row[1], row[2], row[3])

Upvotes: 2

Views: 1254

Answers (1)

Gajanan
Gajanan

Reputation: 464

requests no longer has vendored modules in request.package you will need to reference urllib3 directly

from urllib3.util import Retry

Upvotes: 3

Related Questions