Skip to content

prefect_earthdata.tasks

Module handling Prefect tasks interacting with NASA Earthdata

Classes

Functions

download async

Downloads data from NASA Earthdata using the earthaccess.download() function

Parameters:

Name Type Description Default
credentials EarthdataCredentials

An EarthdataCredentials object used to authenticate with NASA Earthdata.

required
args

Additional positional arguments to be passed to earthaccess.download().

()
kwargs

Additional keyword arguments to be passed to earthaccess.download().

{}

Returns:

Type Description
List[str]

List of downloaded files.

Example

Searches and downloads granules through NASA Earthdata.

from prefect import flow
from prefect_earthdata.credentials import EarthdataCredentials
from prefect_earthdata.tasks import search_data, download

@flow
def example_earthdata_download_flow():

    earthdata_credentials = EarthdataCredentials(
        earthdata_userame = "username",
        earthdata_password = "password"
    )

    granules = search_data(
        earthdata_credentials,
        count=1,
        short_name="ATL08",
        bounding_box=(-92.86, 16.26, -91.58, 16.97),
    )

    download_path = "/tmp"

    files = download(
        earthdata_credentials,
        granules=granules,
        local_path=download_path
    )

    return granules, files

example_earthdata_download_flow()
Source code in prefect_earthdata/tasks.py
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
@task
async def download(credentials: EarthdataCredentials, *args, **kwargs) -> List[str]:
    """
    Downloads data from NASA Earthdata using the
    [`earthaccess.download()`](https://nsidc.github.io/earthaccess/user-reference/api/api/#earthaccess.api.download) function

    Args:
        credentials: An `EarthdataCredentials` object used
            to authenticate with NASA Earthdata.
        args: Additional positional arguments to be passed
            to `earthaccess.download()`.
        kwargs: Additional keyword arguments to be passed
            to `earthaccess.download()`.

    Returns:
        List of downloaded files.

    Example:
        Searches and downloads granules through NASA Earthdata.

        ```python
        from prefect import flow
        from prefect_earthdata.credentials import EarthdataCredentials
        from prefect_earthdata.tasks import search_data, download

        @flow
        def example_earthdata_download_flow():

            earthdata_credentials = EarthdataCredentials(
                earthdata_userame = "username",
                earthdata_password = "password"
            )

            granules = search_data(
                earthdata_credentials,
                count=1,
                short_name="ATL08",
                bounding_box=(-92.86, 16.26, -91.58, 16.97),
            )

            download_path = "/tmp"

            files = download(
                earthdata_credentials,
                granules=granules,
                local_path=download_path
            )

            return granules, files

        example_earthdata_download_flow()
        ```
    """  # noqa: E501

    logger = get_run_logger()

    logger.debug("Authenticating to NASA Earthdata")
    auth = credentials.login()
    if not auth.authenticated:
        raise ValueError("Could not authenticate to NASA Earthdata")

    return earthaccess.download(*args, **kwargs)

search_data async

Searches for data on NASA Earthdata using the earthaccess.search_data() function

Parameters:

Name Type Description Default
credentials EarthdataCredentials

An EarthdataCredentials object used to authenticate with NASA Earthdata.

required
args

Additional positional arguments to be passed to earthaccess.search_data().

()
kwargs

Additional keyword arguments to be passed to earthaccess.search_data().

{}

Returns:

Type Description
List[DataGranule]

A list of DataGranule objects representing the search results.

Example

Searches granules through NASA Earthdata.

from prefect import flow
from prefect_earthdata.credentials import EarthdataCredentials
from prefect_earthdata.tasks import search_data

@flow
def example_earthdata_search_flow():

    earthdata_credentials = EarthdataCredentials(
        earthdata_userame = "username",
        earthdata_password = "password"
    )

    granules = search_data(
        earthdata_credentials,
        count=1,
        short_name="ATL08",
        bounding_box=(-92.86, 16.26, -91.58, 16.97),
    )
    return granules

example_earthdata_search_flow()
Source code in prefect_earthdata/tasks.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@task
async def search_data(
    credentials: EarthdataCredentials, *args, **kwargs
) -> List[earthaccess.results.DataGranule]:
    """
    Searches for data on NASA Earthdata using the
    [`earthaccess.search_data()`](https://nsidc.github.io/earthaccess/user-reference/api/api/#earthaccess.api.search_data) function

    Args:
        credentials: An `EarthdataCredentials` object used
            to authenticate with NASA Earthdata.
        args: Additional positional arguments to be passed
            to `earthaccess.search_data()`.
        kwargs: Additional keyword arguments to be passed
            to `earthaccess.search_data()`.

    Returns:
        A list of `DataGranule` objects representing the search results.

    Example:
        Searches granules through NASA Earthdata.

        ```python
        from prefect import flow
        from prefect_earthdata.credentials import EarthdataCredentials
        from prefect_earthdata.tasks import search_data

        @flow
        def example_earthdata_search_flow():

            earthdata_credentials = EarthdataCredentials(
                earthdata_userame = "username",
                earthdata_password = "password"
            )

            granules = search_data(
                earthdata_credentials,
                count=1,
                short_name="ATL08",
                bounding_box=(-92.86, 16.26, -91.58, 16.97),
            )
            return granules

        example_earthdata_search_flow()
        ```
    """  # noqa: E501

    logger = get_run_logger()

    logger.debug("Authenticating to NASA Earthdata")
    auth = credentials.login()
    if not auth.authenticated:
        raise ValueError("Could not authenticate to NASA Earthdata")

    return earthaccess.search_data(*args, **kwargs)