Return User-Agent ~ "name/version language/version interpreter/version os/version". Args: name: Package name, primary UA component name. version: Package version, primary UA component version. include_platform_tags: Look for, query and
(name: Optional[str] = None,
version: Optional[str] = None,
*,
include_platform_tags: bool = True)
| 111 | |
| 112 | |
| 113 | def user_agent(name: Optional[str] = None, |
| 114 | version: Optional[str] = None, |
| 115 | *, |
| 116 | include_platform_tags: bool = True) -> str: |
| 117 | """Return User-Agent ~ "name/version language/version interpreter/version os/version". |
| 118 | |
| 119 | Args: |
| 120 | name: |
| 121 | Package name, primary UA component name. |
| 122 | version: |
| 123 | Package version, primary UA component version. |
| 124 | include_platform_tags: |
| 125 | Look for, query and include externally-contributed platform tags |
| 126 | (via ``dwave.common.platform.tags`` entrypoint). |
| 127 | See :func:`dwave.cloud.utils.get_platform_tags`. |
| 128 | |
| 129 | Return: |
| 130 | User-Agent string composed of "key/value" pairs (joined with a space |
| 131 | character), for following components: package, language, interpreter, |
| 132 | machine, system and platform. |
| 133 | """ |
| 134 | |
| 135 | def _interpreter(): |
| 136 | name = platform.python_implementation() |
| 137 | version = platform.python_version() |
| 138 | if name == 'PyPy': |
| 139 | version = '.'.join(map(str, sys.pypy_version_info[:3])) |
| 140 | full_version = [version] |
| 141 | is_64bits = sys.maxsize > 2**32 |
| 142 | if is_64bits: |
| 143 | full_version.append('64bit') |
| 144 | return name, "-".join(full_version) |
| 145 | |
| 146 | tags = [] |
| 147 | |
| 148 | if name and version: |
| 149 | tags.append((name, version)) |
| 150 | |
| 151 | tags.extend([ |
| 152 | ("python", platform.python_version()), |
| 153 | _interpreter(), |
| 154 | ("machine", platform.machine() or 'unknown'), |
| 155 | ("system", platform.system() or 'unknown'), |
| 156 | ("platform", platform.platform() or 'unknown'), |
| 157 | ]) |
| 158 | |
| 159 | # add platform-specific tags |
| 160 | if include_platform_tags: |
| 161 | tags.extend(platform_tags()) |
| 162 | |
| 163 | return ' '.join("{}/{}".format(name, version) for name, version in tags) |
| 164 | |
| 165 | |
| 166 | # defined as a function rather than constant because env might change during runtime |