@@ -2506,30 +2506,16 @@ def create_from_url(cls, url, user):
25062506 if download_url and not purldb_data :
25072507 package_data = collect_package_data (download_url )
25082508
2509- if sha512 := package_data .get ("sha512" ):
2510- if sha512_match := scoped_packages_qs .filter (sha512 = sha512 ):
2511- package_link = sha512_match [0 ].get_absolute_link ()
2512- raise PackageAlreadyExistsWarning (
2513- f"{ url } already exists in your Dataspace as { package_link } "
2514- )
2515-
2516- if sha256 := package_data .get ("sha256" ):
2517- if sha256_match := scoped_packages_qs .filter (sha256 = sha256 ):
2518- package_link = sha256_match [0 ].get_absolute_link ()
2519- raise PackageAlreadyExistsWarning (
2520- f"{ url } already exists in your Dataspace as { package_link } "
2521- )
2522-
2523- if sha1 := package_data .get ("sha1" ):
2524- if sha1_match := scoped_packages_qs .filter (sha1 = sha1 ):
2525- package_link = sha1_match [0 ].get_absolute_link ()
2526- raise PackageAlreadyExistsWarning (
2527- f"{ url } already exists in your Dataspace as { package_link } "
2528- )
2529-
2530- if md5 := package_data .get ("md5" ):
2531- if md5_match := scoped_packages_qs .filter (md5 = md5 ):
2532- package_link = md5_match [0 ].get_absolute_link ()
2509+ # Check for existing package by hash fields with a single database query
2510+ hash_fields = ["sha512" , "sha256" , "sha1" , "md5" ]
2511+ hash_filters = models .Q ()
2512+ for hash_field in hash_fields :
2513+ if hash_value := package_data .get (hash_field ):
2514+ hash_filters |= models .Q (** {hash_field : hash_value })
2515+
2516+ if hash_filters :
2517+ if package_match := scoped_packages_qs .filter (hash_filters ).first ():
2518+ package_link = package_match .get_absolute_link ()
25332519 raise PackageAlreadyExistsWarning (
25342520 f"{ url } already exists in your Dataspace as { package_link } "
25352521 )
0 commit comments