Skip to main content

A SDK for interacting with the Quandoo API, it is a work in progress

Project description

Quandoo for Python

This is a fairly lightwieght SDK for interacting with the Quandoo API, it is a work in progress.

Installation

Install using pip :

$ pip install Quandoo

Include Quandoo in your application

import quandoo

Get API Key + Agent ID

These are obtained directly from a Quandoo representative. Quandoo docs on authentication.

oauth_token = "<oauth_token>"
agent_id = "<agent_id>"

Get Quandoo Agent instance

To get an Agent instance to Quandoo just provide the X-Quandoo-AuthToken and your Agent ID.

agent = quandoo.Agent(oauth_token, agent_id)

To get a test Agent instance be sure to use your test credentials

agent_test = quandoo.Agent(oauth_token_test, agent_id_test, test=True)

Usage

Agent

Quandoo Docs: "For Quandoo to attribute reservations correctly, we implement something called agent id (aid) tracking. This will be issued to you at the same time as you receive your Auth token. On urls to the portal or widget the aid is set on the given url automatically (based on the authtoken) and is stored for the duration of the browsing session only. When a reservation is made, the aid will be passed and stored with the reservation. With direct API reservations, agent_id must be specified in the request body."

Get Merchant

Takes a Merchant ID:

merchant = agent.get_merchant("123456")
print(merchant)

Returns a Merchant object:

Merchant(
	id: 123456,
	name: The Best Restaurant
)

Get Customer

Takes a Customer ID:

customer = agent.get_customer("0bd07451-0c0e-40e9-8429-8a589f59e254")
print(customer)

Returns a Customer object:

Customer(
	id: 0bd07451-0c0e-40e9-8429-8a589f59e254,
	firstName: Fraser,
	lastName: Basil,
	email: fraserbasil@mail.com,
	phoneNumber: +614111222333
)

Get Reservation

Takes a Reservation ID:

reservation = agent.get_reservation("77f9dd33-9b24-4a66-a58c-7a059cecba5f")
print(reservation)

Returns a Reservation object:

Reservation(
	id: 77f9dd33-9b24-4a66-a58c-7a059cecba5f,
	status: AUTOMATIC_CONFIRMED,
	startTime: 2019-07-01T12:00:00+10:00,
	endTime: 2019-07-01T13:30:00+10:00,
	capacity: 2,
	merchantId: 123456,
	customerId: 0bd07451-0c0e-40e9-8429-8a589f59e254
)

Merchant

Quandoo Docs: "Internally this is how we refer to our partner restaurants. Every merchant has an ID or merchant ID assigned to them."

Get Customers

Takes nothing:

merchant = agent.get_merchant(merchant_id)

customers = merchant.get_customers()
print(customers)

Returns a list of Customer objects:

[
    Customer(
        id: 0bd07451-0c0e-40e9-8429-8a589f59e254,
        firstName: Fraser,
        lastName: Basil,
        email: fraserbasil@mail.com,
        phoneNumber: +61466920029
    ), 
    Customer(
        id: 2b2a541b6-e352-414d-j62f-71ad9fb695d,
        firstName: Carmen,
        lastName: Test,
        email: carmen.test@mail.com,
        phoneNumber: +123456789
    )]

Get Reservations

Takes nothing

reservations = merchant.get_reservations()
print(reservations)

Returns a list of Reservation objects:

[
	Reservation(
		id: f140dcb3-a318-400c-9767-6a6bd93c5e69,
		status: AUTOMATIC_CONFIRMED,
		startTime: 2019-06-01T10:00:00+10:00,
		endTime: 2019-06-01T11:30:00+10:00,
		capacity: 4,
		merchantId: 123456,
		customerId: 0bd07451-0c0e-40e9-8429-8a589f59e254
	), 
	Reservation(
		id: 886021e2-5202-42a4-aaba-c6c83c520600,
		status: AUTOMATIC_CONFIRMED,
		startTime: 2019-06-01T12:00:00+10:00,
		endTime: 2019-06-01T13:30:00+10:00,
		capacity: 2,
		merchantId: 123456,
		customerId: 0bd07451-0c0e-40e9-8429-8a589f59e254
	)]

