Saltar a contenido

Amazon AWS - S3

Nada puede ser más sencillo que interactuar con Amazon Simple Storage Service (S3) que el complemento BotCity para AWS S3.

Interactúa con tus buckets, archivos, carpetas y más utilizando esta API simple y seleccionada.

Instalación

pip install botcity-aws-s3-plugin

Importando el complemento

Después de instalar este paquete, el siguiente paso es importar el paquete en tu código y comenzar a utilizar las funciones.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

Configuración de la conexión

Caution

S3 solo funciona con rutas de estilo POSIX, utiliza "/" (barra diagonal). No se permiten rutas relativas, si vas a realizar algún cambio, utiliza la ruta absoluta del archivo o carpeta.

Note

Hay dos formas diferentes de autenticación.

1. Creando la carpeta .aws en el directorio principal, necesitas crear dos archivos.

# ~/.aws/config
[default]
region=<código_de_región>
# ~/.aws/credentials
[default]
aws_access_key_id=<your_aws_access_key_id>
aws_secret_access_key=<your_aws_secret_access_key>

2. Pasando las credenciales en el constructor de la clase.

# Using the `.aws` folder
s3 = BotAWSS3Plugin()

# Alternative using the credentials as constructor arguments
s3 = BotAWSS3Plugin(
    use_credentials_file=False,
    access_key_id='<your_aws_access_key_id>',
    secret_access_key='<your_aws_secret_access_key>',
    region_name='<region_code>'
)

Operaciones con buckets

Listando buckets

from botcity.plugins.aws.s3 import BotAWSS3Plugin, Filter

s3 = BotAWSS3Plugin()
print(s3.list_buckets())

print(s3.filter_buckets(text='test-', filter_=Filter.STARTS_WITH))

Creando bucket

Attention

Amazon S3 admite buckets globales, lo que significa que cada nombre de bucket debe ser único en todas las cuentas de AWS en todas las regiones de AWS dentro de una partición.

Tip

Todos los métodos que utilizan el parámetro bucket_name son opcionales y se pueden definir de la siguiente manera.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.bucket_name = '<your_bucket_name>'
from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.create_bucket(bucket_name='<your_bucket_name>')

# Or
# s3.bucket_name = '<your_bucket_name>'
# s3.create_bucket()

Eliminando bucket

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.delete_bucket(bucket_name='<your_bucket_name>')

Operaciones con archivos

Subiendo archivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.upload_file(
    bucket_name='<your_bucket_name>',
    file_path='/<path_to_file>/example.txt',
    bucket_filename='example.txt'
)

Descargando archivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
filepath = s3.download_file(
    bucket_name='<your_bucket_name>',
    filename='example.txt',
    path_to_save='/<path_to_save>/'
)
print(filepath)  # Returns: /<path_to_save>/example.txt

Copiando archivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# copying the file to another bucket
s3.copy_file(
    bucket_name='<your_bucket_name>',
    filename='example.txt',
    target_bucket_name='another_bucket',
    target_filename='copy_of_the_file_in_another_bucket.txt'
)

# copying the file to another place in the same bucket
s3.copy_file(
    bucket_name='<your_bucket_name>',
    filename='example.txt',
    # target_bucket_name='another_bucket', ignore this argument
    target_filename='copy_of_the_file_in_the_same_bucket.txt'
)

Listando archivos

from botcity.plugins.aws.s3 import BotAWSS3Plugin, Filter

s3 = BotAWSS3Plugin()
print(s3.list_files(bucket_name='<your_bucket_name>'))

print(s3.filter_files(bucket_name='<your_bucket_name>', text='.txt', filter_=Filter.ENDS_WITH))

Eliminando archivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.delete_file(bucket_name='<your_bucket_name>', filename='example.txt')

Moviendo archivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# moving the file to another bucket
s3.move_file(
    bucket_name='<your_bucket_name>',
    filename='/test/current-file.txt',
    target_bucket_name='another_bucket',
    target_filename='/test/current-file.txt'
)

# copying the file to another place in the same bucket
s3.move_file(
    bucket_name='<your_bucket_name>',
    filename='/test/current-file.txt',
    # target_bucket_name='another_bucket', ignore this argument
    target_filename='/another_folder/current-file.txt'
)

Operaciones con carpetas

Subiendo carpeta

Attention

Por ahora, las carpetas vacías se ignoran.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.upload_folder(
    bucket_name='<your_bucket_name>',
    bucket_folder='/docs',
    folder_path='/your_path_to/docs'
)

Descargando carpeta

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.download_folder(
    bucket_name='<your_bucket_name>',
    bucket_folder='/docs',
    path_to_save='/path_to_downloads/docs'
)

Copiando carpeta

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# copying the folder to another bucket
s3.copy_folder(
    bucket_name='<your_bucket_name>',
    folder_name='/docs',
    target_bucket_name='another_bucket',
    target_folder_name='/docs'
)

# copying the folder to another place in the same bucket
s3.copy_folder(
    bucket_name='<your_bucket_name>',
    folder_name='/files/docs',
    # target_bucket_name='another_bucket', ignore this argument
    target_folder_name='/'  # will copy folder to bucket root path. /files/docs -> /docs
)

Eliminando carpeta

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.delete_folder(
    bucket_name='<your_bucket_name>',
    folder_name='/docs'
)

Moviendo carpeta

Tip

La función para mover carpetas se puede utilizar para cambiar el nombre de una carpeta.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# moving the folder to another bucket
s3.move_folder(
    bucket_name='<your_bucket_name>',
    folder_path='/docs/tests',
    target_bucket_name='another_bucket',
    target_folder_name='/'  # move /docs/tests to / in another bucket
)

# moving the folder to another place in the same bucket
s3.move_folder(
    bucket_name='<your_bucket_name>',
    folder_path='/docs',
    # target_bucket_name='another_bucket', ignore this argument
    target_folder_name='/copy-docs/'  # move folder to inside /copy-docs/
)

# renaming folder
s3.move_folder(
    bucket_name='<your_bucket_name>',
    folder_path='/docs',
    target_folder_name='/docs-v2'  # rename folder
)

Cambiando el nombre de la carpeta

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# moving the folder to another bucket
s3.rename_folder(
    bucket_name='<your_bucket_name>',
    folder_path='/docs/tests',
    target_folder_name='tests-new-name'  # rename /docs/tests to /docs/tests-new-name
)

Otras operaciones

Para utilizar otros métodos de AWS S3, utiliza la propiedad S3 client de la clase BotAWSS3Plugin.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
result = s3.s3_client.get_bucket_acl(Bucket='<your_bucket_name>')
print(result)

Enumeración de filtros

Las operaciones de filtro (filter buckets, filter files) reciben una enumeración de filtro con los siguientes valores posibles:

  • Filter.EQUALS
  • Filter.STARTS_WITH
  • Filter.ENDS_WITH
  • Filter.CONTAINS