def send_request(self,
                  action,
                  method='GET',
                  data=None,
                  filter=None,
                  json_output=True):
     """Zašle request pre SF API
     :param action: URL akcie
     :type action: basestring
     :param method: HTTP metóda (GET alebo POST)
     :type method: basestring
     :param data: Dodatočné dáta posielané na SF API
     :type data: dict
     :param filter: Reťazec filtrovania výsledku
     :type filter: basestring
     :param json_output: Indikuje, či je výsledok interpretovaný ako JSON dáta
     :type json_output: bool
     :return: Dáta získané z SF API v stanovenom formáte (JSON/RAW)
     :type return: dict/basestring
     :raise: SFAPIException v prípade, že SF API odpovedalo chbovým HTTP status kódom
     """
     url_portions = [self.sfapi_base_url, action]
     if filter:
         url_portions.append(filter)
     url = "".join(url_portions)
     req = requests.request(method,
                            url,
                            data=data,
                            headers=self.auth_header)
     if req.status_code != requests.codes.ok:
         error_data = {
             'method': method,
             'action': action,
             'code': req.status_code
         }
         raise SFAPIException(
             '%(method)s on %(action)s failed with status code %(code)d' %
             error_data)
     if json_output:
         returned_string = json.loads(req.text)
         if 'error' in returned_string and returned_string['error'] == 1:
             logging.error("Error message {}".format(req.content))
             raise SFAPIException('Error while call: %(error_message)s' %
                                  returned_string)
         else:
             return returned_string
     else:
         return req.content
    def create_invoice(self, invoice):
        """
        Vytvorí v SF faktúru
        :param invoice: Objekt faktúry
        :type invoice: SFInvoice
        :return: :raise:
        """
        if not isinstance(invoice, SFInvoice):
            raise SFAPIException('Passed invoice is not SFInvoice instance!')

        data = {
            'Client': invoice.client.params,
            'Invoice': invoice.params,
            'InvoiceItem': []
        }
        for item in invoice.items:
            data['InvoiceItem'].append(item.params)

        retv = self.send_request(self.create_invoice_url,
                                 method='POST',
                                 data={'data': json.dumps(data)})
        if retv['error'] == 0:
            invoice_id = retv['data']['Invoice']['id']
            logger.info('Created invoice id {}'.format(invoice_id))
            invoice.id = invoice_id
        else:
            err_no = retv['error']
            err_msg = retv['error_message']
            logger.error('Unable to create invoice - errors {} {}'.format(
                err_no, err_msg))
        return retv
Beispiel #3
0
    def add_item(self, item):
        """
        @param item:SFExpenseItem instance
        """
        if not isinstance(SFExpenseItem, item):
            raise SFAPIException('Passed object is not a SFExpenseItem instance')

        if self.items:
            self.items.append(item)
        else:
            self.items = [item]
    def construct_filter(self, params):
        """
        Vytvor filter string použiteľný v URL na základe zadaného slovníka
        :param params:
        :return: string vygenerovaný zo slovníka
        """
        if not isinstance(params, dict):
            raise SFAPIException('Filter parameters must be a dictionary')
        filter_url = []
        for (k, v) in params.items():
            filter_url.append("".join(['/', k, ':', str(v)]))

        return "".join(filter_url)
Beispiel #5
0
    def create_invoice(self, invoice):
        """
        Vytvorí v SF faktúru
        :param invoice: Objekt faktúry
        :type invoice: SFInvoice
        :return: :raise:
        """
        if not isinstance(invoice, SFInvoice):
            raise SFAPIException('Passed invoice is not SFInvoice instance!')

        data = {'Client': invoice.client.params, 'Invoice': invoice.params, 'InvoiceItem': []}
        for item in invoice.items:
            data['InvoiceItem'].append(item.params)

        return self.send_request(self.create_invoice_url, method='POST', data={'data': json.dumps(data)})
    def create_contact(self, contact):
        """
        Vytvorí v SF kontakt
        :param contact: Objekt kontaktu
        :type contact: SFInvoiceClient
        :return: :raise:
        """
        if not isinstance(contact, SFInvoiceClient):
            raise SFAPIException(
                'Passed invoice is not SFInvoiceClient instance!')

        data = {'Client': contact.params}

        return self.send_request(self.create_contact_url,
                                 method='POST',
                                 data={'data': json.dumps(data)})
    def edit_invoice(self, invoice):
        if not isinstance(invoice, SFInvoice):
            raise SFAPIException('Passed invoice is not SFInvoice instance!')

        data = {'Invoice': invoice.params, 'InvoiceItem': []}
        for item in invoice.items:
            data['InvoiceItem'].append(item.params)

        retv = self.send_request(self.edit_invoice_url,
                                 method='POST',
                                 data={'data': json.dumps(data)})
        if retv.get('error', 0) == 0:
            invoice_id = retv['data']['Invoice']['id']
            logger.info('Updated invoice id {}'.format(invoice_id))
            invoice.id = invoice_id
        else:
            err_no = retv.get('error', None)
            err_msg = retv.get('error_message', None)
            logger.error('Unable to update invoice - errors {} {}'.format(
                err_no, err_msg))
        return retv