Skip to content

Commit

Permalink
Merge 2ebbe46 into 5d296cc
Browse files Browse the repository at this point in the history
  • Loading branch information
fronzbot committed Apr 9, 2020
2 parents 5d296cc + 2ebbe46 commit fdbe39a
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 21 deletions.
6 changes: 3 additions & 3 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[run]
omit =
helpers/*
parallel = true
omit =
tests/*
setup.py
setup.py
2 changes: 2 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[flake8]
ignore = BLK100
4 changes: 4 additions & 0 deletions .hound.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ python:
ignored_directories:
- docs

flake8:
enabled: true
config_file: .flake8

fail_on_violations: true
5 changes: 4 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ sudo: required
matrix:
fast_finish: true
include:
- python: "3.5.3"
- python: "3.7"
env: TOXENV=lint
dist: xenial
- python: "3.5.3"
env: TOXENV=py35
- python: "3.6"
Expand All @@ -13,6 +14,8 @@ matrix:
- python: "3.7"
env: TOXENV=py37
dist: xenial
- python: "3.8"
env: TOXENV=py38
- python: "3.8-dev"
env: TOXENV=py38
dist: xenial
Expand Down
2 changes: 1 addition & 1 deletion blinkpy/helpers/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
'''
OTHER
'''
TIMESTAMP_FORMAT = '%Y-%m-%dT%H:%M:%S%Z'
TIMESTAMP_FORMAT = '%Y-%m-%dT%H:%M:%S%z'

DEFAULT_MOTION_INTERVAL = 1
DEFAULT_REFRESH = 30
Expand Down
13 changes: 13 additions & 0 deletions blinkpy/helpers/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,28 @@

import logging
import time
from calendar import timegm
from functools import partial, wraps
from requests import Request, Session, exceptions
import dateutil.parser
from blinkpy.helpers.constants import BLINK_URL, TIMESTAMP_FORMAT
import blinkpy.helpers.errors as ERROR


_LOGGER = logging.getLogger(__name__)


def time_to_seconds(timestamp):
"""Convert TIMESTAMP_FORMAT time to seconds."""
try:
dtime = dateutil.parser.isoparse(timestamp)
except ValueError:
_LOGGER.error("Incorrect timestamp format for conversion: %s.",
timestamp)
return False
return timegm(dtime.timetuple())


def get_time(time_to_convert=None):
"""Create blink-compatible timestamp."""
if time_to_convert is None:
Expand Down
9 changes: 7 additions & 2 deletions blinkpy/sync_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from requests.structures import CaseInsensitiveDict
from blinkpy import api
from blinkpy.camera import BlinkCamera
from blinkpy.helpers.util import time_to_seconds
from blinkpy.helpers.constants import ONLINE

_LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -163,7 +164,7 @@ def refresh(self, force_cache=False):
def check_new_videos(self):
"""Check if new videos since last refresh."""
try:
interval = self.blink.last_refresh - self.motion_interval*60
interval = self.blink.last_refresh - self.motion_interval * 60
except TypeError:
# This is the first start, so refresh hasn't happened yet.
# No need to check for motion.
Expand All @@ -187,9 +188,13 @@ def check_new_videos(self):
name = entry['device_name']
clip = entry['media']
timestamp = entry['created_at']
self.motion[name] = True
self.motion[name] = self.check_new_video_time(timestamp)
self.last_record[name] = {'clip': clip, 'time': timestamp}
except KeyError:
_LOGGER.debug("No new videos since last refresh.")

return True

def check_new_video_time(self, timestamp):
"""Check if video has timestamp since last refresh."""
return time_to_seconds(timestamp) > self.blink.last_refresh
17 changes: 9 additions & 8 deletions requirements_test.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
flake8==3.5.0
flake8-docstrings==1.3.0
pylint==2.3.0
pydocstyle==2.1.1
pytest==3.7.1
pytest-cov>=2.3.1
pytest-sugar>=0.9.0
pytest-timeout>=1.0.0
coverage==4.5.4
flake8==3.7.9
flake8-docstrings==1.5.0
pylint==2.4.4
pydocstyle==5.0.2
pytest==5.3.5
pytest-cov==2.8.1
pytest-sugar>=0.9.2
pytest-timeout>=1.3.3
restructuredtext-lint>=1.0.1
pygments>=2.2.0
24 changes: 21 additions & 3 deletions tests/test_sync_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,41 @@ def test_check_new_videos(self, mock_resp):
'media': [{
'device_name': 'foo',
'media': '/foo/bar.mp4',
'created_at': '1970-01-01T00:00:00+0:00'
'created_at': '1990-01-01T00:00:00+00:00'
}]
}

sync_module = self.blink.sync['test']
sync_module.cameras = {'foo': None}
sync_module.blink.last_refresh = 0
self.assertEqual(sync_module.motion, {})
self.assertTrue(sync_module.check_new_videos())
self.assertEqual(sync_module.last_record['foo'],
{'clip': '/foo/bar.mp4',
'time': '1970-01-01T00:00:00+0:00'})
'time': '1990-01-01T00:00:00+00:00'})
self.assertEqual(sync_module.motion, {'foo': True})
mock_resp.return_value = {'media': []}
self.assertTrue(sync_module.check_new_videos())
self.assertEqual(sync_module.motion, {'foo': False})
self.assertEqual(sync_module.last_record['foo'],
{'clip': '/foo/bar.mp4',
'time': '1970-01-01T00:00:00+0:00'})
'time': '1990-01-01T00:00:00+00:00'})

def test_check_new_videos_old_date(self, mock_resp):
"""Test videos return response with old date."""
mock_resp.return_value = {
'media': [{
'device_name': 'foo',
'media': '/foo/bar.mp4',
'created_at': '1970-01-01T00:00:00+00:00'
}]
}

sync_module = self.blink.sync['test']
sync_module.cameras = {'foo': None}
sync_module.blink.last_refresh = 1000
self.assertTrue(sync_module.check_new_videos())
self.assertEqual(sync_module.motion, {'foo': False})

def test_check_new_videos_failed(self, mock_resp):
"""Test method when response is unexpected."""
Expand Down
9 changes: 8 additions & 1 deletion tests/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import unittest
from unittest import mock
import time
from blinkpy.helpers.util import Throttle, BlinkURLHandler
from blinkpy.helpers.util import Throttle, BlinkURLHandler, time_to_seconds


class TestUtil(unittest.TestCase):
Expand Down Expand Up @@ -105,3 +105,10 @@ def test_legacy_subdomains(self):
self.assertEqual(urls.subdomain, 'rest-test')
urls = BlinkURLHandler('test', legacy=True)
self.assertEqual(urls.subdomain, 'rest.test')

def test_time_to_seconds(self):
"""Test time to seconds conversion."""
correct_time = '1970-01-01T00:00:05+00:00'
wrong_time = '1/1/1970 00:00:03'
self.assertEqual(time_to_seconds(correct_time), 5)
self.assertFalse(time_to_seconds(wrong_time))
4 changes: 2 additions & 2 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ setenv =
LANG=en_US.UTF-8
PYTHONPATH = {toxinidir}
commands =
py.test --timeout=30 --duration=10 --cov=blinkpy --cov-report term-missing {posargs}
pytest --timeout=9 --durations=10 --cov=blinkpy --cov-report term-missing {posargs}
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/requirements_test.txt

[testenv:lint]
deps =
-r{toxinidir}/requirements.txt
Expand Down

0 comments on commit fdbe39a

Please sign in to comment.