Source code for dfvfs.path.sqlite_blob_path_spec

# -*- coding: utf-8 -*-
"""The SQLite blob path specification implementation."""

from dfvfs.lib import definitions
from dfvfs.path import factory
from dfvfs.path import path_spec


[docs] class SQLiteBlobPathSpec(path_spec.PathSpec): """SQLite blob file path specification. Attributes: column_name (str): name of the column in which the blob is stored. row_condition (tuple): condition of the row in which the blob is stored. The condition is a tuple in the form: (column_name, operator, value). The condition must yield a single result. row_index (int): index of the row in which the blob is stored. table_name (str): name of the table in which the blob is stored. """ TYPE_INDICATOR = definitions.TYPE_INDICATOR_SQLITE_BLOB
[docs] def __init__( self, column_name=None, parent=None, row_condition=None, row_index=None, table_name=None, **kwargs): """Initializes a path specification. Note that the SQLite blob file path specification must have a parent. Args: column_name (Optional[str]): name of the column in which the blob is stored. parent (Optional[PathSpec]): parent path specification. row_condition (Optional[tuple]): condition of the row in which the blob is stored. The condition is a tuple in the form: (column_name, operator, value). The condition must yield a single result. row_index (Optional[int]): index of the row in which the blob is stored. table_name (Optional[str]): name of the table in which the blob is stored. Raises: ValueError: when table_name, column_name, row_condition and row_index, or parent is not set. """ if not table_name or not column_name or not parent: raise ValueError('Missing table_name, column_name or parent value.') if (row_condition and ( not isinstance(row_condition, tuple) or len(row_condition) != 3)): raise ValueError(( 'Unsupported row_condition not a tuple in the form: ' '(column_name, operator, value).')) super(SQLiteBlobPathSpec, self).__init__(parent=parent, **kwargs) self.column_name = column_name self.row_condition = row_condition self.row_index = row_index self.table_name = table_name
@property def comparable(self): """str: comparable representation of the path specification.""" string_parts = [] string_parts.append(f'table name: {self.table_name:s}') string_parts.append(f'column name: {self.column_name:s}') if self.row_condition is not None: row_condition_string = ' '.join([ f'{value!s}' for value in self.row_condition]) string_parts.append(f'row condition: "{row_condition_string:s}"') if self.row_index is not None: string_parts.append(f'row index: {self.row_index:d}') return self._GetComparable(sub_comparable_string=', '.join(string_parts))
factory.Factory.RegisterPathSpec(SQLiteBlobPathSpec)