Je voudrais écrire par programmation une méthode qui appelle une méthode boto3 et modifier les paramètres par défaut dans les méthodes. Par exemple, je souhaite utiliser mon compartiment de journalisation si le journal est défini sur True. Sinon, ne le connectez pas. Quelque chose comme ceci:Valeurs par défaut pour les paramètres de la méthode boto3
def my_run(log=False):
log_string = "s3://mylogs" if log else None
result = emr.run_job_flow(Name = 'EMRTest1',
LogUri = log_string ,
...
)
return result
Ainsi, pour la valeur par défaut j'ai utilisé Aucun. Cependant, boto3 attend une chaîne. J'ai essayé la chaîne vide pour défaut et ce n'est pas une valeur valide
Je sais que si je ne spécifie pas logURI, il ne sera pas stocké. Donc, je pourrais le faire avec des instructions if, comme ceci:
def my_run(log=False):
if log:
result = emr.run_job_flow(Name = 'EMRTest1',
LogUri = "s3://mylogs" ,
...
)
else:
result = emr.run_job_flow(Name = 'EMRTest1',
...
)
return result
Mais c'est horrible. Et LogUri était juste un exemple. Je veux pouvoir changer d'autres paramètres. Je ne peux pas faire ces ifs imbriqués.
Y at-il une valeur par défaut pour divers types de chaînes comme boto3 que je peux utiliser?
Modifier 1
Dès le premier commentaire ci-dessous, http://boto3.readthedocs.org/en/latest/guide/events.html#provide-client-params
API intéressante. Pas bien documenté cependant. Leur exemple pour s3 clisnt fonctionne très bien,
s3 = boto3.client('s3')
# Access the event system on the S3 client
event_system = s3.meta.events
# Create a function
def add_my_bucket(params, **kwargs):
print "Hello"
# Add the name of the bucket you want to default to.
if 'Bucket' not in params:
params['Bucket'] = 'mybucket'
# Register the function to an event
event_system.register('provide-client-params.s3.ListObjects', add_my_bucket)
response = s3.list_objects()
alors la réponse est bonne et je vois aussi "Bonjour" imprimé.
Mais maintenant, je tente de faire un exemple pour le run_job_flow de RME:
def my_run(name):
def setName(params, **kwargs):
print "Hello"
params['Name'] = name
current_emr = boto3.client('emr')
event_system = current_emr.meta.events
event_system.register('provide-client-params.emr.RunJobFlow', setName)
current_emr.run_job_flow(...)
Quand je cours, j'obtiens: manquant paramètre requis en entrée: « Nom »
Suis-je utiliser une syntaxe erronée en quelque sorte? J'ai utilisé RunJobFlow que j'ai reçu de current_emr.meta.method_to_api_mapping Peut-être que ce n'est pas provide-client-params pour emr?
Je vois ne pas non plus « Bonjour » imprimé