MCPcopy Index your code
hub / github.com/mongodb/mongo-python-driver / _truncate_metadata

Function _truncate_metadata

pymongo/pool_options.py:202–254  ·  view source on GitHub ↗

Perform metadata truncation.

(metadata: MutableMapping[str, Any])

Source from the content-addressed store, hash-verified

200
201# See: https://github.com/mongodb/specifications/blob/master/source/mongodb-handshake/handshake.md#limitations
202def _truncate_metadata(metadata: MutableMapping[str, Any]) -> None:
203 """Perform metadata truncation."""
204 if len(bson.encode(metadata)) <= _MAX_METADATA_SIZE:
205 return
206 # 1. Omit fields from env except env.name.
207 env_name = metadata.get("env", {}).get("name")
208 if env_name:
209 metadata["env"] = {"name": env_name}
210 if len(bson.encode(metadata)) <= _MAX_METADATA_SIZE:
211 return
212 # 2. Omit fields from os except os.type.
213 os_type = metadata.get("os", {}).get("type")
214 if os_type:
215 metadata["os"] = {"type": os_type}
216 if len(bson.encode(metadata)) <= _MAX_METADATA_SIZE:
217 return
218 # 3. Omit the env document entirely.
219 metadata.pop("env", None)
220 encoded_size = len(bson.encode(metadata))
221 if encoded_size <= _MAX_METADATA_SIZE:
222 return
223 # 4. Truncate platform.
224 overflow = encoded_size - _MAX_METADATA_SIZE
225 plat = metadata.get("platform", "")
226 if plat:
227 plat = plat[:-overflow]
228 if plat:
229 metadata["platform"] = plat
230 else:
231 metadata.pop("platform", None)
232 encoded_size = len(bson.encode(metadata))
233 if encoded_size <= _MAX_METADATA_SIZE:
234 return
235 # 5. Truncate driver info.
236 overflow = encoded_size - _MAX_METADATA_SIZE
237 driver = metadata.get("driver", {})
238 if driver:
239 # Truncate driver version.
240 driver_version = driver.get("version")[:-overflow]
241 if len(driver_version) >= len(_METADATA["driver"]["version"]):
242 metadata["driver"]["version"] = driver_version
243 else:
244 metadata["driver"]["version"] = _METADATA["driver"]["version"]
245 encoded_size = len(bson.encode(metadata))
246 if encoded_size <= _MAX_METADATA_SIZE:
247 return
248 # Truncate driver name.
249 overflow = encoded_size - _MAX_METADATA_SIZE
250 driver_name = driver.get("name")[:-overflow]
251 if len(driver_name) >= len(_METADATA["driver"]["name"]):
252 metadata["driver"]["name"] = driver_name
253 else:
254 metadata["driver"]["name"] = _METADATA["driver"]["name"]
255
256
257# If the first getaddrinfo call of this interpreter's life is on a thread,

Callers 1

__init__Method · 0.85

Calls 3

encodeMethod · 0.80
getMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected