{"record":{"id":"4663733e49a81d0e","repo":"apache/beam","slug":"the-specified-bucket-does-not-exist","errorCode":null,"errorMessage":"The specified bucket does not exist","messagePattern":"The specified bucket does not exist","errorType":"http","errorClass":"S3ClientError","httpStatus":404,"severity":"error","filePath":"sdks/python/apache_beam/io/aws/clients/s3/fake_client.py","lineNumber":150,"sourceCode":"\n      Args:\n        request: (GetRequest) request\n      Returns:\n        (bytes) The response message.\n      \"\"\"\n\n    file_ = self.get_file(request.bucket, request.object)\n\n    # Replicates S3's behavior, per the spec here:\n    # https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35\n    if start < 0 or end <= start:\n      return file_.contents\n\n    return file_.contents[start:end]\n\n  def delete(self, request):\n    if request.bucket not in self.known_buckets:\n      raise messages.S3ClientError('The specified bucket does not exist', 404)\n\n    if (request.bucket, request.object) in self.files:\n      self.delete_file(request.bucket, request.object)\n    else:\n      # S3 doesn't raise an error if you try to delete a nonexistent file from\n      # an extant bucket\n      return\n\n  def delete_batch(self, request):\n\n    deleted, failed, errors = [], [], []\n    for object in request.objects:\n      try:\n        delete_request = messages.DeleteRequest(request.bucket, object)\n        self.delete(delete_request)\n        deleted.append(object)\n      except messages.S3ClientError as e:\n        failed.append(object)","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/io/aws/clients/s3/fake_client.py#L132-L168","documentation":"FakeS3Client.delete raises S3ClientError('The specified bucket does not exist', 404) when the request's bucket was never registered in the fake's known_buckets set. It mirrors a 404 NoSuchBucket from real S3.","triggerScenarios":"Calling delete() (directly or via delete_batch) with a bucket name that was never passed to create_file or otherwise added to known_buckets in the fake client.","commonSituations":"Tests deleting from a bucket spelled differently than the one seeded; fixture setup skipped; bucket name loaded from config differing from the test default.","solutions":["Seed the bucket via fake_client.create_file(bucket, obj, contents) before deleting","Fix bucket-name mismatches between setup and the delete request","Verify the bucket is in fake_client.known_buckets before deleting","For delete_batch, ensure every bucket in the batch is known to the fake"],"exampleFix":"// before\nfake_client.delete(messages.DeleteRequest('prod-bucket', 'tmp/1'))\n// after\nfake_client.create_file('prod-bucket', 'tmp/1', b'x')\nfake_client.delete(messages.DeleteRequest('prod-bucket', 'tmp/1'))","handlingStrategy":"validation","validationCode":"if request.bucket not in fake_client.known_buckets:\n    raise AssertionError(f'bucket {request.bucket} not registered in fake')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Register the bucket via create_file or add it to known_buckets in setup","Reuse one bucket-name constant across fixtures and requests","For delete_batch, validate every request's bucket before calling","Check known_buckets contents when a delete unexpectedly fails"],"tags":["aws","s3","test-fixture","io"],"backgroundTag":"resource-not-found","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}