def write_file(self, fullFileName): """10/24/08, called by ChapterListFormHandle.py.""" if self.chapterList == None or self.chapterList == {}: # # then we remove the chapter list file. # ryw.db_print_info_browser('ChapterList.write_file: ' + \ 'chapterList is empty.', 41) if ryw.cleanup_path(fullFileName, 'ChapterList.write_file'): return True ryw.give_bad_news('ChapterList.write_file:' + 'failed to remove file', logging.error) return False try: su.pickdump(self.chapterList, fullFileName) except: ryw.give_bad_news('ChapterList.write_file: pickdump failed: ' + fullFileName, logging.error) return False ryw.db_print_info_browser('ChapterList.write_file success: ' + fullFileName, 41) return True
def out_done(tmpImgDir, mapDict): path = os.path.join(tmpImgDir, 'data_map') try: su.pickdump(mapDict, path) except: ryw.give_bad_news('out_done: pickdump failed: ' + path, logging.error) return False logging.debug('out_done: done writing map file: ' + path) return True
def __init__(self, logdir, logfile, reverseListsFile, exclusive, skipLock = False, searchFile = None, repositoryRoot = None, allowNullSearchFile = False): """raises exceptions. skipLock is set to True when called by merging incoming: the incoming ReverseLists file is not locked.""" if logdir and logfile: ryw.check_logging(logdir, logfile) #logging.debug('ReverseLists: initializing: ' + repr(logdir) + ' ' + # repr(logfile) + ' ' + reverseListsFile) self.reverseListsFile = reverseListsFile self.lockfile = reverseListsFile + '_LOCK' self.exclusive = exclusive self.skipLock = skipLock self.searchFile = searchFile self.repositoryRoot = repositoryRoot if not allowNullSearchFile: if not searchFile or not repositoryRoot: raise NameError('ReverseLists.__init__: ' + 'bad searchFile or ' + 'bad repositoryRoot.') if not skipLock: logging.info('ReverseLists.__init__: skipping locking.') if not self._ReverseLists__create_lock_file(): raise NameError('ReverseLists.__init__: ' + '__create_lock_file failed.') try: ryw.restore_cleanup_old_version(reverseListsFile) except: pass if not os.path.exists(reverseListsFile): logging.warning('ReverseLists.__init__: reverseListsFile ' + 'not found: ' + reverseListsFile) self.reverseDict = {} try: su.pickdump(self.reverseDict, reverseListsFile) except: ryw.give_bad_news('ReverseLists.__init__: pickdump ' + 'failed.', logging.critical) raise NameError('ReverseLists.__init__: __lock failed') if not self._ReverseLists__read_reverse_lists_file(): ryw.give_bad_news( 'ReverseLists.__init__: ' + '__read_reverse_lists_file failed: ' + reverseListsFile, logging.critical) raise NameError('ReverseLists.__init__: ' + '__read_reverse_lists_file failed')
def write_tmp_metafile(meta, tmpdir): """write the attributes to a temporary metafile.""" metafile = tmpdir + '.META' try: su.pickdump(meta, metafile) logging.debug('temporary meta file written.') return (True, metafile) except: ryw.give_bad_news( 'fatal_error: failed to write temporary metafile: '+metafile, logging.critical) return (False, metafile)
def empty_download_queue(rfpath): logging.debug("empty_download_queue: entered...") if not os.path.exists(rfpath): logging.debug("empty_download_queue: queue does not exist: " + rfpath) give_news("download queue already empty.", logging.info) return try: su.pickdump(set([]), rfpath) except: give_bad_news("empty_download_queue: failed to pickdump: " + rfpath, logging.warning) return logging.debug("empty_download_queue: done:" + rfpath)
def write_meta(metaPath, meta, paths): # # if this fails, we need to restore the old meta file and old done flag. # try: su.pickdump(meta, metaPath) ryw.db_print_info_browser('write_meta: ' + repr(meta), 101) except: ryw.give_bad_news('write_meta: su.pickdump failed: ' + metaPath, logging.critical) restore_old_meta(paths, metaPath) return False logging.debug('write_meta: metadata successfully written: ' + metaPath) return True
def write_reqs(rfpath, reqs): tmppath = rfpath + '.TMP' try: su.pickdump(reqs, tmppath) except: ryw.give_bad_news('fatal_error: write_reqs: pickdump failed: ' + tmppath, logging.critical) return (False, tmppath, None) success,bakpath = ryw.make_tmp_file_permanent(tmppath, rfpath) if not success: return (False, tmppath, bakpath) logging.debug('write_reqs: file write succeeded.') return (True, tmppath, bakpath)
def __write_to_disk(self): tmppath = self.reverseListsFile + '.TMP' try: su.pickdump(self.reverseDict, tmppath) except: ryw.give_bad_news('ReverseLists.add: pickdump failed.', logging.critical) return False success,bakpath = ryw.make_tmp_file_permanent( tmppath, self.reverseListsFile) ryw.cleanup_path(tmppath, '_write_to_disk: cleanup, tmppath:') ryw.cleanup_path(bakpath, '_write_to_disk: cleanup, bakpath:') ryw.db_print('write_to_disk: written to disk...', 11) return success
def write(self, file_name=None): if file_name is not None: self.file_name = file_name requests = set(self) tmp_file_name = self.file_name + '.TMP' bak_file_name = self.file_name + '.BAK' su.pickdump(requests, tmp_file_name) if os.path.exists(self.file_name): if os.path.exists(bak_file_name): os.remove(bak_file_name) os.rename(self.file_name, bak_file_name) os.rename(tmp_file_name, self.file_name)
def process_download_requests(mydir, username): dlrq = os.path.join(mydir, 'downloadrequestqueue') if not os.path.exists(dlrq): logging.debug('process_download_requests: no incoming queue found.') return True try: newrq = su.pickload(dlrq) except: ryw.give_bad_news( 'process_download_requests: failed to load new queue: ' + dlrq, logging.error) return False logging.debug('process_download_requests: found new queue: ' + repr(newrq)) oldrqfile = os.path.join(RepositoryRoot, 'QUEUES', username) oldrq = set([]) if os.path.exists(oldrqfile): try: oldrq = su.pickload(oldrqfile) except: ryw.give_bad_news( 'process_download_requests: failed to load old queue: ' + oldrqfile, logging.error) oldrq = set([]) newrq = newrq.union(oldrq) logging.debug('process_download_requests: new queue: ' + repr(newrq)) try: su.pickdump(newrq, oldrqfile) except: ryw.give_bad_news( 'process_download_requests: failed to write new queue back: ' + oldrqfile, logging.error) return False return True
def add_to_object_store(values, data, objectstoreroot, objectid, version, auxDir, cloneVersion=False): """put (DATA, META, DONE) in the object store.""" ################################################## # check free disk space. ################################################## if not cloneVersion and \ not ryw_uploadObj.check_free_space(values, objectstoreroot): return (False, None, None, None, None, None) ################################################## # acquire prefix. ################################################## try: prefix = objectstore.nameversiontoprefix(objectstoreroot, objectid, version) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: objectstore.nameversiontoprefix() failed.', logging.critical) return (False, None, None, None, None, None) datapath = prefix + '_DATA' metapath = prefix + '_META' donepath = prefix + '_DONE' auxpath = prefix + '_AUXI' ################################################## # create parent directory. ################################################## parent = None try: parent = su.createparentdirpath(prefix) logging.debug('add_to_object_store: created parent dir: ' + parent) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: su.createparentdirpath() failed.', logging.critical) return (False, parent, None, None, None, None) if os.path.exists(donepath): ryw.give_news( 'add_to_object_store: destination object already exists: ' + donepath, logging.warning) return (True, parent, datapath, metapath, auxpath, donepath) datapath = os.path.abspath(os.path.normpath(datapath)) if (not cloneVersion): data = os.path.abspath(os.path.normpath(data)) logging.debug('add_to_object_store: ' + datapath + ' ' + metapath + ' ' + donepath + '. source: ' + data) auxpath = os.path.abspath(os.path.normpath(auxpath)) ################################################## # move data into the object store. ################################################## if cloneVersion: try: os.mkdir(datapath) ryw.db_print_info_browser('add_to_object_store: mkdir: ' + datapath, 29) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: cloneVersion mkdir: ' + datapath, logging.critical) return (False, parent, datapath, None, None, None) # # now deal with cloning a list, if necessary. # isList = ryw_meta.isList(values) if isList: baseName = os.path.basename(data) dirName = os.path.dirname(data) ryw.db_print2('UploadObject.add_to_object_store: basename: ' + baseName, 44) ryw.db_print2('UploadObject.add_to_object_store: dirname: ' + dirName, 44) destPath = os.path.join(datapath, baseName) srcChapterPath = os.path.join(dirName, ChapterList.CHAPTER_LIST_NAME) destChapterPath = os.path.join(datapath, ChapterList.CHAPTER_LIST_NAME) try: shutil.copyfile(data, destPath) ryw.db_print_info_browser( 'add_to_object_store: ' + data + ' --> ' + destPath, 36) if os.path.exists(srcChapterPath): shutil.copyfile(srcChapterPath, destChapterPath) ryw.db_print_info_browser( 'UploadObject.add_to_object_store: ' + srcChapterPath + ' --> ' + destChapterPath, 44) else: ryw.db_print_info_browser( 'UploadObject.add_to_object_store: no chapter file.', 44) except: ryw.give_bad_news( 'add_to_object_store: failed to copy selection file.', logging.critical) return (False, parent, datapath, None, None, None) elif os.path.isdir(data): try: mymove(data, datapath) logging.debug('add_to_object_store: moved dir: ' + data + ' ' + datapath) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: move dir failed: ' + data + ' ' + datapath, logging.critical) return (False, parent, datapath, None, None, None) else: try: os.mkdir(datapath) mymove(data, os.path.join(datapath, os.path.basename(data))) logging.debug('add_to_object_store: moved file: ' + data + ' ' + os.path.join(datapath, os.path.basename(data))) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: move file failed: ' + data + ' ' + datapath, logging.critical) return (False, parent, datapath, None, None, None) ################################################## # put metadata in the object store. ################################################## try: su.pickdump(values, metapath) logging.debug('add_to_object_store: written metapath: ' + metapath) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: su.pickdump() failed.', logging.critical) return (False, parent, datapath, metapath, None, None) ################################################## # put aux files in the object store. ################################################## try: if auxDir and os.path.exists(auxDir) and os.path.isdir(auxDir): mymove(auxDir, auxpath) logging.debug('add_to_object_store: moved auxpath: ' + auxpath) except: ryw.give_bad_news( 'add_to_object_store: moving aux directory failed: ' + auxDir + ' -> ' + auxpath, logging.critical) return (False, parent, datapath, metapath, auxpath, None) ################################################## # put DONE flag in the object store. ################################################## try: f = open(donepath, 'w') f.close() logging.debug('add_to_object_store: written donepath: ' + donepath) except: ryw.give_bad_news( 'fatal_error: add_to_object_store: write DONE file failed.', logging.critical) return (False, parent, datapath, metapath, auxpath, donepath) # TODO: In case of ANY failure, upload request copied to a REJECTED folder which can be looked upon later. return (True, parent, datapath, metapath, auxpath, donepath)
if address: ep[username] = address.replace('\r', '') epupdated = True print '<P><FONT COLOR=red>Updating address.</FONT>' else: if ep.has_key(username): address = ep[username] if epupdated: try: ## print '<P>Before dumping' if os.path.exists(endpointfile + '.OLD'): os.remove(endpointfile + '.OLD') os.rename(endpointfile, endpointfile + '.OLD') ## print '<P>Dumping' su.pickdump(ep, endpointfile) ## print '<P>Dumped' except: print '<P>Could not update endpoint information. Look into files "%s" and "%s".' % (endpointfile, endpointfile + '.OLD') sys.exit(1) print '\n<FORM action="/cgi-bin/UpdateUserInfo.py" method="post" enctype="multipart/form-data">\n\n' print '<P><B>Username</B><BR> <INPUT type=text name=username value=%s size=30>' % username print '<P><B>Address</B>' if address: print '(%s)' % address print '<BR><TEXTAREA name=address rows=5 cols=60></TEXTAREA>' print '<P><B>New Password</B><BR> <INPUT type=password name=passwd size=30>'