Skip to content

Commit ce562d4

Browse files
committed
v0.0.7 - added timeout
1 parent 7075858 commit ce562d4

4 files changed

Lines changed: 59 additions & 18 deletions

File tree

README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,21 @@ Usage
1616
```python
1717
from fsapi import FSAPI
1818

19-
fs = FSAPI('http://192.168.1.180:80/device', 1234)
19+
URL = 'http://192.168.1.39:80/device'
20+
PIN = 1234
21+
TIMEOUT = 1 # in seconds
22+
23+
fs = FSAPI(URL, PIN, TIMEOUT)
2024
print('Name: %s' % fs.friendly_name)
2125
print('Mute: %s' % fs.mute)
2226
print('Mode: %s' % fs.mode)
27+
print('Modes: %s' % fs.modes)
2328
print('Power: %s' % fs.power)
29+
print('Volume steps: %s' % fs.volume_steps)
2430
print('Volume: %s' % fs.volume)
31+
print('Play status: %s' % fs.play_status)
2532
print('Track name: %s' % fs.play_info_name)
2633
print('Track text: %s' % fs.play_info_text)
27-
print('Graphics: %s' % fs.play_info_graph)
34+
print('Artist: %s' % fs.play_info_artist)
35+
print('Album: %s' % fs.play_info_album)
36+
print('Graphics: %s' % fs.play_info_graphics)

fsapi/__init__.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,34 @@
33
For example internet radios from: Medion, Hama, Auna, ...
44
"""
55
import requests
6+
import logging
7+
import traceback
68
from lxml import objectify
79

810

911
class FSAPI(object):
1012

13+
DEFAULT_TIMEOUT_IN_SECONDS = 1
14+
1115
PLAY_STATES = {
1216
0: 'stopped',
1317
1: 'unknown',
1418
2: 'playing',
1519
3: 'paused',
1620
}
1721

18-
def __init__(self, fsapi_device_url, pin):
22+
def __init__(self, fsapi_device_url, pin, timeout=DEFAULT_TIMEOUT_IN_SECONDS):
1923
self.pin = pin
2024
self.sid = None
2125
self.webfsapi = None
2226
self.fsapi_device_url = fsapi_device_url
27+
self.timeout = timeout
2328

2429
self.webfsapi = self.get_fsapi_endpoint()
2530
self.sid = self.create_session()
2631

2732
def get_fsapi_endpoint(self):
28-
endpoint = requests.get(self.fsapi_device_url)
33+
endpoint = requests.get(self.fsapi_device_url, timeout = self.timeout)
2934
doc = objectify.fromstring(endpoint.content)
3035
return doc.webfsapi.text
3136

@@ -34,24 +39,30 @@ def create_session(self):
3439
return doc.sessionId.text
3540

3641
def call(self, path, extra=None):
37-
if not self.webfsapi:
38-
raise Exception('No server found')
42+
"""Execute a frontier silicon API call."""
43+
try:
44+
if not self.webfsapi:
45+
raise Exception('No server found')
3946

40-
if type(extra) is not dict:
41-
extra = dict()
47+
if type(extra) is not dict:
48+
extra = dict()
4249

43-
params = dict(
44-
pin=self.pin,
45-
sid=self.sid,
46-
)
50+
params = dict(
51+
pin=self.pin,
52+
sid=self.sid,
53+
)
4754

48-
params.update(**extra)
55+
params.update(**extra)
4956

50-
result = requests.get('%s/%s' % (self.webfsapi, path), params=params)
51-
if result.status_code == 404:
52-
return None
57+
result = requests.get('%s/%s' % (self.webfsapi, path), params=params, timeout = self.timeout)
58+
if result.status_code == 404:
59+
return None
60+
61+
return objectify.fromstring(result.content)
62+
except Exception as e:
63+
logging.error('FSAPI Exception: ' + traceback.format_exc())
5364

54-
return objectify.fromstring(result.content)
65+
return None
5566

5667
def __del__(self):
5768
self.call('DELETE_SESSION')

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929

3030
setup(name='fsapi',
31-
version='0.0.6',
31+
version='0.0.7',
3232
description='Implementation of the Frontier Silicon API for Python',
3333
author='Krasimir Zhelev',
3434
author_email='krasimir.zhelev@gmail.com',

tests.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from fsapi import FSAPI
2+
3+
URL = 'http://192.168.1.39:80/device'
4+
PIN = 1234
5+
TIMEOUT = 1 # in seconds
6+
7+
fs = FSAPI(URL, PIN, TIMEOUT)
8+
print('Name: %s' % fs.friendly_name)
9+
print('Mute: %s' % fs.mute)
10+
print('Mode: %s' % fs.mode)
11+
print('Modes: %s' % fs.modes)
12+
print('Power: %s' % fs.power)
13+
print('Volume steps: %s' % fs.volume_steps)
14+
print('Volume: %s' % fs.volume)
15+
print('Play status: %s' % fs.play_status)
16+
print('Track name: %s' % fs.play_info_name)
17+
print('Track text: %s' % fs.play_info_text)
18+
print('Artist: %s' % fs.play_info_artist)
19+
print('Album: %s' % fs.play_info_album)
20+
print('Graphics: %s' % fs.play_info_graphics)
21+

0 commit comments

Comments
 (0)