Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions gnssanalysis/gn_download.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def __call__(self, bytes_transferred):

def get_earthdata_credentials(username: Optional[str] = None, password: Optional[str] = None) -> Tuple[str, str]:
"""
Get NASA Earthdata credentials from .netrc file or direct parameters.
Get NASA Earthdata credentials from direct parameters, env vars, or .netrc file.
:param Optional[str] username: Directly provided username (highest priority)
:param Optional[str] password: Directly provided password (highest priority)
:return Tuple[str, str]: Username and password tuple
Expand All @@ -106,7 +106,23 @@ def get_earthdata_credentials(username: Optional[str] = None, password: Optional
if username and password:
logging.debug("Using directly provided NASA Earthdata credentials")
return username, password
# Priority 2: Try to read from .netrc file

# Priority 2: Try to read from env vars
logging.debug("Attempting to pick up NASA Earthdata credentials from env vars...")
if all(env in _os.environ for env in ["EARTHDATA_USERNAME", "EARTHDATA_PASSWORD"]):

env_user = _os.environ["EARTHDATA_USERNAME"]
env_pass = _os.environ["EARTHDATA_PASSWORD"]

if len(env_user) == 0 or len(env_pass) == 0:
raise ValueError("NASA Earthdata username or password found in env var appears to be empty")

logging.debug("NASA Earthdata credentials successfully read from env vars")
return _os.environ["EARTHDATA_USERNAME"], _os.environ["EARTHDATA_PASSWORD"]
else:
logging.debug("Env vars EARTHDATA_USERNAME or EARTHDATA_PASSWORD were not set. Trying netrc...")

# Priority 3: Try to read from .netrc file
try:
netrc_path = _Path.home() / '.netrc'
if netrc_path.exists():
Expand All @@ -121,8 +137,11 @@ def get_earthdata_credentials(username: Optional[str] = None, password: Optional
except Exception as e:
logging.debug(f"Error reading .netrc: {e}")
# No credentials available
raise ValueError("No NASA Earthdata credentials available. Provide username/password directly "
f"or set up .netrc file with entry for '{EARTHDATA_URL}'.")
raise ValueError(
"No NASA Earthdata credentials available. Provide username/password directly, "
"set env vars EARTHDATA_USERNAME and EARTHDATA_PASSWORD, "
f"or set up .netrc file with entry for '{EARTHDATA_URL}'."
)


def upload_with_chunksize_and_meta(
Expand Down