def publishFile(self) : 
		logger.debug('--- publishing ---')

		# publish file 
		publishFile = self.svPublishFile
		workFile = self.asset.publishFile(showUser = True)
		workDir = self.asset.workDir()
		user = hook.getUser()
		self.setStatus('--- File Publish ---', True, [40, 40, 40], 0)

		if publishFile and workDir : 
			saveFile = '%s/%s' % (workDir, os.path.basename(workFile))
			# saveFile = hook.addUser(saveFile, user)

			# save file 
			logger.debug('Saving file -> %s' % saveFile)
			saveResult = hook.save(saveFile, rename = False)
			logger.info('Save file done %s' % saveResult)
			self.setStatus('Save', saveResult)

			# get increment version
			thisFile = entityInfo.info()
			incrementFile = thisFile.nextVersion()

			# manage thumbnail / media
			self.manageMediaFile()

			# extra command 
			batch = not self.ui.noBatch_checkBox.isChecked()
			refPath = self.asset.getPath('ref')
			logger.debug('Extra export -> %s' % refPath)
			extraResults = extra.publish(self.asset, batch, mainUI=self)

			if extraResults : 
				for each in extraResults : 
					title = each
					status = extraResults[each]['status']
					message = extraResults[each]['message']
					self.setStatus('%s' % title, status)
					logger.info('%s %s' % (title, message))

			# copy publish 
			logger.debug('Publish file from %s -> %s' % (saveResult, publishFile))
			copyResult = fileUtils.copy(saveResult, publishFile)
			logger.info('Publish file to %s' % publishFile)
			self.setStatus('Published', copyResult)

			if saveResult : 
				# set status 
				logger.debug('Increment file -> %s' % incrementFile)

				# increment file
				# check increment override with root file 
				fileToIncrement = str(self.ui.incrementFile_lineEdit.text())
				incrementOverride = False 
				
				if os.path.exists(fileToIncrement) and self.ui.incrementRoolFile_checkBox.isChecked() : 
					incrementOverride = True

				if batch : 
					if not incrementOverride : 
						incrementResult = hook.save(incrementFile)

					# override increment 
					else : 
						increment = entityInfo.info(fileToIncrement)
						incrementFile = increment.nextVersion()
						incrementResult = fileUtils.copy(fileToIncrement, incrementFile)

				else : 
					incrementResult = fileUtils.copy(saveResult, incrementFile)

				if incrementResult : 
					self.setStatus('Increment File', incrementResult)
					logger.info('Increment file to %s' % incrementFile)

		return True
	def publishShotgun(self) : 
		# publish shotgun
		''' version
		- Version, Thumbnails, Media
		# task 

		'''
		logger.debug('--- publishing Shotgun ---')
		self.setStatus('--- Shotgun Publish ---', True, [40, 40, 40], 0)

		# UI value 
		status = str(self.ui.status_comboBox.currentText())
		thumbnail = str(self.ui.thumbnail_lineEdit.text())
		media = str(self.ui.media_lineEdit.text())
		sg_status_list = self.sgStatusMap[status]
		task_sg_status_list = self.getShotgunStatus(status)
		
		# entity value
		project = self.asset.project()
		assetType = self.asset.type()
		assetSubType = self.asset.subType()
		assetName = self.asset.name()
		stepName = self.asset.department()
		taskName = self.asset.task()
		publishFile = os.path.basename(self.svPublishFile).split('.')[0]
		user = hook.getUser()

		''' version ''' 
		logger.debug('Create version %s' % publishFile)
		logger.debug('%s %s %s %s %s %s %s %s %s' % (project, assetType, assetSubType, assetName, stepName, taskName, publishFile, sg_status_list, user))

		try : 
			versionEntity, assetEntity, taskEntity = shotgunPublish.publishVersion(project, assetType, assetSubType, assetName, stepName, taskName, publishFile, sg_status_list, user)

		except Exception as e : 
			logger.info('No asset in Shotgun')
			logger.debug(e)
			return False

		self.setStatus('Create version %s' % publishFile, versionEntity)
		logger.info('Create version %s %s' % (publishFile, versionEntity))

		
		if versionEntity and assetEntity and taskEntity : 

			''' upload thumbnail ''' 
			logger.debug('Upload thumbnail %s' % thumbnail)
			thumbResult = shotgunPublish.uploadThumbnail(versionEntity, thumbnail)
			self.setStatus('Upload thumbnail', thumbResult)
			logger.info('Upload thumbnail %s' % thumbResult)
			

			''' upload media ''' 
			logger.debug('Upload media %s' % media)
			mediaResult = shotgunPublish.uploadMedia(versionEntity, media)
			self.setStatus('Upload media', mediaResult)
			logger.info('Upload media %s' % mediaResult)


			''' set task and dependency tasks ''' 
			logger.debug('Set task')
			taskResult = shotgunPublish.publishTask(self.asset, assetEntity, stepName, taskEntity, task_sg_status_list, self.svPublishFile)
			self.setStatus('Set Task', taskResult)
			
			''' set geo info ID ''' 
			# set ID 
			pipelineTools.setGeoInfo('id', assetEntity['id'])

		return True