Где я могу найти задокументированные функции библиотеки запросов Python **параметры kwargs?

Например, из https://docs.python-requests.org/en/latest/api/#requests.cookies.RequestsCookieJar.set:

set(name, value, **kwargs)
Dict-like set() that also supports optional domain and path 
args in order to resolve naming collisions from using one cookie jar over multiple domains.

Где я могу найти информацию о том, какие еще аргументы функция принимает в качестве **kwargs?

Я имею в виду эти аргументы, domain, path, expires, max_age, secure, httponly. Там это не задокументировано!

Все остальные функции такие, я запутался, что передавать в качестве параметров.

В php.net они правильно описывают все параметры.

Где я могу найти все параметры, которые скрыты за **kwargs?

В этом случае, я думаю, вы просто застряли, нажимая ссылку «[источник]» и отслеживая, что исходный код делает с kwargs. Иногда библиотеки имеют неадекватные документы.

user2357112 20.02.2023 23:06
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
3
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Php.net описывает параметры функций, которые являются частью языка PHP и его стандартных библиотек.

Библиотека, о которой вы спрашиваете, requests, является сторонней библиотекой и не является частью языка Python или его стандартных библиотек. Вы обнаружите, что стандартные библиотеки, такие как urllib, на самом деле очень хорошо документированы, например urllib.request здесь: https://docs.python.org/3/library/urllib.request.html#module-urllib.request

Однако некоторые сторонние библиотеки гораздо более удобны для пользователя, и requests является популярным примером этого. Однако документация зависит от разработчиков, поэтому вам следует попытаться связаться с ними по этому поводу. Не вините язык, если только вы не хотите винить его в том, что он не имеет достаточно хороших стандартных библиотек (и тогда есть некоторые причины).

Как указано в комментариях к вашему вопросу, исходный код для requests находится в свободном доступе, поэтому вы можете узнать, какие **kwargs ожидаются и как они там используются: https://docs.python-requests.org/en/ last/_modules/requests/cookies/#RequestsCookieJar.set

Обратите внимание, что domain и path используются явно, а остальные передаются как **kwargs в create_cookie(), если в качестве значения не было передано Morsel.

Прошу прощения, я не виню python, я просто запутался и не понимаю, как получить эти параметры.

Abhijit 20.02.2023 23:48

Это нормально, я не говорю, что вы - просто вы не должны, все хорошо :).

Grismar 21.02.2023 01:04
Ответ принят как подходящий

По моему опыту, чтение исходного кода многих библиотек с открытым исходным кодом решает эту проблему.

Для примера, который вы разместили, исходный код выглядит следующим образом:

def set(self, name, value, **kwargs):
        """Dict-like set() that also supports optional domain and path args in
        order to resolve naming collisions from using one cookie jar over
        multiple domains.
        """
        # support client code that unsets cookies by assignment of a None value:
        if value is None:
            remove_cookie_by_name(
                self, name, domain=kwargs.get("domain"), path=kwargs.get("path")
            )
            return

        if isinstance(value, Morsel):
            c = morsel_to_cookie(value)
        else:
            c = create_cookie(name, value, **kwargs)
        self.set_cookie(c)
        return c

Для python kwargs рассматриваются как словарь (это то, что делает **). В этом случае функция set использует "домен" и "путь" напрямую. Однако есть еще одна функция, которая принимает **kwargs. Это основная цель использования kwargs вместо исправления аргументов.

Если мы углубимся в исходный код create_cookie, мы увидим, какие аргументы ключевых слов допустимы.

def create_cookie(name, value, **kwargs):
    """Make a cookie from underspecified parameters.

    By default, the pair of `name` and `value` will be set for the domain ''
    and sent on every request (this is sometimes called a "supercookie").
    """
    result = {
        "version": 0,
        "name": name,
        "value": value,
        "port": None,
        "domain": "",
        "path": "/",
        "secure": False,
        "expires": None,
        "discard": True,
        "comment": None,
        "comment_url": None,
        "rest": {"HttpOnly": None},
        "rfc2109": False,
    }

    badargs = set(kwargs) - set(result)
    if badargs:
        raise TypeError(
            f"create_cookie() got unexpected keyword arguments: {list(badargs)}"
        )

    result.update(kwargs)
    result["port_specified"] = bool(result["port"])
    result["domain_specified"] = bool(result["domain"])
    result["domain_initial_dot"] = result["domain"].startswith(".")
    result["path_specified"] = bool(result["path"])

    return cookielib.Cookie(**result)

В этом случае разрешены только те ключевые слова, которые описаны в словаре результатов.

Итак, для другой функции я должен загрузить этот пакет и посмотреть исходный код?

Abhijit 20.02.2023 23:34

Многие документы библиотек с открытым исходным кодом имеют кнопку [source] рядом с описанием функции.

Antonio Gonzalez 20.02.2023 23:37

Другие вопросы по теме