def _translate_path(self, path: str) -> str: """Translate path to path in data dir. Args: path: Path in mounted directory eg. /example.com/2019-01-13H20:00/foo/bar.png Returns: Path in data directory to raw data str Raises: FileNotFoundError: If file at given path does not exist """ parsed = Path(path) exists = self.index.photos_file_exists( domain=parsed.domain, captured_at=parsed.captured_at, full_filename=parsed.end_as_file(), refresh_rate=self.refresh_rate) if not exists: raise FileNotFoundError('photo do not exist in index') photo = self.index.photos_get_photo(domain=parsed.domain, captured_at=parsed.captured_at, full_filename=parsed.end_as_file(), refresh_rate=self.refresh_rate) return photo.path.full_path()
def test_end_can_be_treated_as_file(self): """Test end can be treated as file.""" path = Path('/example.com/2019-01-13H20:00/foo/bar') self.assertEqual('/foo/bar', path.end_as_file()) path = Path('/example.com/2019-01-13H20:00/foo/bar/') self.assertEqual('/foo/bar', path.end_as_file()) path = Path('/example.com/2019-01-13H20:00/') self.assertEqual('/', path.end_as_file())
def test_path_can_parse_parts_of_path(self): """Test path can parse parts.""" path = '/example.com/2019-01-13H20:00/foo/bar/baz.png' path = Path(path) self.assertEqual('example.com', path.domain) self.assertEqual('2019-01-13H20:00', path.captured_at) self.assertEqual('/foo/bar/baz.png', path.end)
def _list(self, path: str) -> list: """List directory. Args: path: path to directory Returns: List of directory content list """ if path == Filesystem.ROOT_PATH: return self._list_root() parsed = Path(path) if not parsed.includes_captured_at(): return self._list_unique_captures(parsed.domain) return self._list_directory(parsed.domain, parsed.captured_at, parsed.end_as_directory())
def _attributes(self, path: str) -> dict: """Get attributes of file at path. Args: path: path to file Returns: Dictionary with file attributes, see files module dict Raises: FileNotFoundError: if no file exists at given path """ if path == Filesystem.ROOT_PATH: return Directory.attributes() parsed = Path(path) if parsed.includes_domain() and not parsed.includes_captured_at(): domains = self.index.photos_unique_domains(self.refresh_rate) if parsed.domain not in domains: raise FileNotFoundError(f'Unkown domain: {parsed.domain}') return Directory.attributes() if parsed.includes_captured_at() and not parsed.includes_end(): captures = self.index.photos_unique_captures_of_domain( parsed.domain, self.refresh_rate) captures.append(LastCapture.FILENAME) if parsed.captured_at not in captures: raise FileNotFoundError( f'Unkown capture: {parsed.captured_at}') return Directory.attributes() if self.index.photos_directory_exists( domain=parsed.domain, captured_at=parsed.captured_at, directory=parsed.end_as_directory(), refresh_rate=self.refresh_rate): return Directory.attributes() file_exists = self.index.photos_file_exists( domain=parsed.domain, captured_at=parsed.captured_at, full_filename=parsed.end_as_file(), refresh_rate=self.refresh_rate) if file_exists: return File.attributes(None, file_exists) raise FileNotFoundError(f'No file at path: {path}')
def test_path_can_parse_end_correctly(self): """Test path can parse end correctly.""" path = Path('/example.com/2019-01-13H20:00') self.assertEqual('/', path.end) path = Path('/example.com/2019-01-13H20:00/') self.assertEqual('/', path.end) path = Path('/example.com/2019-01-13H20:00/foo') self.assertEqual('/foo', path.end) path = Path('/example.com/2019-01-13H20:00/foo/') self.assertEqual('/foo', path.end) path = Path('/example.com/2019-01-13H20:00/foo/bar') self.assertEqual('/foo/bar', path.end) path = Path('/example.com/2019-01-13H20:00/foo/bar/') self.assertEqual('/foo/bar', path.end) path = Path('/example.com/2019-01-13H20:00/foo/bar/baz.png') self.assertEqual('/foo/bar/baz.png', path.end)
def test_check_for_end(self): """Test check for end.""" path = Path('/example.com/2019-01-13H20:00/foo/bar') self.assertTrue(path.includes_end()) path = Path('/example.com/2019-01-13H20:00/foo') self.assertTrue(path.includes_end()) path = Path('/example.com/2019-01-13H20:00/') self.assertFalse(path.includes_end()) path = Path('/example.com/2019-01-13H20:00') self.assertFalse(path.includes_end()) path = Path('/example.com/') self.assertFalse(path.includes_end()) path = Path('/') self.assertFalse(path.includes_captured_at())
def test_check_for_domain(self): """Test check for domain.""" path = Path('/example.com/2019-01-13H20:00') self.assertTrue(path.includes_domain()) path = Path('/example.com/') self.assertTrue(path.includes_domain()) path = Path('/example.com') self.assertTrue(path.includes_domain()) path = Path('/') self.assertFalse(path.includes_domain())