mirror of https://github.com/jumpserver/jumpserver
				
				
				
			feat: migrating boto to boto3
							parent
							
								
									4728f95634
								
							
						
					
					
						commit
						1c6fcc5826
					
				|  | @ -1,68 +1,74 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| # | # | ||||||
| 
 | import boto3 | ||||||
| import os | import os | ||||||
| import boto |  | ||||||
| import boto.s3.connection |  | ||||||
| 
 | 
 | ||||||
| from .base import ObjectStorage | from .base import ObjectStorage | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class CEPHStorage(ObjectStorage): | class CEPHStorage(ObjectStorage): | ||||||
| 
 |  | ||||||
|     def __init__(self, config): |     def __init__(self, config): | ||||||
|         self.bucket = config.get("BUCKET", None) |         self.bucket = config.get("BUCKET", "jumpserver") | ||||||
|         self.region = config.get("REGION", None) |         self.region = config.get("REGION", None) | ||||||
|         self.access_key = config.get("ACCESS_KEY", None) |         self.access_key = config.get("ACCESS_KEY", None) | ||||||
|         self.secret_key = config.get("SECRET_KEY", None) |         self.secret_key = config.get("SECRET_KEY", None) | ||||||
|         self.hostname = config.get("HOSTNAME", None) |         self.endpoint = config.get("ENDPOINT", None) | ||||||
|         self.port = config.get("PORT", 7480) |  | ||||||
| 
 |  | ||||||
|         if self.hostname and self.access_key and self.secret_key: |  | ||||||
|             self.conn = boto.connect_s3( |  | ||||||
|                 aws_access_key_id=self.access_key, |  | ||||||
|                 aws_secret_access_key=self.secret_key, |  | ||||||
|                 host=self.hostname, |  | ||||||
|                 port=self.port, |  | ||||||
|                 is_secure=False, |  | ||||||
|                 calling_format=boto.s3.connection.OrdinaryCallingFormat(), |  | ||||||
|             ) |  | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             self.client = self.conn.get_bucket(bucket_name=self.bucket) |             self.client = boto3.client( | ||||||
|         except Exception: |                 's3', region_name=self.region, | ||||||
|             self.client = None |                 aws_access_key_id=self.access_key, | ||||||
|  |                 aws_secret_access_key=self.secret_key, | ||||||
|  |                 endpoint_url=self.endpoint | ||||||
|  |             ) | ||||||
|  |         except ValueError: | ||||||
|  |             pass | ||||||
| 
 | 
 | ||||||
|     def upload(self, src, target): |     def upload(self, src, target): | ||||||
|         try: |         try: | ||||||
|             key = self.client.new_key(target) |             self.client.upload_file(Filename=src, Bucket=self.bucket, Key=target) | ||||||
|             key.set_contents_from_filename(src) |  | ||||||
|             return True, None |  | ||||||
|         except Exception as e: |  | ||||||
|             return False, e |  | ||||||
| 
 |  | ||||||
|     def download(self, src, target): |  | ||||||
|         try: |  | ||||||
|             os.makedirs(os.path.dirname(target), 0o755, exist_ok=True) |  | ||||||
|             key = self.client.get_key(src) |  | ||||||
|             key.get_contents_to_filename(target) |  | ||||||
|             return True, None |  | ||||||
|         except Exception as e: |  | ||||||
|             return False, e |  | ||||||
| 
 |  | ||||||
|     def delete(self, path): |  | ||||||
|         try: |  | ||||||
|             self.client.delete_key(path) |  | ||||||
|             return True, None |             return True, None | ||||||
|         except Exception as e: |         except Exception as e: | ||||||
|             return False, e |             return False, e | ||||||
| 
 | 
 | ||||||
|     def exists(self, path): |     def exists(self, path): | ||||||
|         try: |         try: | ||||||
|             return self.client.get_key(path) |             self.client.head_object(Bucket=self.bucket, Key=path) | ||||||
|         except Exception: |             return True | ||||||
|  |         except Exception as e: | ||||||
|             return False |             return False | ||||||
| 
 | 
 | ||||||
|  |     def download(self, src, target): | ||||||
|  |         try: | ||||||
|  |             os.makedirs(os.path.dirname(target), 0o755, exist_ok=True) | ||||||
|  |             self.client.download_file(self.bucket, src, target) | ||||||
|  |             return True, None | ||||||
|  |         except Exception as e: | ||||||
|  |             return False, e | ||||||
|  | 
 | ||||||
|  |     def delete(self, path): | ||||||
|  |         try: | ||||||
|  |             self.client.delete_object(Bucket=self.bucket, Key=path) | ||||||
|  |             return True, None | ||||||
|  |         except Exception as e: | ||||||
|  |             return False, e | ||||||
|  | 
 | ||||||
|  |     def generate_presigned_url(self, path, expire=3600): | ||||||
|  |         try: | ||||||
|  |             return self.client.generate_presigned_url( | ||||||
|  |                 ClientMethod='get_object', | ||||||
|  |                 Params={'Bucket': self.bucket, 'Key': path}, | ||||||
|  |                 ExpiresIn=expire, | ||||||
|  |                 HttpMethod='GET'), None | ||||||
|  |         except Exception as e: | ||||||
|  |             return False, e | ||||||
|  | 
 | ||||||
|  |     def list_buckets(self): | ||||||
|  |         response = self.client.list_buckets() | ||||||
|  |         buckets = response.get('Buckets', []) | ||||||
|  |         result = [b['Name'] for b in buckets if b.get('Name')] | ||||||
|  |         return result | ||||||
|  | 
 | ||||||
|     @property |     @property | ||||||
|     def type(self): |     def type(self): | ||||||
|         return 'ceph' |         return 'ceph' | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -164,7 +164,6 @@ azure-keyvault-secrets = "4.9.0" | ||||||
| psycopg2-binary = "2.9.6" | psycopg2-binary = "2.9.6" | ||||||
| pycountry = "^24.6.1" | pycountry = "^24.6.1" | ||||||
| # Depend by jms storage | # Depend by jms storage | ||||||
| boto = "2.49.0" |  | ||||||
| azure-storage-blob = "12.17.0" | azure-storage-blob = "12.17.0" | ||||||
| esdk-obs-python = "3.21.4" | esdk-obs-python = "3.21.4" | ||||||
| oss2 = "2.18.1" | oss2 = "2.18.1" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 吴小白
						吴小白