|
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() |