Get Available Times

Takes a capacity for the reservation as well as the QuandooDatetime

capacity = 2
res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)

avail_times = merchant.get_available_times(capacity, res_datetime)
print(avail_times)

Returns list of QuandooDatetime objects

[
	QuandooDatetime(
		datetime: 2019-07-01 12:00:00+10:00,
		q_datetime: 2019-07-01T12:00:00+10:00,
		pretty_date: 12:00 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 12:15:00+10:00,
		q_datetime: 2019-07-01T12:15:00+10:00,
		pretty_date: 12:15 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 12:30:00+10:00,
		q_datetime: 2019-07-01T12:30:00+10:00,
		pretty_date: 12:30 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 12:45:00+10:00,
		q_datetime: 2019-07-01T12:45:00+10:00,
		pretty_date: 12:45 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 13:00:00+10:00,
		q_datetime: 2019-07-01T13:00:00+10:00,
		pretty_date: 1:00 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 13:15:00+10:00,
		q_datetime: 2019-07-01T13:15:00+10:00,
		pretty_date: 1:15 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 13:30:00+10:00,
		q_datetime: 2019-07-01T13:30:00+10:00,
		pretty_date: 1:30 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 13:45:00+10:00,
		q_datetime: 2019-07-01T13:45:00+10:00,
		pretty_date: 1:45 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 14:00:00+10:00,
		q_datetime: 2019-07-01T14:00:00+10:00,
		pretty_date: 2:00 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 14:15:00+10:00,
		q_datetime: 2019-07-01T14:15:00+10:00,
		pretty_date: 2:15 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 14:30:00+10:00,
		q_datetime: 2019-07-01T14:30:00+10:00,
		pretty_date: 2:30 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 14:45:00+10:00,
		q_datetime: 2019-07-01T14:45:00+10:00,
		pretty_date: 2:45 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 15:00:00+10:00,
		q_datetime: 2019-07-01T15:00:00+10:00,
		pretty_date: 3:00 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 15:15:00+10:00,
		q_datetime: 2019-07-01T15:15:00+10:00,
		pretty_date: 3:15 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 15:30:00+10:00,
		q_datetime: 2019-07-01T15:30:00+10:00,
		pretty_date: 3:30 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 15:45:00+10:00,
		q_datetime: 2019-07-01T15:45:00+10:00,
		pretty_date: 3:45 PM, Mon 1 July 2019
	), 
	QuandooDatetime(
		datetime: 2019-07-01 16:00:00+10:00,
		q_datetime: 2019-07-01T16:00:00+10:00,
		pretty_date: 4:00 PM, Mon 1 July 2019
	)]

Check if specific time is available

Takes a capacity for the reservation as well as the QuandooDatetime

capacity = 2
res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)

avail_times = merchant.is_available(capacity, res_datetime)
print(avail_times)

Returns a boolean

True

Create Reservation

Takes a Customer and capacity for the reservation as well as the QuandooDatetime

customer = agent.get_customer(customer_id)
capacity = 2
res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)

new_res = merchant.create_reservation(customer, capacity, res_datetime)
print(new_res)

Returns a NewReservation object:

NewReservation(
	id: b97d9da6-b38f-4089-8456-514201dc94d5,
	number: 13096703,
	status: AUTOMATIC_CONFIRMED,
	customerId: 0bd07451-0c0e-40e9-8429-8a589f59e254
)

Customer

Quandoo Docs (referred to as "Guests"): "These are the people attending the reservation."

Customers (Guests) are not able to be created explcitly with Quandoo's current API implementation, new Customers are created when creating a new Reservation, if the Customer does not exist (indexed by email) a new Customer will be created.

Reservation

Quandoo Docs: "A reservation ‘belongs’ to both a merchant and a guest. Reservations can go through multiple states. The current functionality of the API only allows creation."

Cancel

Takes nothing:

reservation_id = "f140dcb3-a318-400c-9767-6a6bd93c5e69"

reservation = agent.get_reservation(reservation_id)
reservation.cancel()

Returns nothing:


Reconfirm

