Задержка SDK Google Admin - PullRequest
0 голосов
/ 26 июня 2019

У меня возникают задержки при выполнении запросов к API администратора Google.

def get_user(self, email: str) -> dict:
    res = (
        self.service.users()
        .list(
            domain="gmail.com",
            projection="full",
            query="email={0}".format(email),
        )
        .execute()
    )

    if "users" not in res or len(res["users"]) != 1:
        msg = "Could not find user %s" % email
        logging.error(msg)
        raise GoogleAdminNonExistentUser(msg)

    return res["users"][0]

def create_user(
    self,
    email: str,
    first_name: str,
    last_name: str,
    org_unit_path: str,
    manager_email: str,
) -> dict:
    user_info = {...}

    try:
        res = self.service.users().insert(body=user_info).execute()
        return res
    except HttpError as error:
        exc = self._generate_error(error)
        logger.exception(exc.message)
        raise exc

Возьмем, к примеру, эти два вызова.В моем наборе тестов я делаю тест для создания пользователя и немедленного его удаления.В следующем тесте я создаю того же пользователя и обновляю пользовательские атрибуты.Затем я проверяю, что эти атрибуты были установлены.

test_create_delete()
    create_user(EMAIL)
    delete_user(EMAIL)

test_create_update()
    create_user(EMAIL) # This will variably error out if the delete_user from the last request hasn't replicated throughout Google
    update_user(EMAIL, UPDATE_INFO)
    user = get_user()
    # This assertion will variably fail if get_user() fetches old data
    assert the update info is in user

Я мог бы засорять тесты засыпанием, но время сборки важно.Есть ли способ заставить API администратора Google возвращать самые свежие данные?

1 Ответ

0 голосов
/ 29 июня 2019

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

...