def dump(cls, collection, filename): """Dump collection into file.""" if not Config.is_supported_file_format(): cls._logger.debug('file format not supported for file %s', filename) return if not collection: Cause.push(Cause.HTTP_NOT_FOUND, 'no content found to be exported') return cls._logger.debug('exporting contents %s', filename) with open(filename, 'w') as outfile: try: dictionary = { 'meta': { 'updated': Config.utcnow(), 'version': __version__, 'homepage': __homepage__ }, 'data': collection.dump_dict(Config.remove_fields) } if Config.is_operation_file_text: outfile.write(collection.dump_text(Config.templates)) elif Config.is_operation_file_json: json.dump(dictionary, outfile) outfile.write(Const.NEWLINE) elif Config.is_operation_file_mkdn: outfile.write(collection.dump_mkdn(Config.templates)) elif Config.is_operation_file_yaml: yaml.safe_dump(dictionary, outfile, default_flow_style=False) else: cls._logger.debug('unknown export file format') except (IOError, TypeError, ValueError, yaml.YAMLError) as error: cls._logger.exception( 'fatal failure to generate formatted export file "%s"', error) Cause.push(Cause.HTTP_INTERNAL_SERVER_ERROR, 'fatal failure while exporting content to file')
def load(cls, filename): """Load dictionary from file.""" collection = Collection() if not Config.is_supported_file_format(): cls._logger.debug('file format not supported for file %s', filename) return collection cls._logger.debug('importing contents from file %s', filename) if os.path.isfile(filename): with open(filename, 'r') as infile: try: timestamp = Config.utcnow() if Config.is_operation_file_text: collection.load_text(timestamp, infile.read()) elif Config.is_operation_file_mkdn: collection.load_mkdn(timestamp, infile.read()) elif Config.is_operation_file_json: dictionary = json.load(infile) collection.load_dict(timestamp, dictionary) elif Config.is_operation_file_yaml: dictionary = yaml.safe_load(infile) collection.load_dict(timestamp, dictionary) else: cls._logger.debug('unknown import file format') except (TypeError, ValueError, yaml.YAMLError) as error: cls._logger.exception( 'fatal exception while loading file "%s"', error) Cause.push( Cause.HTTP_INTERNAL_SERVER_ERROR, 'fatal failure while importing content from file') else: Cause.push(Cause.HTTP_NOT_FOUND, 'cannot read file {}'.format(filename)) return collection