History¶
0.16.0 (2022-02-22)¶
New Endpoints¶
Add new Taxon endpoint:
get_taxa_map_layers()
Add new Message endpoints:
get_messages()
get_message_by_id()
get_unread_meassage_count()
Observation Media¶
The following changes apply to upload()
, create_observation()
, and update_observation()
:
Add support for uploading observation photo & sound files from URLs
Add support for attaching previously uploaded photos to an observation by photo ID
Other Changes¶
Remove
pyinaturalist.user_agent
global variable and API function keyword args, and recommend setting on session object insteadRemove
pyinaturalist.DRY_RUN*
global variables, and recommend setting in environment variables insteadFix
count_only=True
/per_page=0
to not run full queryDo not error on unrecognized
**kwargs
, for cases where the API may accept some additional undocumented parametersAllow overriding default location for API request cache
0.15.0 (2021-09-07)¶
New Endpoints¶
Added new functions for v1 Observation endpoints:
create_observation()
update_observation()
delete_observation()
upload()
(uploads both photos and sounds)These are now preferred over the older v0 endpoints
Added new functions for v1 Observation field value endpoints:
set_observation_field()
(creates and updates observation field values)delete_observation_field()
Added new function for Observation taxon summary:
get_observation_taxon_summary()
Added new functions for Project observation endpoints:
add_project_observation()
delete_project_observation()
Modified Endpoints¶
Added a
dry_run
argument to all API request functions to dry-run an individual requestAdded a
reverse
argument to all paginated API request functions to reverse the sort order
Models¶
Performance¶
Added API request caching with requests-cache
Updated rate-limiting not apply to cached requests
Added custom
ClientSession
class to configure caching, rate-limiting, retries, and timeouts
Logging¶
Improved logging output for dry-run mode: now shows formatted
PreparedRequest
details instead ofrequest()
keyword argsAdded an
enable_logging()
function to optionally show prettier logs withrich
Updated logging to redact all credentials from logged API requests
Other Changes¶
Increased default timeout to 10 seconds to accomodate some longer-running queries
Added
get_interval_ranges()
function to help with queries over a series of date/time intervalsFixed bug with
rule_details
param forget_projects_by_id()
Added more tutorial/example notebooks
0.14.1 (2021-07-21)¶
Added new function for Posts endpoint:
get_posts()
Fixed broken
response_format
parameter inv0.get_observations()
0.14.0 (2021-07-14)¶
New Endpoints¶
Added new function for Observation sounds endpoint:
upload_sounds()
Added new function for Life list endpoint:
get_observation_taxonomy()
Modified Endpoints¶
Added support for passing a
requests.Session
object to all API request functionsAdded a
photos
parametercreate_observation()
andupdate_observation()
to upload photosAdded a
sounds
parametercreate_observation()
andupdate_observation()
to upload soundsRenamed
add_photo_to_observation()
toupload_photos()
The alias
rest_api.add_photo_to_observation()
is still available for backwards-compatibility
Updated
upload_photos()
to take accept either a single photo or a list of photos, and return a list of responsesUpdated
upload_sounds()
to take accept either a single sound or a list of sounds, and return a list of responsesAdded alias
observed_on
forobserved_on_string
increate_observation()
Fixed conversion for datetime parameters in
create_observation()
andupdate_observation()
Updated all requests to correctly convert
datetime
objects to stringsMoved API functions into separate modules by API version and resource type.
All can still be imported via
from pyinaturalist import *
Added aliases for backwards-compatibility, so imports from
pyinaturalist.rest_api
andpyinaturalist.node_api
will still work, but these are deprecated and will be removed in a future release
Deprecated
get_geojson_observations()
(moved to join other observation conversion tools inpyinaturalist-convert
)
Models¶
Added data models for all API response types, to support working with typed python objects instead of JSON.
Models:
Comment
ControlledTerm
ControlledTermValue
Annotation
Identification
LifeList
LifeListTaxon
Observation
ObservationField
ObservationFieldValue
Photo
Place
Project
ProjectObservation
ProjectObservationField
ProjectUser
SearchResult
Taxon
ConservationStatus
EstablishmentMeans
TaxonCount
TaxonCounts
User
Model features:
Type conversions
Lazy initialization
Basic formatters
Table formatters
Other Changes¶
Consolidated response formatting into a single
pprint()
function (instead of one per resource type)Refactored and reorganized the following internal utility modules (see API docs for details):
converters
docs
formatters
request_params
Added a default response timeout of 5 seconds
Added an example (
examples/sample_responses.py
) containing response JSON, model objects, and tables of every type to experiment withAdded a tutorial notebook (
examples/Tutorial.ipynb
)Set up pyinaturalist-notebook to be runnable with Binder
0.13.0 (2021-05-22)¶
New Endpoints¶
Added new function for Search endpoint:
search()
(combined search for places, projects, taxa, and users)Added new functions for Identifications endpoints:
get_identifications()
andget_identifications_by_id()
Added new functions for Users endpoints:
get_user_by_id()
andget_users_autocomplete()
Modified Endpoints¶
Added undocumented
ident_user_id
parameter toget_observations()
Added
count_only=True
as an alias forper_page=0
(to get only result counts).Added generic auto-pagination that can apply to any endpoint that supports pagination.
Added
page='all'
as a shortcut for auto-paginationThe above changes apply to all functions that support pagination:
node_api.get_identifications()
node_api.get_observations()
node_api.get_observation_species_counts()
node_api.get_observation_observers()
node_api.get_observation_identifiers()
node_api.get_places_autocomplete()
node_api.get_projects()
node_api.get_taxa()
rest_api.get_observations()
rest_api.get_observation_fields()
The following methods are now deprecated. They are still functional, but will raise a
DeprecationWarning
:node_api.get_all_observations()
rest_api.get_all_observation_fields()
Removed
node_api.get_all_observation_species_counts()
, since this was only added recentlyUpdated
rest_api.get_observation_fields()
to return a dict with'results'
for consistency with other endpoints
Other Changes¶
Added response formatting functions to
pyinaturalist.formatters
All API functions and formatters can now be imported from the top-level package, e.g.
from pyinaturalist import *
Removed
minify
option fromget_taxa_autocomplete
Published pyinaturalist on conda-forge
Added global rate-limiting to stay within the rates suggested in API Recommended Practices (per second, minute, and day)
Moved
Dockerfile
anddocker-compose.yml
to a separate repo (pyinaturalist-notebook) and published on Docker HubPackaging is now handled with Poetry. For users, installation still works the same. For developers, see Contributing Guide for details.
0.12.1 (2021-03-07)¶
Add undocumented
ident_user_id
parameter toget_observations()
0.12.0 (2021-02-02)¶
New Endpoints¶
Added new function for Observation Histogram endpoint:
get_observation_histogram()
Added new function for Observers endpoint:
get_observation_observers()
Added new function for Identifiers endpoint:
get_observation_identifiers()
Added new function for Controlled Terms endpoints:
get_controlled_terms()
Wraps both
GET /controlled_terms
and/controlled_terms/for_taxon
endpoints
Modified Endpoints¶
Added conversion from date/time strings to timezone-aware python
datetime
objects. This applies to the following functions:node_api.get_observation()
node_api.get_observations()
node_api.get_all_observation()
node_api.get_projects()
node_api.get_projects_by_id()
node_api.get_taxa()
node_api.get_taxa_by_id()
rest_api.get_observation()
rest_api.get_observation_fields()
rest_api.get_all_observation_fields()
Added conversion for an additional
location
field in observation responses
Authentication¶
Added support for providing credentials via environment variables
Added integration with system keyring for credentials storage
Added documentation & examples for authentication options
Other Changes¶
Added a
Dockerfile
anddocker-compose.yml
for a Jupyter notebook containing pyinaturalist + other relevant packagesAdded some more detailed usage examples under
examples/
Improved performance for large paginated queries
Fixed bug that dropped request parameter values of
0
as if they wereNone
Dropped support for python 3.5
Removed request parameters that were deprecated in 0.11
0.11.0 (2020-11-04)¶
New Endpoints¶
Added new functions for Node API Places endpoints:
get_places_by_id()
get_places_nearby()
get_places_autocomplete()
Added new functions for Node API Projects endpoints:
get_projects()
get_projects_by_id()
Added new function for an additional Node API Observation endpoint:
get_observation_species_counts()
get_all_observation_species_counts()
Modified Endpoints¶
Added support for simplified observation field syntax (
observation_fields={id: value}
) forcreate_observations()
andupdate_observation()
Updated
node_api.get_taxa_by_id()
to accept multiple IDsUpdated
rest_api.get_observations()
with type conversion from strings to floats for response lat/long coordinates. Only applies to JSON response format.Updated
node_api.get_taxa_autocomplete()
with optionalmin_rank
andmax_rank
parameters, for consistency withget_taxa()
Using the
params
positional argument for the handful of functions that used it will raise aDeprecationWarning
, but will otherwise still be functional until0.12
Renamed
search_query
argument toq
to be consistent with API request parametersUsing the
search_query
argument forrest_api.get_observation_fields()
andrest_api.get_all_observation_fields()
will raise aDeprecationWarning
, but will otherwise still be functional until0.12
Renamed
create_observations()
tocreate_observation()
, as this only supports creating a single observation per call. This is aliased tocreate_observations()
for backwards-compatibility, but will raise aDeprecationWarning
.
Documentation & Usability¶
Added example response data to docs all endpoints
Added links to official API reference to docs for all endpoints
Added full API request parameters to all API functions, in the form of keyword arguments with type annotations and docstrings
Added complete table of iNaturalist API endpoints and endpoints implemented by pyinaturalist
Added and improved usage examples
Numerous other documentation improvements
Made all API function signatures consistent by taking request params as keyword arguments
Other Changes¶
Dropped testing & support for python 3.4
Added testing & support for python 3.9
Added parameter validation for multiple-choice request parameters
0.10.0 (2020-06-16)¶
New Endpoints¶
Added new Observation endpoint:
rest_api.get_observations()
, with 6 additional observation response formats, including GeoJSON, Darwin Core, and others
Modified Endpoints¶
Added
minify
option tonode_api.get_taxa_autocomplete()
Other Changes¶
Added more info & examples to README for taxa endpoints, and other documentation improvements
Added conversion for all date and datetime parameters to timezone-aware ISO 8601 timestamps
Added a dry-run mode to mock out API requests for testing
Set up pre-release builds for latest development version
0.9.1 (2020-05-26)¶
Bugfix: proper support for boolean and integer list parameters (Issue #17)
0.9.0 (2020-05-06)¶
New Endpoints¶
Added new functions for Node API Taxa endpoints:
node_api.get_taxa()
node_api.get_taxa_autocomplete()
node_api.get_taxa_by_id()
0.8.0 (2019-07-11)¶
All functions now take an optional
user-agent <https://en.wikipedia.org/wiki/User_agent>
_ parameter in order to identify yourself to iNaturalist. If not set,Pyinaturalist/<VERSION>
will be used.
0.7.0 (2019-05-08)¶
rest_api.delete_observation()
now raisesObservationNotFound
if the observation doesn’t existminor dependencies update for security reasons
0.6.0 (2018-11-15)¶
New function:
rest_api.delete_observation()
0.5.0 (2018-11-05)¶
New function:
node_api.get_observation()
0.4.0 (2018-11-05)¶
create_observation()
now raises exceptions in case of errors.
0.3.0 (2018-11-05)¶
update_observation()
now raises exceptions in case of errors.
0.2.0 (2018-10-31)¶
Better infrastructure (type annotations, documentation, …)
Dropped support for Python 2.
New function:
update_observation()
rest_api.AuthenticationError
is nowexceptions.AuthenticationError
0.1.0 (2018-10-10)¶
First release on PyPI.