Exemple #1
0
def request_videos(blink, time=None, page=0):
    """
    Perform a request for videos.

    :param blink: Blink instance.
    :param time: Get videos since this time.  In epoch seconds.
    :param page: Page number to get videos from.
    """
    timestamp = get_time(time)
    url = f"{blink.urls.base_url}/api/v1/accounts/{blink.account_id}/media/changed?since={timestamp}&page={page}"
    return http_get(blink, url)
Exemple #2
0
def request_videos(blink, time=None, page=0):
    """
    Perform a request for videos.

    :param blink: Blink instance.
    :param time: Get videos since this time.  In epoch seconds.
    :param page: Page number to get videos from.
    """
    timestamp = get_time(time)
    url = "{}/api/v2/videos/changed?since={}&page={}".format(
        blink.urls.base_url, timestamp, page)
    return http_get(blink, url)
Exemple #3
0
 def test_download_video_exit(self, mock_req):
     """Test we exit method when provided bad response."""
     blink = blinkpy.Blink()
     # pylint: disable=protected-access
     blinkpy._LOGGER.setLevel(logging.DEBUG)
     blink.last_refresh = 0
     mock_req.return_value = {}
     formatted_date = get_time(blink.last_refresh)
     expected_log = [
         "INFO:blinkpy.blinkpy:Retrieving videos since {}".format(formatted_date),
         "DEBUG:blinkpy.blinkpy:Processing page 1",
         "INFO:blinkpy.blinkpy:No videos found on page 1. Exiting.",
     ]
     with self.assertLogs() as dl_log:
         blink.download_videos("/tmp")
     self.assertEqual(dl_log.output, expected_log)
Exemple #4
0
    def download_videos(self,
                        path,
                        since=None,
                        camera="all",
                        stop=10,
                        debug=False):
        """
        Download all videos from server since specified time.

        :param path: Path to write files.  /path/<cameraname>_<recorddate>.mp4
        :param since: Date and time to get videos from.
                      Ex: "2018/07/28 12:33:00" to retrieve videos since
                           July 28th 2018 at 12:33:00
        :param camera: Camera name to retrieve.  Defaults to "all".
                       Use a list for multiple cameras.
        :param stop: Page to stop on (~25 items per page. Default page 10).
        :param debug: Set to TRUE to prevent downloading of items.
                      Instead of downloading, entries will be printed to log.
        """
        if since is None:
            since_epochs = self.last_refresh
        else:
            parsed_datetime = parse(since, fuzzy=True)
            since_epochs = parsed_datetime.timestamp()

        formatted_date = get_time(time_to_convert=since_epochs)
        _LOGGER.info("Retrieving videos since %s", formatted_date)

        if not isinstance(camera, list):
            camera = [camera]

        for page in range(1, stop):
            response = api.request_videos(self, time=since_epochs, page=page)
            _LOGGER.debug("Processing page %s", page)
            try:
                result = response["media"]
                if not result:
                    raise IndexError
            except (KeyError, IndexError):
                _LOGGER.info("No videos found on page %s. Exiting.", page)
                break

            self._parse_downloaded_items(result, camera, path, debug)
Exemple #5
0
 def test_parse_downloaded_items(self, mock_req):
     """Test ability to parse downloaded items list."""
     blink = blinkpy.Blink()
     # pylint: disable=protected-access
     blinkpy._LOGGER.setLevel(logging.DEBUG)
     generic_entry = {
         "created_at": "1970",
         "device_name": "foo",
         "deleted": True,
         "media": "/bar.mp4",
     }
     result = [generic_entry]
     mock_req.return_value = {"media": result}
     blink.last_refresh = 0
     formatted_date = get_time(blink.last_refresh)
     expected_log = [
         "INFO:blinkpy.blinkpy:Retrieving videos since {}".format(formatted_date),
         "DEBUG:blinkpy.blinkpy:Processing page 1",
         "DEBUG:blinkpy.blinkpy:foo: /bar.mp4 is marked as deleted.",
     ]
     with self.assertLogs() as dl_log:
         blink.download_videos("/tmp", stop=2, delay=0)
     self.assertEqual(dl_log.output, expected_log)
 def test_parse_camera_not_in_list(self, mock_req, mock_sess):
     """Test ability to parse downloaded items list."""
     blink = blinkpy.Blink()
     # pylint: disable=protected-access
     blinkpy._LOGGER.setLevel(logging.DEBUG)
     generic_entry = {
         'created_at': '1970',
         'device_name': 'foo',
         'deleted': True,
         'media': '/bar.mp4'
     }
     result = [generic_entry]
     mock_req.return_value = {'media': result}
     blink.last_refresh = 0
     formatted_date = get_time(blink.last_refresh)
     expected_log = [
         "INFO:blinkpy.blinkpy:Retrieving videos since {}".format(
             formatted_date), "DEBUG:blinkpy.blinkpy:Processing page 1",
         "DEBUG:blinkpy.blinkpy:Skipping videos for foo."
     ]
     with self.assertLogs() as dl_log:
         blink.download_videos('/tmp', camera='bar', stop=2)
     self.assertEqual(dl_log.output, expected_log)