Completed
Pull Request — master (#336)
by James
03:24
created

CaptureScreenshotAction._get_capture_url()   B

Complexity

Conditions 6

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 6
dl 0
loc 21
rs 7.8868

3 Methods

Rating   Name   Duplication   Size   Complexity  
A CubeSensorsMeasurementsSensor.poll() 0 8 3
A CubeSensorsMeasurementsSensor.cleanup() 0 2 1
A CubeSensorsMeasurementsSensor.add_trigger() 0 2 1
1
import httplib
2
from tempfile import NamedTemporaryFile
3
4
import requests
5
from six.moves import urllib
6
7
from st2actions.runners.pythonrunner import Action
8
9
CHUNK_SIZE = (512 * 1025)
10
11
12
class CaptureScreenshotAction(Action):
13
    def run(self, model, url, username=None, password=None, resolution=None):
14
        capture_url = self._get_capture_url(model=model, base_url=url, username=username,
15
                                            password=password, resolution=resolution)
16
        result = self._capture_screenshot(capture_url=capture_url)
17
        return result
18
19
    def _capture_screenshot(self, capture_url):
20
        print capture_url
21
        response = requests.get(capture_url)
22
23
        if response.status_code not in [httplib.OK, httplib.CREATED]:
24
            msg = 'Failed to capture screenshot: %s (%s)' % (response.text, response.status_code)
25
            raise Exception(msg)
26
27
        try:
28
            temp_file = NamedTemporaryFile(suffix='.jpg', delete=False)
29
30
            for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
31
                if chunk:
32
                    temp_file.write(chunk)
33
        finally:
34
            temp_file.close()
35
36
        return temp_file.name
37
38
    def _get_capture_url(self, model, base_url, username=None, password=None, resolution=None):
39
        """
40
        Return capture URL for a particular camera model.
41
        """
42
        query_params = {}
43
44
        if model == 'easyn':
45
            url = base_url + '/snapshot.jpg'
46
            if username:
47
                query_params['user'] = username
48
            if password:
49
                query_params['pwd'] = password
50
            if resolution:
51
                query_params['resolution'] = resolution
52
        else:
53
            raise ValueError('Unsupported model: %s' % (model))
54
55
        if query_params:
56
            url = url + '?' + urllib.parse.urlencode(query_params)
57
58
        return url
59