Habe ein sehr merkwürdiges verhalten bei der hashlib library in Verbindung mit md5 hashes festgestellt -> Python 3.11.9
Es werden über meine Applikation / API - URLs übertragen. Hinter den URLs befinden sich Assets (Video, Bilder oder PDFs) die von mir runtergeladen werden müssen.
Anhand des md5 hashes des Asset Byte Objektes, wird ermittelt ob es sich hierbei um ein neues oder bereits existierendes Asset handelt. Existiert dieser md5 hash bereits in der
DB wird eine Referenz für den Shop erstellt. Andernfalls wird das Asset als neu an den Shop übertragen. So die vereinfachte Version des Projektes.
Per API Request können bis zu 10000 URLs übertragen werden.
Jetzt ist mit bei den Tests aufgefallen, dass immer mal wieder Assets als neu übertragen werden, obwohl diese bereits existieren müssten.
Hier mal ein vereinfachter Code Schnipsel, mit dem ich den Fehler eingrenzen konnte
Code: Alles auswählen
def get_md5_hash(url):
asset_md5_hash = hashlib.md5()
r = requests.get(url, allow_redirects=True, timeout=5, stream=True)
try:
r.raise_for_status()
except Exception as error:
print(f"an requests get error occurred, error desc: '{error}'")
else:
r.raw.decode_content = True
try:
for line in r.iter_content(chunk_size=1024):
if line:
asset_md5_hash.update(line)
except Exception as error:
print(f"could not read bytes object, {error}")
else:
print(f"md5 hash: {asset_md5_hash.hexdigest()}")
Code: Alles auswählen
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
[…]
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 46651ab690a01143cbb5279eabf0909a
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 46651ab690a01143cbb5279eabf0909a
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
md5 hash: 8c702e1eda4d55f4b11d1eabf7738a0e
[…]
Sieht Ihr eine Möglichkeit, für einen schnelle Workaround?
Vielen Dank für eure hilfe