64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """passbook nexus_upload management command"""
 | |
| from base64 import b64decode
 | |
| 
 | |
| import requests
 | |
| from django.core.management.base import BaseCommand
 | |
| 
 | |
| 
 | |
| class Command(BaseCommand):
 | |
|     """Upload debian package to nexus repository"""
 | |
| 
 | |
|     url = None
 | |
|     user = None
 | |
|     password = None
 | |
| 
 | |
|     def add_arguments(self, parser):
 | |
|         parser.add_argument(
 | |
|             '--repo',
 | |
|             action='store',
 | |
|             help='Repository to upload to',
 | |
|             required=True)
 | |
|         parser.add_argument(
 | |
|             '--url',
 | |
|             action='store',
 | |
|             help='Nexus root URL',
 | |
|             required=True)
 | |
|         parser.add_argument(
 | |
|             '--auth',
 | |
|             action='store',
 | |
|             help='base64-encoded string of username:password',
 | |
|             required=True)
 | |
|         parser.add_argument(
 | |
|             '--method',
 | |
|             action='store',
 | |
|             nargs='?',
 | |
|             const='post',
 | |
|             choices=['post', 'put'],
 | |
|             help=('Method used for uploading files to nexus. '
 | |
|                   'Apt repositories use post, Helm uses put.'),
 | |
|             required=True)
 | |
|         # Positional arguments
 | |
|         parser.add_argument('file', nargs='+', type=str)
 | |
| 
 | |
|     def handle(self, *args, **options):
 | |
|         """Upload debian package to nexus repository"""
 | |
|         auth = tuple(b64decode(options.get('auth')).decode('utf-8').split(':', 1))
 | |
|         responses = {}
 | |
|         url = 'https://%(url)s/repository/%(repo)s/' % options
 | |
|         method = options.get('method')
 | |
|         exit_code = 0
 | |
|         for file in options.get('file'):
 | |
|             if method == 'post':
 | |
|                 responses[file] = requests.post(url, data=open(file, mode='rb'), auth=auth)
 | |
|             else:
 | |
|                 responses[file] = requests.put(url+file, data=open(file, mode='rb'), auth=auth)
 | |
|         self.stdout.write('Upload results:\n')
 | |
|         sep = '-' * 60
 | |
|         self.stdout.write('%s\n' % sep)
 | |
|         for path, response in responses.items():
 | |
|             self.stdout.write('%-55s: %d\n' % (path, response.status_code))
 | |
|             if response.status_code >= 400:
 | |
|                 exit_code = 1
 | |
|         self.stdout.write('%s\n' % sep)
 | |
|         exit(exit_code)
 | 
