Nov 25, 2020 01:46 AM
Hi !
I’m trying to rename a picture using the airtable python wrapper (API).
A picture is represented by a list of dict :
Example : {'Picture 1' : [{'id': '...', 'url': '...', 'filename': 'Picture_1.jpeg', 'size': 24150, 'type': 'image/jpeg', ...}]
The problem here is that it’s a list of dict, so you can’t just modify filename. If you want to edit anything in Picture 1, you have to get all properties.
So I obviously tried to airtable_update by copiying properties, then edit filename and airtable_update.
The return updated record is the same, likewise on airtable.
I don’t get any error message so I think I have the solution by downloading and rename locally then upload, but I don’t want to do that, not clean.
If you have any ideas :confused:
Nov 25, 2020 02:35 PM
Yeah, this is a bit of a challenge because of certain Airtable constraints and aspects of their attachment architecture. It is possible though as demonstrated in this video. I used a script block for this example, but it can be done with any API call as well.
Script Used in the Video
/*
***********************************************************
ScriptBloqs - Attachments
Copyright (c) 2020 by Global Technologies Corporation
ALL RIGHTS RESERVED
***********************************************************
*/
output.markdown('# Attachments Field');
// get the name of the table
let table = base.getTable("Airdrop");
// get the records from this table
let records = await table.selectRecordsAsync();
// Update the records
for (let record of records.records) {
if (record.getCellValue("Images"))
{
output.inspect(record.getCellValue("Images"));
// get the current image
let oThisImage = record.getCellValue("Images");
output.markdown("Current Image Name: " + oThisImage[0].filename);
// change the name
oThisImage[0].filename = record.getCellValue("New Image Name")
output.markdown("New Image Name: " + oThisImage[0].filename);
await table.updateRecordAsync(record, {
"New Images" : [{
"filename" : oThisImage[0].filename,
"url" : oThisImage[0].url
}]
});
}
}