All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to PEP 440 and uses Semantic Versioning.
- Added walkthrough in the form of several jupyter notebooks in /examples
- Re-enable run-pytest workflow
- Add tests for
ASFSearch, ASFSession, ASFProduct
as well as baseline, geographic, and search modules - Add Pytest-Automation Plugin integration
- Add automated CodeCov badge to readme
- Add tests for
- Fix error while raising ASFBaselineError in
baseline_search.get_stack_params()
- Skip download if file already exists
- In the future we will apply file size and/or checksum checks to ensure the existing file is correct
- Add documentation URL to setup.py
- Add Gitter badge/link to readme
- Change hyphens to underscores in some product type constants
- When working with source, package must be installed directly:
python3 -m pip install -e .
- In-region S3 downloads should now function without issue
- Replace
ASFProduct.centroid()
calculation with shapely-based calculation- See: asfadmin#53
- Removes numpy requirement
- Adds shapely requirement
- Feature and Bug Report github issue templates
- Fix download authentication header issue during direct-to-S3 redirects
- Fix Sentinel-1 stacking to include both A and B in stacks
- Auth support for username/password and cookiejars, in addition to the previously available token-based approach. Create a session, authenticate it with the method of choice, then pass the session to whichever download method is being used.
- Sessions can be created using the
ASFSession
class, a subclass ofrequests.Session
- Once a session is created, call one of its authentication methods:
auth_with_creds('user', 'pass)
auth_with_token(
EDL token`)auth_with_cookiejar(http.cookiejar)
- If you were previously using the
token
argument, such as:results.download(path='...', token='EDL token')
- Updating can be as simple as:
results.download(path='...', session=ASFSession().auth_with_token('EDL token'))
- Sessions can be re-used and are thread-safe
- Sessions can be created using the
download_url()
,download_urls()
,ASFProduct.download()
andASFSearchResults.download()
now expect asession
argument instead oftoken
- Send auth headers to every step along a download redirect chain (including final AWS S3 buckets)
- INSTRUMENT constants for C-SAR, PALSAR, and ANVIR-2
- Versioning workflow corrected for proper versioning, stop bumping major instead of patch!
- Fixed import order of operations bug
- Updated ASFProduct and ASFSearchResults to use path arg in download methods
- Parallel downloads now supported by ASFSearchResults. Defaults to 1 (sequential download)
- For
search()
-based functions that take an argument as a list, single values are now also allowed
- Import download functionality in asf_search (for
download_url()
anddownload_urls()
) - "parallel" is now "processes" in download functionality
- Fixed ASFProduct import in search.py
- importlib metadata fix for python <3.8
- ASFSearchResults now has a geojson() method which returns a data structure that matches the geojson specification
- ASFProduct now has a geojson() method that produces a data structure matching a geojson feature snippet
- ASFSearchResults and ASFProduct both have a str() methods that serializes the output of their geojson() methods
- Added CodeFactor shield to readme
- Now calculates temporal baselines when building a stack
- New search options:
- min/maxDoppler
- min/MaxFaradayRotation
- flightLine
- offNadirAngle
- season
- ASFProduct is no longer a subclass of dict. Instead, metadata has been moved to .properties and .geometry
- ASFSearchResults is now a subclass of UserList, for list-type operations
- Newly-built stacks are sorted by temporal baselines, ascending
- Cleaned up cruft from various refactors
- Layed out framework for INSTRUMENT constants (needs to be populated)
- Support for baseline stacking of pre-calculated datasets
- Download support for single products or entire search result sets, token-based auth only
- ASFSearchResults and ASFProduct classes
- Lower-level ASFError exception class
- ASFDownloadError exception class
- ASFBaselineError exception class
- Better path/frame/platform/product example
- No longer uses range type for parameters that accept lists of values and/or ranges. Now expects a 2-value tuple.
- Removed DATASET constants (not searchable, use platform+instrument to identify a dataset)
- Updated hello_world.py baseline example
- Removed output options across the board, geojson only until we no longer rely on SearchAPI calls
- insarStackID now a search option (needed for baseline stacking of pre-calculated datasets)
- Flatter structure for constants
- baseline functionality moved into search group (file restructuring)
- Corrected handling of version number in user agent string
- unused import cleanup
- better type hinting on centroid() function
- product_search(): search using a list of Product IDs (CMR's GranuleUR)
- granule_search(): search using a list of Granule names (aka Scene names)
- geo_search(): search using a WKT string, as well as other parameters
- search(): a generic search function, allowing any combination of the above search features
- stack(): provides basic Baseline stacking functionality (does not yet provide perpendicular/temporal baseline values)
- Numerous constants available, covering common BEAMMODE, DATASET, FLIGHT_DIRECTION, PLATFORM, POLARIZATION, and PRODUCT_TYPE values
- Basic exception classes and error handling for search parameter and server errors
- Populated readme with instructions, examples, and badges
- Improved packaging/build process
- Restructured branch layout according to https://gist.github.com/digitaljhelms/4287848
- Removed hard-coded version string
- Install setuptools_scm in pypi publish action