code: def cp_cropduster_image(self, the_image_path, del_after_upload=False, overwrite=False, invalidate=False):
          
  
          local_file = os.path.join(settings.MEDIA_ROOT, the_image_path)
  
          # only try to upload things if the origin cropduster file exists (so it is not already uploaded to the CDN)
          if os.path.exists(local_file):
  
              the_image_crops_path = os.path.splitext(the_image_path)[0]
              the_image_crops_path_full_path = os.path.join(settings.MEDIA_ROOT, the_image_crops_path)
  
              self.cp(local_path=local_file,
                      target_path=os.path.join(settings.S3_ROOT_BASE, the_image_path),
                      del_after_upload=del_after_upload,
                      overwrite=overwrite,
                      invalidate=invalidate,
                      )
  
              self.cp(local_path=the_image_crops_path_full_path + "/*",
                      target_path=os.path.join(settings.S3_ROOT_BASE, the_image_crops_path),
                      del_after_upload=del_after_upload,
                      overwrite=overwrite,
                      invalidate=invalidate,
                      )
docs: Deal with saving cropduster images to S3. Cropduster is a Django library for resizing editorial images.
          S3utils was originally written to put cropduster images on S3 bucket.
  
          Extra Items in your Django Settings
          -----------------------------------
  
          MEDIA_ROOT : string
              Django media root.
              Currently it is ONLY used in cp_cropduster_image method.
              NOT any other method as this library was originally made to put Django cropduster images on s3 bucket.
  
          S3_ROOT_BASE : string
              S3 media root base. This will be the root folder in S3.
              Currently it is ONLY used in cp_cropduster_image method.
              NOT any other method as this library was originally made to put Django cropduster images on s3 bucket.