Дополнительные аргументы в Flask grequests hook - PullRequest
0 голосов
/ 06 сентября 2018

У меня возникла проблема при передаче дополнительного параметра в greques с помощью хука, он работает в автономном приложении (без фляги), но не с флягой (встроенный сервер фляги) Вот мой фрагмент кода.

self.async_list = []
for url in self.urls:
   self.action_item = grequests.get(url, hooks = {'response' : [self.hook_factory(test='new_folder')]}, proxies={ 'http': 'proxy url'},timeout=20)
   self.async_list.append(self.action_item)

grequests.map(self.async_list)

def hook_factory(self, test, *factory_args, **factory_kwargs):
        print (test + "In start of hook factory") #this worked and I see test value is printing as new_folder
        def do_something(response, *args, **kwargs):
            print (test + "In do something") #This is not working hence I was not able to save this response to a newly created folder. 

            self.file_name = "str(test)+"/"
            print ("file name is " + self.file_name)
            with open(REL_PATH + self.file_name, 'wb') as f:    
                    f.write(response.content)
            return None
        return do_something

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 18 сентября 2018

Пытаясь ответить на мой собственный вопрос, после дальнейшего анализа не было ничего плохого в приведенном выше коде, по какой-то причине я не получал свои данные сеанса, которые находятся в request_ctx_stack.top. Но те же данные сеанса были доступны в моем h_request_ctx_stack._local, не знаю причину. Но я смог получить данные из h_request_ctx_stack._local вместо _request_ctx_stack.top только для этого хука. После того как я сделал это изменение смог выполнить тот же хук без каких-либо проблем.

...