def copyItem(self, srcItem, creator, name=None, folder=None,
                 description=None):
        if name is None:
            name = srcItem['name']
        if folder is None:
            folder = self.model('folder').load(srcItem['folderId'], force=True)
        if description is None:
            description = srcItem['description']
        newItem = self.createItem(
            folder=folder, name=name, creator=creator, description=description)
        # copy metadata and other extension values
        filteredItem = self.filter(newItem, creator)
        updated = False
        for key in srcItem:
            if key not in filteredItem and key not in newItem:
                newItem[key] = copy.deepcopy(srcItem[key])
                updated = True
        if updated:
            self.save(newItem, triggerEvents=False)
        # Give listeners a chance to change things
        events.trigger('model.item.copy.prepare', (srcItem, newItem))
        # copy files
        for file in self.childFiles(item=srcItem):
            self.model('file').copyFile(file, creator=creator, item=newItem)

        # Reload to get updated size value
        newItem = self.load(newItem['_id'], force=True)
        events.trigger('model.item.copy.after', newItem)
        return newItem
Copy an item, including duplicating files and metadata.
dataset/ETHPy150Open girder/girder/girder/models/item.py/Item.copyItem