|
import os
|
|
import sys
|
|
import argparse
|
|
from typing import IO
|
|
import requests
|
|
from requests.exceptions import HTTPError
|
|
|
|
__author__ = "Sajal N. Shrestha"
|
|
__status__ = "Development"
|
|
__version__ = "0.1.0"
|
|
|
|
|
|
def parse_argument() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
usage="%(prog)s [OPTIONS] [FILE]...", description="Upload file to a graphql api"
|
|
)
|
|
# positional argument
|
|
parser.add_argument(
|
|
"file", type=argparse.FileType("r"), help="path of the file to upload"
|
|
)
|
|
# optional argument
|
|
parser.add_argument(
|
|
"-v", "--version", action="version", version=f"{parser.prog} {__version__}"
|
|
)
|
|
parser.add_argument(
|
|
"-t",
|
|
"--token",
|
|
dest="token",
|
|
help="token for authentication or environment variable TOKEN",
|
|
)
|
|
# required argument
|
|
required_arguments = parser.add_argument_group("required arguments")
|
|
required_arguments.add_argument(
|
|
"-d", "--domain", dest="domain", required=True, help="base domain of the api",
|
|
)
|
|
return parser
|
|
|
|
|
|
def parse_url(domain: str) -> str:
|
|
# TODO: WIP
|
|
return f"https://{domain}/api/graphql"
|
|
|
|
|
|
def file_upload(domain: str, token: str, file: IO) -> None:
|
|
url = parse_url(domain=domain)
|
|
headers = {
|
|
"authority": domain,
|
|
"authorization": f"Bearer {token}",
|
|
"content-type": "application/json",
|
|
}
|
|
try:
|
|
request = requests.post(url, headers=headers, files={"file": file})
|
|
request.raise_for_status()
|
|
if request.status_code == requests.codes.ok:
|
|
print("File has been successfully uploaded")
|
|
else:
|
|
print("Something went wrong!!!")
|
|
except (
|
|
requests.exceptions.ConnectionError,
|
|
requests.exceptions.HTTPError,
|
|
requests.exceptions.RequestException,
|
|
) as error:
|
|
print("Unexpected exception occurred: ", error)
|
|
|
|
|
|
def main() -> None:
|
|
parser = parse_argument()
|
|
args = parser.parse_args()
|
|
|
|
token = os.environ.get("TOKEN", args.token)
|
|
if not token:
|
|
print(
|
|
"error: environment variable 'TOKEN' or following arguments are required: -t/--token"
|
|
)
|
|
sys.exit(1)
|
|
|
|
file_upload(domain=args.domain, token=token, file=args.file)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|