I have written the following function to process images. Now I am not sure if it's pythonic or considered as spaghetti code. I know being flat is better than nested, but I don't see a way around it.
I could easily apply list comprehensions if the "if" statements are only resolving true/false, but each step depends on the output of the previous steps, so I don't think I could use itertools.
def get_image(width, height, collection_sku, order_id, name, handle): """image processing pipeline""" # Check-1 image exception should be checked before proceeding further # covers both images in exception(currently bookshelves) list and also personal true doors # 1. bookshelves need to be cropped # 2. personal images needs to be added in the required size if helpers.image_exception(collection_sku): # Step-1 Find image folder directory_sizes = helpers.find_directory(width, height) if directory_sizes is not None: # Step-2 Find the image from the given folder. key = helpers.find_image(directory_sizes, collection_sku) if key is not None: requires_resize = helpers.should_resize(width, height) requires_flip = helpers.should_flip(handle) and not helpers.flip_exception(collection_sku) # Check-2 check whether image requires resizing or flipping if requires_resize or requires_flip: # Step-3 Create local directory to store temporary images location, is_created = helpers.local_directory( order_id) if is_created: # Step-4 Download image image = helpers.download_image(key, location, name) if image is not None: width_px = helpers.cm_to_pixel(width) height_px = helpers.cm_to_pixel(height) image_modified = False # Step-5.1 Resize image if requires_resize: helpers.resize_image(image, width_px, height_px) image_modified = True # Step-5.2 Flip image if requires_flip: helpers.flip_image(image) image_modified = True # Step-6 Upload image if image_modified: helpers.upload_image(image, key) # Step-3 No local dir created # Step-4 Can't download image # Step-5.1 Can't resize image # Step-5.2 Can't flip image # Step-6 Can't upload image return None # Check-2 if no image processing required then copy image over helpers.copy_image(key, target=None) # TODO return True # raise exception in sub job # Check-1 if image door image cannot be processed # Step-1 if directory not available # Step-2 if image not available return None