Source code for dfvfs.vfs.sqlite_blob_directory

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

from dfvfs.path import sqlite_blob_path_spec
from dfvfs.vfs import directory


[docs] class SQLiteBlobDirectory(directory.Directory): """SQLite blob directory."""
[docs] def __init__(self, file_system, path_spec): """Initializes a directory. Args: file_system (SQLiteBlobFileSystem): file system. path_spec (SQLiteBlobPathSpec): path specification. """ super(SQLiteBlobDirectory, self).__init__(file_system, path_spec) self._number_of_entries = None
def _EntriesGenerator(self): """Retrieves directory entries. Since a directory can contain a vast number of entries using a generator is more memory efficient. Yields: SQLiteBlobPathSpec: a path specification. """ table_name = getattr(self.path_spec, 'table_name', None) column_name = getattr(self.path_spec, 'column_name', None) if table_name and column_name: if self._number_of_entries is None: # Open the first entry to determine how many entries we have. # TODO: change this when there is a move this to a central temp file # manager. https://github.com/log2timeline/dfvfs/issues/92 path_spec = sqlite_blob_path_spec.SQLiteBlobPathSpec( table_name=table_name, column_name=column_name, row_index=0, parent=self.path_spec.parent) sub_file_entry = self._file_system.GetFileEntryByPathSpec(path_spec) if not sub_file_entry: self._number_of_entries = 0 else: self._number_of_entries = sub_file_entry.GetNumberOfRows() for row_index in range(0, self._number_of_entries): yield sqlite_blob_path_spec.SQLiteBlobPathSpec( table_name=table_name, column_name=column_name, row_index=row_index, parent=self.path_spec.parent)