Source code for icenet.process.azure
import argparse
import configparser
import logging
import os
import shutil
import tempfile
import xarray as xr
from icenet.process.utils import date_arg, destination_filename
from icenet.utils import setup_logging
from azure.storage.blob import ContainerClient
# https://docs.microsoft.com/en-us/azure/developer/python/sdk/storage/storage-blob-readme?view=storage-py-v12#next-steps
[docs]
@setup_logging
def upload_parse_args():
"""
:return:
"""
a = argparse.ArgumentParser()
a.add_argument("filename")
a.add_argument("date", default=None, type=date_arg, nargs="?")
a.add_argument("-c", "--container", default="input", type=str)
a.add_argument("-l", "--leave", default=False, action="store_true")
a.add_argument("-o", "--overwrite", default=False, action="store_true")
a.add_argument("-v", "--verbose", default=False, action="store_true")
return a.parse_args()
[docs]
def upload():
"""
"""
args = upload_parse_args()
logging.info("Azure upload facility")
url = os.getenv("AZURE_STORAGE_CONNECTION_STRING")
if not url:
try:
ini = configparser.RawConfigParser()
ini.read(os.path.expandvars("$HOME/.icenet.conf"))
url = ini.get("azure", "connection_string")
except configparser.Error as e:
logging.exception("Configuration is not correctly set up")
raise e
try:
if args.date:
tmpdir = tempfile.mkdtemp(dir=".")
ds = xr.open_dataset(args.filename)
ds = ds.sel(time=slice(args.date, args.date))
if len(ds.time) < 1:
raise ValueError("No elements in {} for {}".format(
args.filename, args.date))
filename = destination_filename(tmpdir, args.filename, args.date)
ds.to_netcdf(filename)
ds.close()
else:
filename = args.filename
with open(filename, "rb") as data:
logging.info("Uploading {}".format(filename))
logging.info("Connecting client")
container_client = \
ContainerClient.\
from_connection_string(url, container_name=args.container)
container_client.upload_blob(os.path.basename(filename),
data,
overwrite=args.overwrite)
finally:
if args.date and not args.leave:
logging.info("Removing {}".format(tmpdir))
shutil.rmtree(tmpdir)