Takes nothing:

reservation_id = "f140dcb3-a318-400c-9767-6a6bd93c5e69"

reservation = agent.get_reservation(reservation_id)
reservation.reconfirm()

Returns nothing:


Change Capacity

Takes the new capacity:

reservation_id = "f140dcb3-a318-400c-9767-6a6bd93c5e69"
new_capacity = 2

reservation = agent.get_reservation(reservation_id)
reservation.change_capacity(new_capacity)

Returns nothing:


NewReservation

Similar to Reservation, it is what is returned on Reservation creation.

Get Full Reservation

Takes nothing:

customer = agent.get_customer(customer_id)
capacity = 2
res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)

new_reservation = merchant.create_reservation(customer, capacity, res_datetime)
new_reservation_full = new_reservation.get_reservation()
print(new_reservation_full)

Returns a Reservation object:

Reservation(
	id: a1584003-bb70-451c-aa52-0ad58454faf8,
	status: AUTOMATIC_CONFIRMED,
	startTime: 2019-06-01T12:00:00+10:00,
	endTime: 2019-06-01T13:30:00+10:00,
	capacity: 2,
	merchantId: 123456,
	customerId: 0bd07451-0c0e-40e9-8429-8a589f59e254
)

QuandooDatetime

A datetime class with extra functionality useful to Quandoo, ie a time resolution of 15 minutes

Get specfic time

Takes usual datetime paramters, but has a time resolution of 15 minutes

qdt = res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)
print(qdt)

Returns a QuandooDatetimeObject

QuandooDatetime(
	datetime: 2019-07-01 12:00:00+10:00,
	q_datetime: 2019-07-01T12:00:00+10:00,
	pretty_date: 12:00 PM, Mon 1 July 2019
)

Get current time

Takes nothing:

qdt = QuandooDatetime.now()
print(qdt)

Returns a QuandooDatetimeObject

QuandooDatetime(
	datetime: 2019-06-03 22:45:00+10:00,
	q_datetime: 2019-06-03T22:45:00+10:00,
	pretty_date: 10:45 PM, Mon 3 June 2019
)

Parse time returned by Quandoo API

Takes a string:

qdt = QuandooDatetime.parse_str_qdt("2019-07-01T12:00:00+10:00")
print(qdt)

Returns a QuandooDatetimeObject

QuandooDatetime(
	datetime: 2019-07-01 12:00:00+10:00,
	q_datetime: 2019-07-01T12:00:00+10:00,
	pretty_date: 12:00 PM, Mon 1 July 2019
)

Get Quandoo formatted datetime string

Takes nothing:

qdt = res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)
print(qdt.get_qdt())

Returns a Quandoo formatted datetime string

2019-07-01T12:00:00+10:00

Get formatted datetime string that reads well

Takes nothing:

qdt = res_datetime = QuandooDatetime(year=2019, month=7, day=1, hour=12, minute=0)
print(qdt.pretty_date())

Returns a formatted datetime string that reads well

12:00 PM, Mon 1 July 2019

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Quandoo-1.2.7.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

Quandoo-1.2.7-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file Quandoo-1.2.7.tar.gz.

File metadata

  • Download URL: Quandoo-1.2.7.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for Quandoo-1.2.7.tar.gz
Algorithm Hash digest
SHA256 e62a4484228deeec00e16eb0b1b1f84d32e8b9785b02101baa8c5307e8084f55
MD5 bda334284a84831b2c876483c3ca8fec
BLAKE2b-256 d1f64ed476c5908609c53cd050f7e8ee67f7bdfcef72a7655eb0eb957da39538

See more details on using hashes here.

File details

Details for the file Quandoo-1.2.7-py3-none-any.whl.

File metadata

  • Download URL: Quandoo-1.2.7-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for Quandoo-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 1d6129c5d28bc92f12cc4af0c35ce0c941edce0df9d55746eec102418a9bee5d
MD5 45e8f89192e16c0d778520bdbc81b6e9
BLAKE2b-256 bf6c23d4e35652d3eef96e71f87a68ad3c1b2e3ac1cf52e9783b9fec7d583b1c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page