Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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())
Exemplo n.º 5
0
    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}')
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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())
Exemplo n.º 8
0
    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())