Exemplo n.º 1
0
 def exports(self):
     if not isinstance(self.data, dict):
         raise FreezeException(
             "The root element of the freeze file needs to be a hash")
     if not isinstance(self.data.get('exports'), list):
         raise FreezeException(
             "The freeze file needs to have a list of exports")
     common = self.data.get('common', {})
     for export in self.data.get('exports'):
         yield Export(common, export)
Exemplo n.º 2
0
 def __init__(self, file_name):
     self.file_name = file_name
     extension = file_name.rsplit('.', 1)[-1]
     loader = DECODER.get(extension, json)
     try:
         if loader == json and PY3:  # pragma: no cover
             fh = open(file_name, encoding='utf8')
         else:
             fh = open(file_name, 'rb')
         try:
             self.data = loader.load(fh)
         except ValueError as ve:
             raise FreezeException("Invalid freeze file: %s" % ve)
         fh.close()
     except IOError as ioe:
         raise FreezeException(text_type(ioe))
Exemplo n.º 3
0
 def _get_basepath(self):
     prefix = self.export.get('prefix', '')
     prefix = os.path.abspath(prefix)
     prefix = os.path.realpath(prefix)
     self._prefix = prefix
     filename = self.export.get('filename')
     if filename is None:
         raise FreezeException("No 'filename' is specified")
     self._basepath = os.path.join(prefix, filename)
Exemplo n.º 4
0
 def file_name(self, row):
     path = self._tmpl(row)
     if path not in self._paths:
         if not path.startswith(self._prefix):
             raise FreezeException("Possible path escape detected.")
         dn = os.path.dirname(path)
         if not os.path.isdir(dn):
             os.makedirs(dn)
         self._paths.append(path)
     return path
Exemplo n.º 5
0
 def __init__(self, file_name):
     self.file_name = file_name
     extension = file_name.rsplit('.', 1)[-1]
     loader = DECODER.get(extension, json)
     try:
         fh = open(file_name, 'rb')
         try:
             self.data = loader.load(fh)
         except ValueError, ve:
             raise FreezeException("Invalid freeze file: %s" % ve)
         fh.close()
Exemplo n.º 6
0
def freeze_export(export, result=None):
    try:
        if result is None:
            database = Database(export.get('database'))
            query = database.query(export.get('query'))
        else:
            query = result
        serializer_cls = get_serializer(export)
        serializer = serializer_cls(export, query)
        serializer.serialize()
    except (OperationalError, ProgrammingError) as e:
        raise FreezeException("Invalid query: %s" % e)
Exemplo n.º 7
0
 def _get_basepath(self):
     prefix = self.export.get('prefix', '')
     if isinstance(prefix, binary_type):
         prefix = text_type(prefix, encoding=self._encoding)
     prefix = os.path.abspath(prefix)
     prefix = os.path.realpath(prefix)
     self._prefix = prefix
     filename = self.export.get('filename')
     if isinstance(filename, binary_type):
         filename = text_type(filename, encoding=self._encoding)
     if filename is None:
         raise FreezeException("No 'filename' is specified")
     self._basepath = os.path.join(prefix, filename)
Exemplo n.º 8
0
    def file_name(self, row):
        # signal that there is a fileobj available:
        if self.fileobj is not None:
            return None

        path = self._tmpl(row)
        if path not in self._paths:
            if not path.startswith(self._prefix):
                raise FreezeException("Possible path escape detected.")
            dn = os.path.dirname(path)
            if not os.path.isdir(dn):
                os.makedirs(dn)
            self._paths.append(path)
        return path
Exemplo n.º 9
0
 def mode(self):
     mode = self.export.get_normalized('mode', 'list')
     if mode not in ['list', 'item']:
         raise FreezeException("Invalid mode: %s" % mode)
     return mode