def push(self, path, name, tag=None):
path = os.path.abspath(path)<EOL>bot.debug("<STR_LIT>" % path)<EOL>if not os.path.exists(path):<EOL><INDENT>bot.error('<STR_LIT>' %path)<EOL>sys.exit(<NUM_LIT:1>)<EOL><DEDENT>names = parse_image_name(remove_uri(name), tag=tag)<EOL>file_size = os.path.getsize(path)<EOL>chunk_size = <NUM_LIT:4> * <NUM_LIT> * <NUM_LIT><EOL>storage_path = "<STR_LIT>" %names['<STR_LIT>']<EOL>collection = self._get_or_create_collection(names['<STR_LIT>'])<EOL>image_name = os.path.basename(names['<STR_LIT>'])<EOL>progress = <NUM_LIT:0><EOL>bot.show_progress(progress, file_size, length=<NUM_LIT>)<EOL>with open(path, '<STR_LIT:rb>') as F:<EOL><INDENT>self.conn.put_object(names['<STR_LIT>'], image_name,<EOL>contents= F.read(),<EOL>content_type='<STR_LIT>')<EOL><DEDENT>bot.show_progress(iteration=file_size,<EOL>total=file_size,<EOL>length=<NUM_LIT>,<EOL>carriage_return=True)<EOL>sys.stdout.write('<STR_LIT:\n>')<EOL>
push an image to your Storage. If the collection doesn't exist,
       it is created.

       Parameters
       ==========
       path: should correspond to an absolute image path (or derive it)
       name: should be the complete uri that the user has requested to push.
       tag: should correspond with an image tag. This is provided to mirror Docker