File size: 8,380 Bytes
1ad0d9d
1
2
{"task_id":"BigCodeBench\/1005","complete_prompt":"import urllib.request\nimport zipfile\nimport os\nimport urllib.error\n\n\ndef task_func(\n    url: str,\n    save_path: str = \"downloaded_file.zip\",\n    extract_path: str = \"extracted_files\",\n) -> str:\n    \"\"\"\n    Downloads, extracts, and deletes a ZIP file from a specified URL.\n\n    The function includes comprehensive error handling to manage issues such as invalid URLs, unreachable servers, corrupted ZIP files, and file I\/O errors. In the event of a failure, it provides a descriptive error message.\n\n    Parameters:\n    - url (str): The URL of the ZIP file to be downloaded.\n    - save_path (str, optional): The local file path where the ZIP file will be saved temporarily. Defaults to 'downloaded_file.zip'.\n    - extract_path (str, optional): The directory where the ZIP file's contents will be extracted. Defaults to 'extracted_files'.\n\n    Returns:\n    - str: The path to the directory where the ZIP file's contents have been extracted. Returns an error message in case of failure.\n\n    Raises:\n    - urllib.error.URLError: If the URL is invalid or the server cannot be reached. \n    In this case, the function returns a string in the format \"URL Error: [error reason]\".\n\n    Requirements:\n    - urllib\n    - zipfile\n    - os\n    - urllib\n\n    Example:\n    >>> extracted_path = task_func('http:\/\/www.example.com\/data.zip')\n    >>> print(extracted_path)\n    'extracted_files'\n\n\n    \"\"\"\n","instruct_prompt":"Downloads, extracts, and deletes a ZIP file from a specified URL. The function includes comprehensive error handling to manage issues such as invalid URLs, unreachable servers, corrupted ZIP files, and file I\/O errors. In the event of a failure, it provides a descriptive error message.\nThe function should raise the exception for: urllib.error.URLError: If the URL is invalid or the server cannot be reached. In this case, the function returns a string in the format \"URL Error: [error reason]\".\nThe function should output with:\n    str: The path to the directory where the ZIP file's contents have been extracted. Returns an error message in case of failure.\nYou should write self-contained code starting with:\n```\nimport urllib.request\nimport zipfile\nimport os\nimport urllib.error\ndef task_func(\n    url: str,\n    save_path: str = \"downloaded_file.zip\",\n    extract_path: str = \"extracted_files\",\n) -> str:\n```","canonical_solution":"    try:\n        # Check if save_path already exists, if so, remove it\n        if os.path.exists(save_path):\n            os.remove(save_path)\n\n        # Download the file from the URL\n        urllib.request.urlretrieve(url, save_path)\n\n        # Create the extraction directory if it doesn't exist\n        if not os.path.exists(extract_path):\n            os.makedirs(extract_path)\n\n        # Extract the zip file\n        with zipfile.ZipFile(save_path, \"r\") as zip_ref:\n            zip_ref.extractall(extract_path)\n\n        # Remove the downloaded zip file\n        os.remove(save_path)\n\n        return extract_path\n    except urllib.error.URLError as e:\n        return f\"URL Error: {e.reason}\"","code_prompt":"import urllib.request\nimport zipfile\nimport os\nimport urllib.error\ndef task_func(\n    url: str,\n    save_path: str = \"downloaded_file.zip\",\n    extract_path: str = \"extracted_files\",\n) -> str:\n","test":"import unittest\nimport os\nimport urllib.error\nimport shutil\nfrom pathlib import Path\nclass TestCases(unittest.TestCase):\n    \"\"\"Test cases for the task_func function.\"\"\"\n    base_path = \"mnt\/data\/task_func_data\"\n    def setUp(self):\n        # Ensure the base path is absolute\n        self.base_path = os.path.abspath(self.base_path)\n        # Create base directory for test data\n        if not os.path.exists(self.base_path):\n            os.makedirs(self.base_path)\n    def test_successful_download_and_extraction_sample_1(self):\n        \"\"\"Test Case 1: Successful Download and Extraction of Sample 1\"\"\"\n        url = \"https:\/\/getsamplefiles.com\/download\/zip\/sample-1.zip\"\n        save_path = Path(self.base_path) \/ \"sample_1_download.zip\"\n        extract_path = Path(self.base_path) \/ \"sample_1_extract\"\n        result_path = task_func(url, save_path, extract_path)\n        self.assertEqual(result_path, extract_path)\n        self.assertTrue(os.path.exists(extract_path))\n        self.assertFalse(os.path.exists(save_path))\n    def test_successful_download_and_extraction_sample_2(self):\n        \"\"\"Test Case 2: Successful Download and Extraction of Sample 2\"\"\"\n        url = \"https:\/\/getsamplefiles.com\/download\/zip\/sample-2.zip\"\n        save_path = Path(self.base_path) \/ \"sample_2_download.zip\"\n        extract_path = Path(self.base_path) \/ \"sample_2_extract\"\n        result_path = task_func(url, save_path, extract_path)\n        self.assertEqual(result_path, extract_path)\n        self.assertTrue(os.path.exists(extract_path))\n        self.assertFalse(os.path.exists(save_path))\n    def test_invalid_url(self):\n        \"\"\"Test Case 3: Invalid URL\"\"\"\n        url = \"https:\/\/invalidurl.com\/nonexistent.zip\"\n        save_path = Path(self.base_path) \/ \"invalid_url.zip\"\n        extract_path = Path(self.base_path) \/ \"invalid_url_extract\"\n        result = task_func(url, save_path, extract_path)\n        self.assertTrue(result.startswith(\"URL Error:\"))\n    def test_file_already_exists_at_save_path(self):\n        \"\"\"Test Case 4: File Already Exists at Save Path\"\"\"\n        url = \"https:\/\/getsamplefiles.com\/download\/zip\/sample-1.zip\"\n        save_path = Path(self.base_path) \/ \"existing_file.zip\"\n        extract_path = Path(self.base_path) \/ \"existing_file_extract\"\n        # Create a dummy file at the save path\n        with open(save_path, \"w\") as file:\n            file.write(\"Dummy content\")\n        result_path = task_func(url, save_path, extract_path)\n        self.assertEqual(result_path, extract_path)\n        self.assertFalse(os.path.exists(save_path))\n    def test_extraction_path_already_exists(self):\n        \"\"\"Test Case 5: Extraction Path Already Exists\"\"\"\n        url = \"https:\/\/getsamplefiles.com\/download\/zip\/sample-2.zip\"\n        save_path = Path(self.base_path) \/ \"extract_path_exists.zip\"\n        extract_path = Path(self.base_path) \/ \"existing_extract_path\"\n        # Create the extraction path directory\n        if not os.path.exists(extract_path):\n            os.makedirs(extract_path)\n        result_path = task_func(url, save_path, extract_path)\n        self.assertEqual(result_path, extract_path)\n    def tearDown(self):\n        # Clean up any files or directories created during the tests\n        shutil.rmtree(self.base_path, ignore_errors=True)\n        # Cleanup the test directories\n        dirs_to_remove = [\"mnt\/data\", \"mnt\"]\n        for dir_path in dirs_to_remove:\n            if os.path.exists(dir_path):\n                shutil.rmtree(dir_path)","entry_point":"task_func","doc_struct":"{\"description\": [\"Downloads, extracts, and deletes a ZIP file from a specified URL.\", \"The function includes comprehensive error handling to manage issues such as invalid URLs, unreachable servers, corrupted ZIP files, and file I\/O errors. In the event of a failure, it provides a descriptive error message.\"], \"notes\": [], \"params\": [\"url (str): The URL of the ZIP file to be downloaded.\", \"save_path (str, optional): The local file path where the ZIP file will be saved temporarily. Defaults to 'downloaded_file.zip'.\", \"extract_path (str, optional): The directory where the ZIP file's contents will be extracted. Defaults to 'extracted_files'.\"], \"returns\": [\"str: The path to the directory where the ZIP file's contents have been extracted. Returns an error message in case of failure.\"], \"reqs\": [\"urllib\", \"zipfile\", \"os\", \"urllib\"], \"raises\": [\"urllib.error.URLError: If the URL is invalid or the server cannot be reached.\", \"In this case, the function returns a string in the format \\\"URL Error: [error reason]\\\".\"], \"examples\": [\">>> extracted_path = task_func('http:\/\/www.example.com\/data.zip')\", \">>> print(extracted_path)\", \"'extracted_files'\"]}","libs":"['urllib', 'zipfile', 'os']"}