예제 #1
0
    def __init__(self, oauth_token, agent_id, test=False):
        self.oauth_token = oauth_token
        self.agent_id = agent_id

        self.url = urljoin(config.base_url_test,
                           config.version) if test else urljoin(
                               config.base_url, config.version)

        self.headers["X-Quandoo-AuthToken"] = oauth_token
예제 #2
0
    def _update(self,
                new_status: str = None,
                new_capacity: int = None,
                new_area_id: int = None,
                new_start_time: QuandooDatetime = None,
                reservation_tags=[]):
        data = {"reservation": {}}

        if new_status is not None:
            data["reservation"]["status"] = new_status
        if new_capacity is not None:
            data["reservation"]["capacity"] = new_capacity
        if new_area_id is not None:
            data["reservation"]["areaId"] = new_area_id
        if new_start_time is not None:
            data["reservation"]["dateTime"] = new_start_time.get_qdt()
        if reservation_tags:
            data["reservation"]['reservationTags'] = reservation_tags

        request = urljoin(self.agent.url, "reservations", self.id)
        response = requests.patch(request,
                                  headers=self.agent.headers,
                                  json=data)

        if response.status_code == 200:
            # TO DO
            # Change instance variables - by new fetch or local change?
            # new fetch is slower vs local change needs to re calc endTime
            return

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #3
0
    def get_available_times(self,
                            pax: int,
                            qdt: QuandooDatetime,
                            duration=2,
                            area_id=None):
        params = {
            "agentId": self.agent.agent_id,
            "capacity": pax,
            "fromTime": qdt.datetime.strftime("%H:%M"),
            "toTime":
            (qdt.datetime + timedelta(hours=duration)).strftime("%H:%M")
        }
        if area_id is not None:
            params["areaId"] = area_id

        request = urljoin(self.agent.url, "merchants",
                          self.id, "availabilities",
                          qdt.datetime.strftime("%Y-%m-%d"), "times")
        response = requests.get(request,
                                headers=self.agent.headers,
                                params=params)

        if response.status_code == 200:
            return [
                QuandooDatetime.parse_str_qdt(i["dateTime"])
                for i in json.loads(response.text)["timeSlots"]
            ]

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #4
0
    def create_reservation_enquiry(self, customer, pax: int,
                                   start_qdt: QuandooDatetime,
                                   end_qdt: QuandooDatetime, message: str):
        data = {
            "reservationEnquiry": {
                "merchantId": self.id,
                "capacity": pax,
                "startDateTime": start_qdt.get_qdt(),
                "endDateTime": end_qdt.get_qdt(),
                "message": message
            },
            "customer": customer.to_json(),
            "tracking": {
                "agent": {
                    "id": self.agent.agent_id
                }
            }
        }

        request = urljoin(self.agent.url, "reservation-enquiries")
        response = requests.put(request, headers=self.agent.headers, json=data)

        if response.status_code == 201:
            return NewReservationEnquiry(json.loads(response.text), self.agent)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #5
0
    def get_reservation(self, reservation_id):
        request = urljoin(self.url, "reservations", reservation_id)
        response = requests.get(request, headers=self.headers)

        if response.status_code == 200:
            return Reservation(json.loads(response.text), self)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #6
0
    def get_customer(self, customer_id):
        request = urljoin(self.url, "customers", customer_id)
        response = requests.get(request, headers=self.headers)

        if response.status_code == 200:
            return Customer(json.loads(response.text), self)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #7
0
    def get_merchant(self, merchant_id):
        request = urljoin(self.url, "merchants", merchant_id)
        response = requests.get(request, headers=self.headers)

        if response.status_code == 200:
            return Merchant(json.loads(response.text), self)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #8
0
    def get_reservation_tags(self):
        request = urljoin(self.agent.url, 'merchants', self.id,
                          'reservation_tags')
        response = requests.put(request, headers=self.agent.headers)

        if response.status_code == 200:
            return json.dumps(json.loads(response.text), indent=4)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
    def get_messages(self):
        request = urljoin(self.agent.url, "reservation-enquiries", self.id,
                          "messages")
        response = requests.get(request)

        if response.status_code == 200:
            return [Message(i) for i in json.loads(response.text)["messages"]]

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #10
0
    def merchants(self, params=None):
        request = urljoin(self.url, 'merchants')
        response = requests.get(request, headers=self.headers, params=params)

        if response.status_code == 200:
            return [
                Merchant(i, self)
                for i in json.loads(response.text)['merchants']
            ]

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #11
0
    def get_reviews(self, offset=0, limit=10):
        params = {"offset": offset, "limit": limit}

        request = urljoin(self.agent.url, "merchants", self.id, "reviews")
        response = requests.get(request,
                                headers=self.agent.headers,
                                params=params)

        if response.status_code == 200:
            return json.dumps(json.loads(response.text), indent=4)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
    def __change_status(self, new_status):
        data = {"status": new_status}
        request = urljoin(self.agent.url, "reservation-enquiries", self.id)
        response = requests.patch(request,
                                  headers=self.agent.headers,
                                  json=data)

        if response.status_code == 200:
            self.status = new_status
            return

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #13
0
    def create_reservation(self,
                           customer,
                           pax: int,
                           qdt: QuandooDatetime,
                           area_id=None,
                           order_id=None,
                           extra_info=None,
                           reservation_tags=[]):
        data = {
            "reservation": {
                "merchantId": self.id,
                "capacity": pax,
                "dateTime": qdt.get_qdt()
            },
            "customer": customer.to_json(),
            "tracking": {
                "agent": {
                    "id": self.agent.agent_id
                }
            }
        }
        if area_id is not None:
            data["reservation"]["areaId"] = area_id
        if order_id is not None:
            data["reservation"]["orderId"] = order_id
        if extra_info is not None:
            data["reservation"]["extraInfo"] = extra_info
        if reservation_tags:
            data["reservation"]['reservationTags'] = reservation_tags

        request = urljoin(self.agent.url, "reservations")
        response = requests.put(request, headers=self.agent.headers, json=data)

        if response.status_code == 200:
            return NewReservation(json.loads(response.text), self.agent)

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #14
0
    def get_reservations(self,
                         offset=0,
                         limit=100,
                         earliest=None,
                         latest=None):
        params = {"offset": offset, "limit": limit}
        if earliest is not None:
            params["earliest"] = earliest.get_urldt()
        if latest is not None:
            params["latest"] = latest.get_urldt()

        request = urljoin(self.agent.url, "merchants", self.id, "reservations")
        response = requests.get(request,
                                headers=self.agent.headers,
                                params=params)

        if response.status_code == 200:
            return [
                Reservation(i, self.agent)
                for i in json.loads(response.text)["reservations"]
            ]

        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #15
0
    def get_customers(self,
                      offset=0,
                      limit=100,
                      modified_since: QuandooDatetime = None,
                      modified_until: QuandooDatetime = None):
        params = {"offset": offset, "limit": limit}
        if modified_since is not None:
            params["modifiedSince"] = modified_since.get_urldt()
        if modified_until is not None:
            params["modifiedUntil"] = modified_until.get_urldt()

        request = urljoin(self.agent.url, "merchants", self.id, "customer")
        response = requests.get(request,
                                headers=self.agent.headers,
                                params=params)

        if response.status_code == 200:
            return [
                Customer(i, self.agent)
                for i in json.loads(response.text)["result"]
            ]
        print(request)
        raise PoorResponse(response.status_code, json.loads(response.text),
                           request)
예제 #16
0
def status():
    request = urljoin(config.base_url, config.version, "status")
    response = requests.get(request)

    return response.status_code