Функции Azure в Python: проблема с версией и ошибка «Требуется дуплексный режим»Python

Программы на Python
Anonymous
Функции Azure в Python: проблема с версией и ошибка «Требуется дуплексный режим»

Сообщение Anonymous »

В рамках моей работы по разработке данных я унаследовал некоторые функции Azure, написанные на Python некоторое время назад. Теперь мне нужно обновить их, чтобы отразить измененные учетные данные, но я постоянно сталкиваюсь с двумя проблемами.
Первая из них заключается в том, что удаленная версия функции — «~4». В моей локальной копии используется «~3». Что касается других вопросов, которые я нашел, я отредактировал файл settings.json в папке .vscode:
[img]https://i. sstatic.net/2jTKg7M6.png[/img]

В частности, я изменил следующую строку:
"azureFunctions.projectRuntime": "~3",

в
"azureFunctions.projectRuntime": "~4",

Однако всякий раз, когда я пытаюсь развернуть, значение сбрасывается до 3, независимо от сохранения файла. Я не уверен, где это изменить, чтобы оно сохранилось. Я также попробовал установить его в «Палитре команд» -> «Python: выбрать интерпретатор».
Я подозреваю, что это не помеха, поскольку код VS позволяет мне щелкнуть мышью и «игнорировать» "ошибка (думаю). После выбора функции для обновления и игнорирования нескольких других предупреждений о ее перезаписи (и одного из них, спрашивающего, хочу ли я инициализировать функцию для развертывания VS Code), он запускает приведенный ниже вариант «Дуплексная опция требуется при отправке тела».
Изображение

Я нашел многочисленные сообщения на SO и других сайтах, которые рекомендуют добавлять «duplex»: «half» или «duplex true», и это намекает на то, что они каким-то образом связаны с node.js (что, насколько мне известно, мы не используем). Я также наткнулся на ветку SO, в которой говорилось, что ошибка может быть вызвана тем, что запрошенный токен не поступает вовремя и делает вызов асинхронным.
Мне нравится C#, но я очень новичок. на Python, поэтому я надеюсь, что кто-нибудь сможет взглянуть на код и сообщить мне, что/где я могу это исправить, поскольку пока мои попытки не дали никаких результатов.
Наш код:
import logging
import pandas as pd
import azure.functions as func
import time
import io
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File

class Office():
'''
Uses the Office365 API and accesses the the Growth team sharepoint to extract the content
of a specific file into a pandas dataframe. The extracted datetime is also added to the dataframe
for uses in the table.

For now this class only reads in 1 specific file.
For future: Make it so it can take any xlsx file in any sharepoint.
'''
def __init__(self, Secret):
self.status_code = 200
self.site_url = ''
username = ''
password = str(Secret)
#Note Points to specific file now. TODO: Update to take any fname from Json.
self.relative_url = ''
app_principal = {
'client_id': username,
'client_secret': password,
}
try: # setting up connection
self.context_auth = AuthenticationContext(url = self.site_url)
self.context_auth.acquire_token_for_app(client_id = app_principal['client_id'], client_secret = app_principal['client_secret'])
self.ctx = ClientContext(self.site_url, self.context_auth)
self.status_code = 200
except:
self.status_code = 403

def getData(self):
'''
Reads the file content in a byte stream format.
Uses the openpyxl to reformat this to be readeble for pandas.
'''
if self.status_code != 200:
return None, self.status_code
response = File.open_binary(self.ctx, self.relative_url) # gets a byte steam.
self.status_code = response.status_code
if self.status_code != 200:
return pd.DataFrame({'A' : []}), self.status_code #if error returns empty df.

bytes_file_obj = io.BytesIO()
bytes_file_obj.write(response.content)
bytes_file_obj.seek(0) #set file object to start
df = pd.read_excel(bytes_file_obj, engine = 'openpyxl')
return df, self.status_code

def main(req: func.HttpRequest) -> func.HttpResponse:
now = time.strftime("%Y-%m-%d-%H:%M:%S") # Get extract time.
logging.info('Python HTTP trigger function processed a request.')

ClientSecret = req.params.get('Sharepoint-ClientSecret')
if not ClientSecret:
try:
req_body = req.get_json()
except ValueError:
ClientSecret = ''
pass
else:
ClientSecret = req_body.get('value')

if ClientSecret:
now = time.strftime("%Y-%m-%d-%H:%M:%S") # Get extract time.
Of365 = Office(Secret = ClientSecret)
df, statusCode = Of365.getData()
# Some error handeling.
if statusCode == 403:
return func.HttpResponse(f"Authentication with secret key failed.\nStatus Code {statusCode}.", status_code = statusCode)
elif statusCode == 404:
return func.HttpResponse(f"File not found.\nStatus Code {statusCode}.", status_code = statusCode)
elif statusCode != 200:
return func.HttpResponse(f"Sometihng Failed.\nStatus Code {statusCode}", status_code = statusCode)
else:
logging.info(
'Success in connecting to Sharepoint API and generating {0} object class'.format(Office.__class__.__name__))
Date_Extracted = [now]*df.shape[0] # Created vector with time.
df ['Date_Extracted'] = Date_Extracted
return func.HttpResponse(df.to_json(orient="table"), status_code = 200)
else:
return func.HttpResponse(
"Bad Request: did not get any data.",
status_code=400
)


Подробнее здесь: https://stackoverflow.com/questions/787 ... ired-error

Вернуться в «Python»