Задача процесса выполнения служб SSIS для сценария Python для API с OAuth2 - доступ к файлу с сохраненным токеном запрещен - PullRequest
2 голосов
/ 05 марта 2019

У меня странная проблема, и я не знаю, что еще проверить.

Краткое описание ситуации:

  • работает на Windows Server 2016 в качестве администратора, поэтому не должно быть проблем с доступом
  • разработал некоторый скрипт на Python для получения данных из Google Analytics, используя в качестве основы этот пример (но получая данные только из одного аккаунта и только за один промежуток времени)
  • успешно работает: в первый раз код выполнения API открывает браузер GA Web Site, запрашивает авторизацию и утверждает соединение API, создает файл analytics.dat с токеном подключения магазина внутри
  • сразу после этого все последующие исполнения скрипта успешно получают информацию от GA и сохраняют ее в файле
  • но когда я пытаюсь добавить в пакет служб SSIS то же выполнение скрипта, что и шаг Execute Process Task, и выполняю этот шаг (Visual Studio открывается под той же учетной записью администратора с тем же активным сеансом Windows) - он снова запрашивает авторизацию в Интернете -сайт, после успешной авторизации я вижу сообщение The authentication flow has completed в браузере, закрываю его, но получаю ошибку выполнения скрипта Python:

C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DTS \ binn> C: \ Python27 \ python.exe C: \ BI \ API \ Python_GoogleAnalytics_Reporting \ v3_api_analytics \ google_analytics_api_v3_10krow_nosampling_multiple_profiles.py C: \ python27 \ Lib \ сайт-пакеты \ oauth2client_helpers.py: 255: UserWarning: Не удается получить доступ к analytics.dat: Нет такого файла или каталога
warnings.warn (_MISSING_FILE_MESSAGE.format (имя файла))

Ваш браузер открыт для посещения:

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics.readonly&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&response_type=code&client_id=xxx.apps.googleusercontent.com&access_type=offline

Если ваш браузер находится на другом компьютере, выйдите и снова запустите приложение с параметром командной строки

--noauth_local_webserver

Traceback (последний вызов был последним): File "C: \ BI \ API \ Python_GoogleAnalytics_Reporting \ v3_api_analytics \ google_analytics_api_v3_10krows_nosampling_multiple_profiles.py", строка 172, в if name == ' main ': main (sys.argv) Файл "C: \ BI \ API \ Python_GoogleAnalytics_Reporting \ v3_api_analytics \ google_analytics_api_v3_10krow_nosampling_multiple_profiles.py" линия 54, в основном сфера = 'https://www.googleapis.com/auth/analytics.readonly')
Файл "C: \ Python27 \ lib \ site-packages \ googleapiclient \ sample_tools.py", строка 93, в init credentials = tools.run_flow (поток, хранилище, флаги)
Файл "C: \ Python27 \ lib \ site-packages \ oauth2client_helpers.py", строка 133, в positional_wrapper возврат завернутый (* args, ** kwargs)
Файл "C: \ Python27 \ lib \ site-packages \ oauth2client \ tools.py", строка 247, в run_flow storage.put (удостоверение)
Файл "C: \ Python27 \ lib \ site-packages \ oauth2client \ client.py", строка 421, в положил self.locked_put (учетные данные)
Файл "C: \ Python27 \ lib \ site-packages \ oauth2client \ file.py", строка 83, в locked_put self._create_file_if_needed ()
Файл "C: \ Python27 \ lib \ site-packages \ oauth2client \ file.py", строка 70, в _create_file_if_needed open (self._filename, 'a + b'). close () IOError: [Errno 13] Отказано в доступе: 'analytics.dat'

  • Я пытался удалить этот файл analytics.dat - но после этого получал ту же ошибку.
  • Я выполнил скрипт Python .bat файлом с командой внутри C:\Python27\python.exe C:\BI\API\Python_GoogleAnalytics_Reporting\v3_api_analytics\google_analytics_api_v3_10krows_nosampling_multiple_profiles.py. Выполнение .bat itselft работает нормально, но выполнение того же .bat из пакета служб SSIS, что и шаг Execute Process Task - возвращает ошибки выше
  • Кроме того, раньше была такая же проблема с Bing Ads API . Но там я временно исправил это, закомментировав строку в коде с перезаписью обновленной информации о токене в файл: в Bing Ads он действителен долгое время до истечения срока его действия. Но в GA API этот токен в файле истекает через 1 час, после чего этот файл необходимо перезаписать.
  • также я попытался добавить в сценарии несколько отпечатков, чтобы показать, под каким сценарием учетной записи службы выполняется пакет SSIS в Visual Studio (с использованием print(os.getlogin())) - но, как и ожидалось, он показывает ту же учетную запись администратора, под которой я работаю надСервер ...

Итак, я не понимаю, почему я получаю такой Доступ запрещен к файлу с сохраненной проблемой токена ... В свойствах файла владелец - тот жеУчетная запись администратора Windows, в сеансе которой я открываю Visual Studio для выполнения шага в пакете DTSX.

Не могли бы вы помочь мне найти проблему, пожалуйста?

1 Ответ

2 голосов
/ 06 марта 2019

Я нашел проблему. И это было связано со свойствами шага Execute Process Task пакета служб SSIS ...

Как я заметил выше, я выполнил скрипт Python .bat файлом с командой внутри: C:\Python27\python.exe C:\BI\API\Python_GoogleAnalytics_Reporting\v3_api_analytics\google_analytics_api_v3_10krows_nosampling_multiple_profiles.py. Само выполнение .bat работало нормально, но выполнение того же .bat из пакета служб SSIS, что и шаг Execute Process Task - возвращает вышеуказанные ошибки.

В журналах ошибок в начале мы видим:

C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DTS \ binn > C:\Python27\python.exe C:\BI\API\Python_GoogleAnalytics_Reporting\v3_api_analytics\google_analytics_api_v3_10krows_nosampling_multiple_profiles.py

C: \ Python27 \ lib \ site-packages \ oauth2client_helpers.py: 260: Предупреждение пользователя: Не удается получить доступ к analytics.dat: Нет такого файла или каталога

warnings.warn (_MISSING_FILE_MESSAGE.format (имя файла))

Что говорит изначально, что в рабочей папке скрипта нет файла analytics.dat. Но я ожидал, что скрипт выполняется в той же папке, где он находится, и там уже был файл C:\BI\API\Python_GoogleAnalytics_Reporting\v3_api_analytics\analytics.dat

Но затем я заметил, что на первом месте в этом сообщении (я отметил его как полужирный ) находится рабочая папка выполнения внешнего скрипта, скрипт запускается в папке SSIS.

Я обнаружил , что когда процесс запускается из служб SSIS, он не запускается из той же папки, что и расположенный исполняемый файл .bat. Чем отличается .bat от прямого исполнения файла.

Итак, необходимо дополнительно указать свойство рабочей папки шага Execute Process Task пакета служб SSIS.

Я установил такое значение свойства:

Рабочий каталог: C:\BI\API\Python_GoogleAnalytics_Reporting\v3_api_analytics\ enter image description here

И все отлично работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...