1- #!/usr/bin/env python
21# -*- coding: utf-8 -*-
32""" Python Wrapper for Bintray API
43
54 https://bintray.com/docs/api
65"""
76import os
8- import logging
9- import requests
10- from requests .auth import HTTPBasicAuth
7+
8+ from bintray .requester import Requester
9+ from bintray .logger import Logger
10+ from bintray .utils import bool_to_number
1111
1212
1313__version__ = "0.1.1"
@@ -31,51 +31,8 @@ def __init__(self, username=None, api_key=None):
3131 """
3232 self ._username = username or os .getenv ("BINTRAY_USERNAME" )
3333 self ._password = api_key or os .getenv ("BINTRAY_API_KEY" )
34-
35- self ._logger = logging .getLogger (__file__ )
36- self ._logger .setLevel (logging .INFO )
37- formatter = logging .Formatter ('%(asctime)s:%(levelname)s: %(message)s' )
38- ch = logging .StreamHandler ()
39- level = int (os .getenv ("BINTRAY_LOGGING_LEVEL" , logging .INFO ))
40- ch .setLevel (level )
41- ch .setFormatter (formatter )
42- self ._logger .addHandler (ch )
43-
44- def _get_authentication (self ):
45- """ Retrieve Basic HTTP Authentication based on username and API key
46-
47- :return: Basic Authentication handler
48- """
49- if not self ._username or not self ._password :
50- return None
51- return HTTPBasicAuth (self ._username , self ._password )
52-
53- def _add_status_code (self , response ):
54- """ Update JSON result with error and status code
55-
56- :param response: Requests response
57- :return: Response JSON
58- """
59- json_data = response .json ()
60- if isinstance (json_data , list ):
61- json_data .append ({"statusCode" : response .status_code , "error" : not response .ok })
62- else :
63- json_data .update ({"statusCode" : response .status_code , "error" : not response .ok })
64- return json_data
65-
66- def _bool_to_number (self , value ):
67- """ Convert boolean result into numeric string
68-
69- :param value: Any boolean value
70- :return: "1" when True. Otherwise, "0"
71- """
72- return "1" if value else "0"
73-
74- def _raise_error (self , message , response ):
75- try :
76- response .raise_for_status ()
77- except Exception as error :
78- raise Exception ("{} ({}): {}" .format (message , response .status_code , str (error )))
34+ self ._requester = Requester (self ._username , self ._password )
35+ self ._logger = Logger ().logger
7936
8037 # Files
8138
@@ -90,16 +47,13 @@ def get_package_files(self, subject, repo, package, include_unpublished=False):
9047 :param include_unpublished: Show not published files
9148 :return: List with all files
9249 """
93- parameters = {"include_unpublished" : self . _bool_to_number (include_unpublished )}
50+ parameters = {"include_unpublished" : bool_to_number (include_unpublished )}
9451 url = "{}/packages/{}/{}/{}/files?include_unpublished={}" .format (Bintray .BINTRAY_URL ,
9552 subject ,
9653 repo ,
9754 package ,
9855 include_unpublished )
99- response = requests .get (url , auth = self ._get_authentication (), params = parameters )
100- if not response .ok :
101- self ._raise_error ("Could not list package files" , response )
102- return self ._add_status_code (response )
56+ return self ._requester .get (url , parameters )
10357
10458 # Content Uploading & Publishing
10559
@@ -121,17 +75,15 @@ def upload_content(self, subject, repo, package, version, remote_file_path, loca
12175 """
12276 url = "{}/content/{}/{}/{}/{}/{}" .format (Bintray .BINTRAY_URL , subject , repo , package ,
12377 version , remote_file_path )
124- parameters = {"publish" : self . _bool_to_number (publish ),
125- "override" : self . _bool_to_number (override ),
126- "explode" : self . _bool_to_number (explode )}
78+ parameters = {"publish" : bool_to_number (publish ),
79+ "override" : bool_to_number (override ),
80+ "explode" : bool_to_number (explode )}
12781
12882 with open (local_file_path , 'rb' ) as file_content :
129- response = requests .put (url , auth = self ._get_authentication (), params = parameters ,
130- data = file_content )
131- if response .status_code != 201 :
132- self ._raise_error ("Could not upload" , response )
83+ response = self ._requester .put (url , params = parameters , data = file_content )
84+
13385 self ._logger .info ("Upload successfully: {}" .format (url ))
134- return self . _add_status_code ( response )
86+ return response
13587
13688 # Content Downloading
13789
@@ -145,13 +97,13 @@ def download_content(self, subject, repo, remote_file_path, local_file_path):
14597 """
14698 download_base_url = "https://dl.bintray.com"
14799 url = "{}/{}/{}/{}" .format (download_base_url , subject , repo , remote_file_path )
148- response = requests .get (url , auth = self ._get_authentication ())
149- if not response .ok :
150- self ._raise_error ("Could not download file content" , response )
100+ response , content = self ._requester .download (url )
101+
151102 with open (local_file_path , 'wb' ) as local_fd :
152- local_fd .write (response .content )
103+ local_fd .write (content )
104+
153105 self ._logger .info ("Download successfully: {}" .format (url ))
154- return self . _add_status_code ( response )
106+ return response
155107
156108 # Licenses
157109
@@ -161,8 +113,4 @@ def get_oss_licenses(self):
161113 :return: List with OSS licenses
162114 """
163115 url = "{}/licenses/oss_licenses" .format (Bintray .BINTRAY_URL )
164- response = requests .get (url , auth = self ._get_authentication ())
165- if not response .ok :
166- self ._raise_error ("Could not get OSS licenses" , response )
167- return self ._add_status_code (response )
168-
116+ return self ._requester .get (url )
0 commit comments