DownloadAndArchivePythonLibrary
The script downloads a Python library using PIP, archives it, and returns the file to the war room.
- Type
- python
- Pack
- CommonScripts
Source
import shlex
import subprocess
import zipfile
from pathlib import Path
from tempfile import mkdtemp
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
def installLibrary(dir_path: Path, library_name: str) -> str:
# Install the package using pip
demisto.debug(f"Running in {dir_path=}, {library_name=}")
cmd = f"python3 -m pip install --target {dir_path} {library_name}"
process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
demisto.debug(f"returned code: {process.returncode}")
if process.returncode != 0:
raise DemistoException(f"Failed to install the {library_name} library: {stderr.decode('utf-8')}")
# Create a zip file with maximum compression level
zip_path = dir_path / (library_name + ".zip")
with zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip_file: # pylint: disable=E1101
for root, _dirs, files in os.walk(dir_path):
for file in files:
demisto.debug(f"{root=}, {file=}")
file_path = Path(root) / file
# Ensure the folder inside the ZIP file is named 'python'
arcname = Path("python") / file_path.relative_to(dir_path)
zip_file.write(file_path, arcname=arcname)
demisto.debug("Updated file")
# Read the zip file contents
with open(zip_path, "rb") as zip_file:
zip_content = zip_file.read()
return fileResult(library_name + ".zip", zip_content)
def main():
args = demisto.args()
library_name = args.get("library_name")
try:
dir_path = Path(mkdtemp(prefix="python"))
demisto.debug("Starting installing library.")
result = installLibrary(dir_path, library_name)
return_results(result)
except Exception as e:
return_error(f"An error occurred: {e!s}")
if __name__ in ("__builtin__", "builtins"):
main()
README
The script downloads a Python library using PIP, archives it and return in to the war room.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | Utility, file |
| Cortex XSOAR Version | 6.10.0 |
Inputs
| Argument Name | Description |
|---|---|
| library_name | The Python library you wish to download and archive. |
Outputs
There are no outputs for this script.