Для модулей, классов, функций и нескольких других объектов вы можете использовать inspect.getfile
или inspect.getsourcefile
. Однако для встроенных объектов и методов это приведет к TypeError
. Как полагают C0deH4cker, встроенные объекты и методы реализованы на C, поэтому вам нужно будет просмотреть исходный код C. isdigit
- метод встроенного строкового объекта, который реализован в файле stringobject.c
в каталоге Objects
исходного кода Python. Этот метод isdigits
реализуется из строки 3392 этого файла. См. Также мой ответ здесь на аналогичный, но более общий вопрос.
Поскольку checkPaths асинхронный, он возвращает обещание. Это должно быть обработано в componentDidMount
следующим образом:
checkPaths(this.image_references).then(checked_paths => {
console.log("resolved promise", checked_paths)
console.log("checked image paths", JSON.stringify(checked_paths));
}).catch(e => {
console.log("error checking image paths", e)
});
Я также изменил функцию checkPaths
, чтобы дождаться проверки пути изображения и ждать загрузки изображения.
Если есть более чистый способ сделать это, я весь слух.
import React, { Component } from "react";
import { View, Text } from "react-native";
import RNFetchBlob from "rn-fetch-blob";
async function checkPaths(image_metadata_list) {
const promises = image_metadata_list.map(async (image_metadata, idx) => {
const exists = await RNFetchBlob.fs.exists(image_metadata.device_path)
if (exists === false) {
console.log("image does not exist on device, downloading...");
const dirs = RNFetchBlob.fs.dirs;
const filename = (idx + 1).toString() + '.jpg'
const resp = await RNFetchBlob.config({
path: dirs.DocumentDir + `/user_images/${filename}`
}).fetch('GET', `${image_metadata.download_url}`).progress((received = 0, total = 0) => {
//Handle progress of download here.. May be update UI...\
}).then((resp) => {
// update the device path
image_metadata.device_path = resp.path();
console.log("image path modified", image_metadata);
}).catch(e => {
console.log("error downloading image", e);
})
}
else {
console.log("image path OK", image_metadata);
}
return image_metadata;
})
return await Promise.all(promises);
}
export default class App extends Component {
constructor(props) {
super(props);
this.image_references = [
{ device_path: 'badimagepath1', download_url: 'https://firebasestorage.googleapis.com/v0/b/fivedates-dev.appspot.com/o/user_images%2FoHK9DQ94ZZOBIejbVO8luJZnEU22%2F1.jpg?alt=media&token=6c5e053d-45b4-4ab0-a52b-65c1180624ed' },
{ device_path: 'badimagepath2', download_url: 'https://firebasestorage.googleapis.com/v0/b/fivedates-dev.appspot.com/o/user_images%2FoHK9DQ94ZZOBIejbVO8luJZnEU22%2F1.jpg?alt=media&token=6c5e053d-45b4-4ab0-a52b-65c1180624ed' }
];
}
componentDidMount() {
console.log("component mounted");
console.log("checking image paths", JSON.stringify(this.image_references));
checkPaths(this.image_references).then(checked_paths => {
console.log("resolved promise", checked_paths)
console.log("checked image paths", JSON.stringify(checked_paths));
}).catch(e => {
console.log("error checking image paths", e)
});
}
render() {
return (
<View style={{ flex: 1 }}>
<Text>Welcome to MWE</Text>
</View>
)
}
}