planetlabs / planet-client-python

Python client for Planet APIs
https://planet-sdk-for-python-v2.readthedocs.io/en/latest/
Apache License 2.0
271 stars 91 forks source link

Add support for GEE service account credentials #773

Open kevinlacaille opened 1 year ago

kevinlacaille commented 1 year ago

Is your feature request related to a problem? Please describe. In order for a user to bring their own GCS service account, we must supply them with somewhere to input that SA's credentials in order_request.google_earth_engine()

We already show support for the credentials field on our Dev Center's example request JSON.

Describe the solution you'd like Current Google Earth Engine configuration:

def google_earth_engine(project: str, collection: str) -> dict:
    '''Google Earth Engine configuration.
    Parameters:
        project: GEE project name.
        collection: GEE Image Collection name.
    '''
    cloud_details = {
        'project': project,
        'collection': collection,
    }
    return {'google_earth_engine': cloud_details}

Proposed solution:

def google_earth_engine(project: str, collection: str, credentials: str) -> dict:
    '''Google Earth Engine configuration.
    Parameters:
        project: GEE project name.
        collection: GEE Image Collection name.
        credentials: Base64-encoded credentials for the GEE service account
    '''
    cloud_details = {
        'project': project,
        'collection': collection,
        'credentials': credentials,
    }
    return {'google_earth_engine': cloud_details}

Current test:

def test_google_earth_engine():
    gee_config = order_request.google_earth_engine('project', 'collection')
    expected = {
        'google_earth_engine': {
            'project': 'project',
            'collection': 'collection',
        }
    }

    assert gee_config == expected

Proposed test:

def test_google_earth_engine():
    gee_config = order_request.google_earth_engine('project', 'collection', 'credentials')
    expected = {
        'google_earth_engine': {
            'project': 'project',
            'collection': 'collection',
            'credentials': '<REDACTED>',
        }
    }

    assert gee_config == expected

Additional context Many users like to bring their own service account over using Planet's, so this feature is likely to be used.

strixcuriosus commented 1 year ago

Note: bringing your own service account for GEE delivery is recommended for high volume workloads.

With the default Planet Service Account, the ingest queue can fill up with large orders. Planet recommends a limit of approximately 1000 assets delivered per organization, per day. There is also an option to bring their own service account for a dedicated queue with greater scalability.

See these docs for more info: https://developers.planet.com/docs/integrations/gee/faq/ https://developers.planet.com/docs/integrations/gee/delivery/#creating-a-service-account

strixcuriosus commented 1 year ago

Any thoughts on how the CLI UX could encourage and/or inform users of this option?