Пример #1
0
    def _upload_spreadsheet(self, usage_file, spreadsheet):
        # type: (UsageFile, openpyxl.Workbook) -> None

        # Generate spreadsheet file
        with NamedTemporaryFile() as tmp:
            spreadsheet.save(tmp)
            tmp.seek(0)
            file_contents = tmp.read()

        # Setup request
        url = '{}usage/files/{}/upload/'.format(self.config.api_url,
                                                usage_file.id)
        headers = self._api.headers
        headers['Accept'] = 'application/json'
        del headers[
            'Content-Type']  # This must NOT be set for multipart post requests
        multipart = {'usage_file': ('usage_file.xlsx', file_contents)}
        self.logger.info('HTTP Request: {} - {} - {}'.format(
            url, headers, multipart))

        # Post request
        try:
            content, status = self._api.post(url=url,
                                             headers=headers,
                                             files=multipart)
        except requests.RequestException as ex:
            raise FileCreationError('Error uploading file: {}'.format(ex))
        self.logger.info('HTTP Code: {}'.format(status))
        if status != 201:
            msg = 'Unexpected server response, returned code {}'.format(status)
            self.logger.error('{} -- Raw response: {}'.format(msg, content))
            raise FileCreationError(msg)
Пример #2
0
 def _create_usage_file(self, usage_file):
     # type: (UsageFile) -> UsageFile
     if not usage_file.name or not usage_file.product.id or not usage_file.contract.id:
         raise FileCreationError(
             'Usage File Creation requires name, product id, contract id')
     if not usage_file.description:
         # Could be because description is empty or None, so make sure it is empty
         usage_file.description = ''
     response, _ = self._api.post(json=usage_file.json)
     return self.model_class.deserialize(response)