-
Notifications
You must be signed in to change notification settings - Fork 6
Update docs and gallery #210
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 5 commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
2bca34e
delete outdated content
aaarendt cb88c39
ignore claude agent files
aaarendt 4fd8e50
feat: add mermaid dependency for docs
aaarendt b5f304d
feat: closes #153
aaarendt 08a9c50
fix: addresses Joe's edits
aaarendt 1a92380
add DOI and fix grammar
aaarendt 35de01d
fix: repair some Sphinx formatting issues
aaarendt 75e7be8
feat: delete usage tab and combine with readme
aaarendt f0578e6
delete unnecessary extension
aaarendt 6b95456
clarify information in layers table
aaarendt bf33a5f
move tutorial earlier
aaarendt File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -32,3 +32,5 @@ scripts/download/data/* | |
| # Version | ||
| _version.py | ||
|
|
||
| # agent research and plans | ||
| .agents/ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,111 +1,76 @@ | ||
| API Documentation | ||
| ================= | ||
| .. role:: python(code) | ||
| :language: python | ||
| API Reference | ||
| ============= | ||
|
|
||
| Background | ||
| ---------- | ||
| The API (not a rest API, more of an SDK) is a set of python classes | ||
| designed for easy and standardized access to the database data. | ||
| The SnowEx Python API provides two access paths to the database: | ||
|
|
||
| The classes can both describe what data is available, and return | ||
| data in a GeoPandas dataframe. | ||
| - **Direct database access** (:mod:`snowexsql.api`) — for users with | ||
| database credentials. Queries run locally against the PostgreSQL/PostGIS | ||
| database using SQLAlchemy. | ||
|
|
||
| Components | ||
| ---------- | ||
| There are two main API classes for data access. | ||
| - **Lambda client** (:mod:`snowexsql.lambda_client`) — for users without | ||
| credentials. Queries are sent to a public AWS Lambda Function URL that | ||
| proxies the request to the database server-side. No AWS account or | ||
| database credentials are required. | ||
|
|
||
| .. code-block:: python | ||
| Both paths expose the same high-level interface: ``from_filter()``, | ||
| ``from_area()``, ``from_unique_entries()``, and ``all_*`` properties. | ||
|
|
||
| from snowexsql.api import PointMeasurements, LayerMeasurements | ||
| .. note:: | ||
|
|
||
| :code:`PointMeasurements` gives access to the PointData (depths, GPR, etc), and | ||
| :code:`LayerMeasurements` gives access to the LayerData (pits, etc). | ||
| By default, queries are capped at 1000 records. If your query would | ||
| return more, a :class:`~snowexsql.api.LargeQueryCheckException` is raised | ||
| unless you explicitly pass ``limit=<n>`` with a value larger than 1000. | ||
|
|
||
| Both of the classes have the same methods, although they access different | ||
| tables in the database. | ||
|
|
||
| The primary methods for accessing data are :code:`.from_area` and | ||
| :code:`.from_filter`. Both of these methods return a GeoPandas dataframe. | ||
| Direct Database API | ||
| ------------------- | ||
|
|
||
| .from_filter | ||
| ------------ | ||
| .. currentmodule:: snowexsql.api | ||
|
|
||
| The :code:`.from_filter` is the simpler of the two search methods. It takes in | ||
| a variety of key word args (kwargs) and returns a dataset that meets | ||
| all of the criteria. | ||
| BaseDataset | ||
| ~~~~~~~~~~~ | ||
|
|
||
| .. code-block:: python | ||
| .. autoclass:: BaseDataset | ||
| :members: | ||
| :undoc-members: | ||
| :show-inheritance: | ||
|
|
||
| df = LayerMeasurements.from_filter( | ||
| type="density", | ||
| site_name="Boise River Basin", | ||
| limit=1000 | ||
| ) | ||
| PointMeasurements | ||
| ~~~~~~~~~~~~~~~~~ | ||
|
|
||
| In this example, we filter to all the layer measurements of `density` | ||
| that were taken in the `Boise River Basin`, and we `limit` to the top | ||
| 1000 measurements. | ||
| .. autoclass:: PointMeasurements | ||
| :members: | ||
| :undoc-members: | ||
| :show-inheritance: | ||
|
|
||
| Each kwarg (except date) **can take in a list or a single value** so you could change | ||
| this to :code:`site_name=["Boise River Basin", "Grand Mesa"]` | ||
| LayerMeasurements | ||
| ~~~~~~~~~~~~~~~~~ | ||
|
|
||
| To find what `kwargs` are allowed, we can check the class | ||
| .. autoclass:: LayerMeasurements | ||
| :members: | ||
| :undoc-members: | ||
| :show-inheritance: | ||
|
|
||
| .. code-block:: python | ||
| Exceptions | ||
| ~~~~~~~~~~ | ||
|
|
||
| LayerMeasurements.ALLOWED_QRY_KWARGS | ||
| .. autoexception:: LargeQueryCheckException | ||
|
|
||
| For :code:`LayerMeasurements` this will return | ||
| :code:`["site_name", "site_id", "date", "instrument", "observers", "type", "utm_zone", "pit_id", "date_greater_equal", "date_less_equal"]` | ||
|
|
||
| so we can filter by any of these as inputs to the function. | ||
| Lambda Client | ||
| ------------- | ||
|
|
||
| **Notice `limit` is not specified here**. Limit is in the :code:`SPECIAL_KWARGS` | ||
| and gets handled at the end of the query. | ||
| .. currentmodule:: snowexsql.lambda_client | ||
|
|
||
| **Notice `date_greater_equal` and `date_less_equal`** for filtering the `date` | ||
| parameter using `>=` and `<=` logic. | ||
| SnowExLambdaClient | ||
| ~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| To find what values are allowed for each, we can check the propeties of the | ||
| class. Both :code:`LayerMeasurements` and :code:`PointMeasurements` have | ||
| the following properties. | ||
| .. autoclass:: SnowExLambdaClient | ||
| :members: | ||
| :undoc-members: | ||
| :show-inheritance: | ||
|
|
||
| * all_site_names | ||
| * all_types | ||
| * all_dates | ||
| * all_observers | ||
| * all_instruments | ||
| create_client | ||
| ~~~~~~~~~~~~~ | ||
|
|
||
| So you can find all the instruments for filtering like :code:`LayerMeasurements().all_instruments`. | ||
| **Note** - these must be called from an instantiated class like shown earlier | ||
| in this line. | ||
|
|
||
| .from_area | ||
| ---------- | ||
|
|
||
| The signature for :code:`.from_area` looks like this | ||
|
|
||
| .. code-block:: python | ||
|
|
||
| def from_area(cls, shp=None, pt=None, buffer=None, crs=26912, **kwargs): | ||
|
|
||
| It is a class method, so it *does not need an instantiated class*. | ||
| The :code:`**kwargs` argument takes the same inputs as the :code:`from_filter` | ||
| function. | ||
|
|
||
| The big difference is that from area will filter to results either within | ||
| :code:`shp` (a `shapely` polygon) **or** within :code:`buffer` radius | ||
| around :code:`pt` (a `shapely` point). | ||
|
|
||
|
|
||
| Large Query Exception and Limit | ||
| ------------------------------- | ||
|
|
||
| By default, if more than 1000 records will be returned, and **no limit** | ||
| is provided. The query will fail. This is intentional so that we are aware | ||
| of large queries. If you understand your query will be large and need | ||
| more than 1000 records returned, add a :code:`limit` kwarg to your query | ||
| with a value greater than the number you need returned. | ||
| **This will override the default behavior** and return as many records as | ||
| you requested. | ||
| .. autofunction:: create_client |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.