<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _uploadFile(self,directory,fn,dentry,db,service):
 """Uploads file and changes status to 'S'. Looks up service name with service string """

        # Create a hash of the file
        if fn not in db:
            print("%s - Not in DB, must run 'add' first!"%(fn))
        else:
            # If already added, see if it's modified, only then
            # do another upload
            if db[fn]['services'][service]['status']==self.ST_UPTODATE:
                if not dentry['status']==self.ST_MODIFIED:
                    logger.info("%s - Up to date, skipping (%s)!"\
                            %(fn,service))
                    return False

            sobj=self.sman.GetServiceObj(service)
            # If nobody manages this file, just skip it
            if (not sobj):
                print("%s - Upload: No service of name [%s] found"%(fn,service))
                return
            # Only change status if correctly uploaded
            if sobj.Upload(directory,fn):
                # Write newest mtime/hash to indicate all is well
                db[fn]['mtime']=dentry['mtime']
                db[fn]['hash']=self._hashfile(os.path.join(directory,fn))
                db[fn]['services'][service]['status']=self.ST_UPTODATE
                logger.debug('%s - uploaded by service: %s'%(fn,sobj.GetName()))
                return True
            else:
                logger.error('%s - Failed to upload by service: %s'%(fn,sobj.GetName()))
                return False


        return False