def create_asset(self, release_id, asset):
     asset_name = os.path.basename(asset)
     url = self._UPLOADS_URL % (release_id, asset_name)
     # Our files are small enough to be loaded directly into memory.
     data = open(asset, 'rb').read()
     req = sanitized_Request(url, data)
     mime_type, _ = mimetypes.guess_type(asset_name)
     req.add_header('Content-Type', mime_type or 'application/octet-stream')
     return self._call(req)
 def create_release(self,
                    tag_name,
                    name=None,
                    body='',
                    draft=False,
                    prerelease=False):
     data = {
         'tag_name': tag_name,
         'target_commitish': 'master',
         'name': name,
         'body': body,
         'draft': draft,
         'prerelease': prerelease,
     }
     req = sanitized_Request(self._API_URL,
                             json.dumps(data).encode('utf-8'))
     return self._call(req)
 def _call(self, req):
     if isinstance(req, compat_basestring):
         req = sanitized_Request(req)
     req.add_header('Authorization', 'token %s' % self._token)
     response = self._opener.open(req).read().decode('utf-8')
     return json.loads(response)