History¶
2.26.2 (2020-04-20)¶
Fix for 2.26.1 (2020-04-20) and Issue #113. * See PR 125 * Remove the
_set_resource_collection_fieldmethod inTourDossier* Introducing the_Parentnamedtuple in PR 123 broke being able to Query-chain from Tour-Dossiers to departures * Buggy behaviour from2.26.1below:>>> from gapipy import Client >>> api = Client(application_key='MY_SECRET_KEY') >>> api.tour_dossiers(24309).departures.count() # AttributeError: 'tuple' object has no attribute 'uri'
2.26.1 (2020-04-20)¶
- Fix for 2.26.0 (2020-04-14) and Issue #113.
* Calls to
APIRequestor.list_rawwill use initialised its parameters, unless the URI provides its own. * See PR 123. - Add the ability to define the
max_retriesvalues on the requestor. * NewenvvalueGAPI_CLIENT_MAX_RETRIES. * The default value will be0, and if provided will override theretryvalue on therequests.Session. * This change will also always initialize arequests.Sessionvalue on initialisation of thegapipy.Client. * See PR 124. - Add
variation_idfield to theImageresource. * See Commit edc8d9b. - Update the
ActivityDossierandAccommodationDossierresources. * Remove theis_prepaidfield. * Adds thehas_costsfield. * See Commit bd35531.
2.26.0 (2020-04-14)¶
Breaking Changes
- The
Query.filtermethod will return a clone/copy of itself. This will preserve the state offilterson the original Query object. - The
Query.allmethod will not clear the filters after returning. - The
Query.allmethod will return aTypeErrorif a type other than anintis passed to thelimitargument. - The
Query.countmethod will not clear the filters after returning. - See PR 121
New behaviour with the Query.filter method:
>>> from gapipy import Client
>>> api = Client(application_key='MY_SECRET_KEY')
# create a filter on the departures
>>> query = api.departures.filter(**{"tour_dossier.id": "24309"})
>>> query.count()
494
# we preserve the filter status of the current query
>>> query.filter(**{"availability.status": "AVAILABLE"}).count()
80
>>> query.count()
494
- The
AgencyChain.agenciesattribute returns a list ofAgencyobjects * See Commit f34afd52
2.25.1 (2020-01-02)¶
- Improve contribution instructions to check long_description rST file in dist
- Dev Requirement updates:
* Add
readme_renderer==24.0* Addtwine==1.15.0fortwine checkcommand
2.25.0 (2020-01-02)¶
- Failing to fetch inlined Resource (from Stubs) will raise the underlying
requests.HTTPError instead of AttributeError resulting from a
None. - Adds
httperrors_mapped_to_nonekwarg togapipy.query.Query.getwith default valuegapipy.query.HTTPERRORS_MAPPED_TO_NONE - Modifies
gapipy.resources.base.Resource.fetchto passhttperrors_mapped_to_none=NonetoQuery.get - This ensures that any underlying
requests.HTTPErrorfromQuery.getis bubbled up to the caller. It is most prevalent when reference Resource stubs fail to be retrieved from the G API. Prior to this changeResource.fetchwould return aNonevalue resulting in anAttributeError. Now, if the stub fails to fetch due to an HTTPError, that will be raised instead
2.24.3 (2019-12-12)¶
- Exclude the
testspackage from the package distribution
2.24.2 (2019-12-12)¶
- Adds the
compute_request_signatureandcompute_webhook_validation_keyutility methods * See https://github.com/gadventures/gapipy/pull/122
2.24.1 (2019-12-12)¶
- Add
slugfield toTourDossierresource * See https://github.com/gadventures/gapipy/pull/120
2.24.0 (2019-11-05)¶
- Add missing/new fields to resources * Accommodation Dossier: categories, suggested_dossiers, visited_countries, and visited_cities * Activity Dossier: suggested_dossiers, visited_countries, and visited_cities * Departure: local_payments * Itinerary: publish_state * See https://github.com/gadventures/gapipy/pull/117
- Add
continentandplacereferences to theCountriesresource * See https://github.com/gadventures/gapipy/pull/115 - Accept
additional_headersoptional kwarg oncreate* See https://github.com/gadventures/gapipy/pull/114
2.23.0 (2019-11-04)¶
- Remove deprecated
tour_dossiers.itinerariesfield and related code
2.22.0 (2019-10-10)¶
- Add
booking_companyfield toBookingresource
2.21.0 (2019-04-09)¶
- Add
ripple_scoretoItineraryresource
2.20.1 (2019-02-20)¶
- HISTORY.rst doc fixes
2.20.0 (2019-02-20)¶
- Add
RequirementandRequirementSetresources - Move
Checkinresource to theresources.bookingmodule - The
Queryobject will resolve to use thehrefvalue when returning the iterator to fetchallof some resource. This is needed becausebookings/123456/requirementsactually returns a list ofRequirementSetresources - see https://github.com/gadventures/gapipy/releases/tag/2.20.0 for more details
2.19.4 (2019-02-14)¶
- Add
get_category_namehelper method toTourDossierresource
2.19.3 (2019-02-12)¶
- Attempt to fix rST formatting of
READMEandHISTORYon pypi
2.19.2 (2019-02-12)¶
- Become agnostic between redis 2.x.x && 3.x.x versions
- the
setexmethod argument order changes between the major versions
- the
2.19.1 (2019-02-12)¶
- HotFix for
2.19.0– addsrequirements.txtfile to the distributionMANIFEST
2.19.0 (2019-02-12)¶
- Add
booking_companiesfield toItineraryresource - Pin our requirement/dependency versions
- pin
future == 0.16.0 - pin
requests >= 2.18.4, < 3.0.0 - read
setup.pyrequirements fromrequirements.txt
- pin
2.18.1 (2019-02-07)¶
- Add
customersnested resource tobookings
2.18.0 (2018-12-14)¶
- Add
merchandiseresource - Add
merchandise_servicesresources
2.17.0 (2018-11-12)¶
- Add
membership_programsfield to theCustomerresource
2.16.0 (2018-11-07)¶
- Completely remove the deprecated
add_onsfield from the Departure resource - Add missing fields to various Dossier resources
- Accommodation Dossier:
flags,is_prepaid,service_time,show_on_reservation_sheet - Activity Dossier:
is_prepaid,service_time,show_on_reservation_sheet - Country Dossier:
flags - Place Dossier:
flags - Transport Dossier:
flags
- Accommodation Dossier:
- Add
valid_during_rangeslist field to the Itinerary resource. This field is a list field of the newly addedValidDuringRangemodel (described below) - Add
ValidDuringRangemodel. It consists of two date fields,start_date, andend_date. It also provides a number of convenience methods to determine if the date range provided is valid, or relative to some date.is_expired: Is it expired relative todatetime.date.today(occurs in the past)is_valid_today: Is it valid relative todatetime.date.todayis_valid_during_range: Is it valid for some give start/end date rangeis_valid_on_or_after_date: Is it valid on or after some dateis_valid_on_or_before_date: Is it valid on or before some dateis_valid_on_date: Is it valid on some dateis_valid_sometime: Is it valid at all
2.15.0 (2018-10-10)¶
- Add
countryreference toNationalityresource - Moved
resources/bookings/nationality.pytoresources/geo/*
2.14.6 (2018-08-01)¶
- Check for presence of
idfield directly in the Resource__dict__in order to prevent a chicken/egg situation when attempting tosave. This is needed due to the change introduced in 2.14.4, where we explicitly raise an AttributeError when trying to access theidattribute. - Added
service_codefield for Activty & Accommodation Dossier resources
2.14.5 (2018-08-01)¶
- deleted
2.14.4 (2018-07-13)¶
- Raise an AttributeError when trying to access id on Resource.__getattr__
- Don’t send duplicate params when paginating through list results
- Implement first() method for Query
2.14.3 (2018-05-29)¶
- Expose Linked Bookings via the API
2.14.1 (2018-05-15)¶
- Add
booking_companiesfield to Agency resource - Remove
bookingsfield from Agency resource - Add
requirementsas_is field to Departure Service resource - Add
policy_emergency_phone_numberfield to Insurance Service resource
2.14.0 (2018-05-15)¶
- Remove deprecated
add_onsfield fromDepartureresource - Add
costsfield toAccommodation & Activity Dossierresources
2.13.0 (2018-03-31)¶
- Add
meal_budgetslist field toCountry Dossierresource - Add
publish_statefield toDossier Featuresresource
2.12.0 (2018-02-14)¶
- Add optional
headersparameter to Query.get to allow HTTP-Headers to be passed. e.g.client.<resource>.get(1234, headers={'A':'a'})(PR/91) - Add
preferred_display_namefield to Agency resource (#92) - Add
booking_companiesarray field to all Product-type Resources. (PR/93)- Accommodation
- Activity
- AgencyChain
- Departure
- SingleSupplement
- TourDossier
- Transport
2.11.4 (2018-01-29)¶
- Add
agency_chainfield toBookingresource - Add
idfield as part of theDossierDetailmodel (PR/89) - Add
agency_chainsfield to theAgencyresource (PR/90) - see https://github.com/gadventures/gapipy/releases/tag/2.11.3 for more details
2.11.0 (2017-12-18)¶
- The Customer Address uses
Addressmodel, and is no longer a dict. - Passing in
uuid=TruetoClientkwargs enablesuuidgeneration for every request.
2.10.0 (2017-12-01)¶
- Add the
amount_pendingfield to theBookingresource - The
PricePromotionmodel extends from thePromotionresource (PR/85) - Update the
Agentclass to use BaseModel classes for theroleandphone_numbersfields. - see https://github.com/gadventures/gapipy/releases/tag/2.10.0 for more details
2.9.3 (2017-11-23)¶
- Expose
requirement_setfordeparture_servicesandactivity_services. - NOTE: We have skipped
2.9.2due to pypi upload issues.
2.9.1 (2017-11-22)¶
- Adds the
optionsmethod on the Resource Query object. A more detailed description of the issue can be found at: https://github.com/gadventures/gapipy/releases/tag/2.9.1 - NOTE: We have skipped
2.9.0due to pypi upload issues
2.8.2 (2017-11-14)¶
- Adds fields
sale_start_datetimeandsale_finish_datetimeto the Promotion resource. The fields mark the start/finish date-time values for when a Promotion is applicable. The values represented are in UTC.
2.8.1 (2017-10-25)¶
- Add new fields to the
AgencyandAgencyChainresources
2.8.0 (2017-10-23)¶
This release adds a behaviour change to the
.all()method on resource Query objects. Prior to this release, the base Resource Query object would retain any previously addedfiltervalues, and be used in subsequent calls. Now the underlying filters are reset after a<resource>.all()call is made.A more detailed description of the issue and fix can be found at:
Adds missing fields to the Agency and Flight Service resources (PR/78)
2.7.6 (2017-10-04)¶
- Add
agencyfield toBookingresource.
2.7.5 (2017-09-25)¶
- Add test fix for Accommodation. It is listable resource as of
2.7.4 - Add regression test for departures.addon.product model
* Ensure Addon’s are instantiated to the correct underlying model.
* Prior to this release, all Addon.product resources were instantiated as
Accommodation.
2.7.4 (2017-09-20)¶
- Add
videos,images, andcategoriesto Activity, Transport, Place, and, Accommodation Dossier resources. - Add
flagsto Itinerary resource - Add list view of
Accommodationsresource
2.7.3 (2017-09-06)¶
- Add
typefield toAgencyDocumentmodel - Add
structured_itinerarymodel collection field toDepartureresource
2.7.2 (2017-08-18)¶
- Fix flight_status Reference value in FlightService resource
2.7.1 (2017-08-18)¶
- Fix: remove FlightStatus import reference for FlightService resource
- Add fields (fixes two broken Resource tests)
- Add
hreffield forcheckinsresource - Add
date_cancelledfield fordeparturesresource
- Add
- Fix broken UpdateCreateResource tests
2.7.0 (2017-08-18)¶
- Remove
flight_statusesandflight_segmentsresources.
2.6.2 (2017-08-11)¶
- Version bump
2.6.1 (2017-08-11)¶
- Adds a Deprecation warning when using the
toursresource.
2.6.0 (2017-08-11)¶
- Fixed issue 65: only write data into the local cache after a fetch from the API, do not write data into the local cache when fetching from the local cache.
2.5.2 (2017-04-26)¶
- Added
futuredependency to setup.py
2.5.1 (2017-02-08)¶
- Fixed an issue in which modifying a nested dictionary caused gapipy to not identify a change in the data.
- Added
tox.inifor testing across Python platforms. - Capture
403Status Codes as aNoneobject.
2.5.0 (2017-01-20)¶
- Provided Python 3 functionality (still Python 2 compatible)
- Removed Python 2 only tests
- Installed
futuremodule for smooth Python 2 to Python 3 migration - Remove
DictToModelclass and the associated tests - Add
DossierResource(s) - Minor field updates to:
Customer,InsuranceService,DepartureService,Booking,FlightStatus,State
2.4.9 (2016-11-22)¶
- Fixed a bug with internal
_get_urifunction.
2.4.8 (2016-11-11)¶
- Adjusted
Checkinresource to meet updated spec.
2.4.7 (2016-10-25)¶
- Added
Checkinresource.
2.4.6 (2016-10-19)¶
- Fix broken
Durationinit inActivityDossier(likely broke due to changes that happened in 2.0.0)
2.4.5 (2016-10-13)¶
- Added
Imageresource definition and put it to use inItineraryand,PlaceDossier
2.4.4 (2016-09-09)¶
- Added
date_last_modifiedanddate_createdtoPromotion.
2.4.3 (2016-09-06)¶
- Added
gendertoCustomer. - Added
places_of_interesttoPlace.
2.4.2 (2016-07-08)¶
- Added
departurereference toDepartureComponent
2.4.1 (2016-07-06)¶
- Removed use of
.iteritemswherever present in favour of.items - Added
featuresrepresentation toActivityDossierand,TransportDossier
2.4.0 (2016-06-29)¶
- Added
CountryDossierresource.
2.3.0 (2016-06-28)¶
- Added
DossierSegmentresource. - Added
ServiceLevelresource.
2.2.2 (2016-06-08)¶
- Added day
labelfield to theItineraryresource.
2.2.1 (2016-06-06)¶
- Added
audiencefield to theDocumentresource.
2.2.0 (2016-05-17)¶
- Added
transactional_email, andemailstoAgencyresource.
2.1.2 (2016-05-17)¶
- Added
audiencetoInvoiceresource.
2.1.1 (2016-04-29)¶
- Removed invalid field,
emailfromAgencyChain
2.1.0 (2016-04-25)¶
- Added new resource,
AgencyChain
2.0.0 (2016-03-11)¶
The global reference to the last instantiated Client has been removed. It is now mandatory to pass in a Client instance when instantiating a Model or Resource.
In practice, this should not introduce too much changes in codebases that are
using gapipy, since resources are mostly interacted with through a Client
instance (for example, api.tours.get(123), or
api.customers.create({...})), instead of being instantiated independently.
The one possible exception is unit testing: in that case, Client.build can
be useful.
The global variable was causing issues with connection pooling when multiple client with different configurations were used at the same time.
1.1.0 (2016-03-11)¶
- Added new resource,
DossierFeature
1.0.0 (2016-02-29)¶
- Adopted Semantic Versioning for this project.
- Refactored how the cache key is set. This is a breaking change for any
modules that implemented their own cache interface. The cache modules are
no longer responsible for defining the cache value, but simply storing
whatever it is given into cache. The
Queryobject now introduces aquery_keyfunction which generates the cache key sent to the cache modules.
0.6.3 (2016-01-21)¶
- Added better error handling to Client.build. An AttributeError raised when instantiating a resource won’t be shadowed by the except block anymore.
0.6.2 (2016-01-20)¶
- Fixed a regression bug when initializing DepartureServiceRoom model.
0.6.1 (2016-01-20)¶
- Fixed a regression bug when initializing services.
0.6.0 (2016-01-20)¶
- Fixed a bug when initializing list of resources.
0.5.5 (2016-01-08)¶
- Added a component of type
ACCOMMODATIONtoItineraries.
0.5.4 (2016-01-04)¶
- Added
associated_servicestoSingleSupplementService
0.5.3 (2015-12-31)¶
- Added
nametoDeparture. - Happy New Year!
0.5.2 (2015-12-15)¶
- Added
variation_idtoBaseCacheto fix aTypeErrorwhen using theNullCache
0.5.1 (2015-12-14)¶
- Add
associated_agencytobookingsresource
0.5.0 (2015-12-10)¶
- Minor adjusted in Query internals to ensure the
variation_idof an Itinerary is handled properly. - Added
ItineraryHighlightsandItineraryMediaresources. These are sub resources of theItinerary
0.4.6 (2015-12-09)¶
- Added connection pool caching to
RedisCache. Instances ofgapipywith the same cache settings (in the same Python process) will share a connection pool.
0.4.5 (2015-11-05)¶
- Added
codefield to thetypeof anItinerary’s listeddetails.
0.4.4 (2015-11-04)¶
- Added the
detailsfield to theItineraryresource – a list of textual details about an itinerary.
0.4.3 (2015-11-03)¶
- Added the
tour_dossierfield to theItineraryresource.
0.4.2 (2015-10-28)¶
- Fixed a bug that would cause
amountwhen looking atPromotionobjects in theDepartureto be removed from the data dict.
0.4.1 (2015-10-16)¶
- Moved an import of
requestsdown from the module level. Fixes issues in CI environments.
0.4.0 (2015-10-13)¶
- Added connection pooling options, see docs for details on
connection_pool_options.
0.3.0 (2015-09-24)¶
- Modified how the
Promotionobject is loaded withinprice_bandson aDeparture. It now correctly captures theamountfield.
0.2.0 (2015-09-15)¶
- Modified objects within
cachemodule to handlevariation_id, which is exposed within theItineraryobject. Previously, theItinerarywould not be correctly stored in cache with its variant reference.
0.1.51 (2015-08-31)¶
- Added the
componentsfield to theDepartureresource.
0.1.50 (2015-07-28)¶
- Fixed an issue with the default
gapipy.cache.NullCachewhenis_cachedwas used.
0.1.49 (2015-07-23)¶
- Added new fields to
Itineraryrevolving around variations. - Added
declined_reasonto all service resources.
0.1.48 (2015-07-15)¶
- Add DeclinedReason resource
0.1.47 (2015-07-08)¶
- Fixed a bug in
APIRequestor.get. Requesting a resource with with an id of0won’t raise an Exception anymore.
0.1.46 (2015-06-10)¶
- Added
associated_servicesandoriginal_departure_serviceto various service resources anddeparture_servicesmodel respectively.
0.1.45 (2015-05-27)¶
- Fixed
productswithin thePromotionresource to properly retaintypeandsub_typefields after being parsed into a dictionary.
0.1.44 (2015-05-22)¶
- Changed default cache_backend to use gapipy.cache.NullCache. Previously, SimpleCache was the default and led to confusion in production environments, specifically as to why resources were not matching the API output. Now, by default, to get any caching from gapipy you must explicitly set it.
0.1.43 (2015-04-29)¶
- Fixed Place init with empty admin_divisions
0.1.42 (2015-04-29)¶
- Added description to TourCategory resource.
0.1.41 (2015-04-14)¶
- Added DepartureComponent resource. See the [official G API documentation for details](https://developers.gadventures.com/docs/departure_component.html)
0.1.40 (2015-04-06)¶
- Added deposit to DepartureService model
0.1.39 (2015-03-31)¶
- Refactor
APIRequestor._request. While this should not change existing functionality, it is now possible to override specific methods onAPIRequestorif needed.
0.1.38 (2015-03-23)¶
- Fixed: Due to inconsistencies in the G API with regards to nested resources, the fetch function was modified to use the raw data from the API, rather than a specific set of allowed fields.
0.1.37 (2015-03-23)¶
- Fixed: Iterating over
productswithin thepromotionsobject now works as expected. Previously, accessing theproductsattribute would result in a Query object with incorrect parameters.
0.1.36 (2015-03-17)¶
- Support free to amount price range formatting (e.g. Free-10CAD)
0.1.35 (2015-03-12)¶
- Added duration_min & duration_max to ActivityDossier model
0.1.34 (2015-03-11)¶
- Added OptionalActivity model
- All Dossiers with details: * Now represented as list of DossierDetail models * Added convenience methods for retrieving specific details
- ItineraryComponent and ActivityDossier use new Duration model for their duration field/property
- Added duration_label and location_label to ItineraryComponent
- Added duration_label, price_per_person_label, and price_per_group_label to ActivityDossier
0.1.33 (2015-03-02)¶
- Added name field to the Itinerary resource.
0.1.32 (2015-02-18)¶
- Changed cache key creation to account for GAPI_LANGUAGE when the environment variable is set.
0.1.31 (2015-02-18)¶
- Fixed a bug when setting _resource_fields in
DepartureServiceresource
0.1.30 (2015-02-11)¶
TourDossier.structured_itinerariesnow refers to a list of Itinerary resources
0.1.29 (2015-02-10)¶
- Added
TransportDossierandItineraryresources. - The reference to the itinerary in a
DepartureServiceis now a full-fledgedItineraryresource.
0.1.28 (2015-01-22)¶
- Bug fix to correctly send
Content-Type: application/jsonin POST, PUT, or PATCH.
0.1.27 (2015-01-19)¶
- Update
DepartureServiceobject to contain a reference to itsItinerary
0.1.26 (2015-01-14)¶
- Normalize API request headers, to promote caching.
0.1.25 (2015-01-09)¶
- Added
ActivityDossierandAccommodationDossierresources, as well as references to it fromActivityandAccommodation.
0.1.24 (2015-01-07)¶
- Added
PlaceDossierresource, as well as reference to it fromPlace
0.1.22 (2014-12-12)¶
- Added
advertised_departurestoTourDossier
0.1.21 (2014-11-26)¶
- Fixed a bug with promotions on a Price object. When promotions were accessed, gapipy would query for all promotions, rather than returning the inline list.
0.1.20 (2014-11-20)¶
- Departure resource is now listable via filters.
0.1.19 (2014-11-17)¶
- Fixed a bug with RedisCache.is_cached where it would not use the set key_prefix when checking for existence in cache. Effectively, it would always return False
0.1.18 (2014-11-12)¶
- When setting a date_field, initiate it as a datetime.date type.
0.1.17 (2014-11-07)¶
- Deprecated RedisHashCache from cache backends available by default. Was not well tested or reliable.
0.1.16 (2014-10-28)¶
- Fixed a bug where if a model field received null as a value, it would fail. Now, if the result is null, the model field will have an appropriate None value.
0.1.15 (2014-10-23)¶
- Fix a bug in the DepartureRoom model. The price_bands attribute is now properly set.
0.1.14 (2014-10-22)¶
- Fixed a bug where AgencyDocument was not included in the code base.
0.1.13 (2014-10-21)¶
- Add
latitude,longitude, anddocumentsto theAgencyresource.
0.1.12 (2014-10-20)¶
date_createdon theAgencyresource is correctly parsed as a local time.
0.1.11 (2014-10-15)¶
- Improve the performance of
Resource.fetchby handling cache get/set.
0.1.10 (2014-10-09)¶
- Fix a bug in AccommodationRoom price bands. The season_dates and blackout_dates attributes are now properly set.
0.1.9 (2014-09-23)¶
- Add iso_639_3 and iso_639_1 to Language
0.1.8 (2014-09-17)¶
- Remove the add_ons field in Departure, and add addons.
0.1.7 (2014-08-22)¶
- Fix a bug when initializing AccommodationRoom from cached data.
0.1.6 (2014-08-19)¶
- Add Query.purge_cached
0.1.5 (2014-07-29)¶
- Add details field to the list of incomplete_requirements in a DepartureService.
0.1.4 (2014-07-21)¶
- Removed sending of header X-HTTP-Method-Override: PATCH when the update command is called. Now, when .save(partial=True) is called, the correct PATCH HTTP method will be sent with the request.
0.1.3 (2014-07-18)¶
- Return
Noneinstead of raising a HTTPError 404 exception when fetching a non-existing resource by id. - Added ability to create resources from the Query objects on the client
instance.
e.g.:
api.customers.create({'name': {'legal_first_name': 'Pat', ...}, ...})
0.1.2 (2014-07-14)¶
- Added Query.is_cached
- Added cache options
0.1.1 (2014-06-27)¶
- Use setuptools find_packages
0.1.0 (2014-06-20)¶
- First release on PyPI.