Skip to content

Commit

Permalink
v0.0.7 - added timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
zhelev committed Feb 18, 2018
1 parent 7075858 commit ce562d4
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 18 deletions.
13 changes: 11 additions & 2 deletions README.md
Expand Up @@ -16,12 +16,21 @@ Usage
```python
from fsapi import FSAPI

fs = FSAPI('http://192.168.1.180:80/device', 1234)
URL = 'http://192.168.1.39:80/device'
PIN = 1234
TIMEOUT = 1 # in seconds

fs = FSAPI(URL, PIN, TIMEOUT)
print('Name: %s' % fs.friendly_name)
print('Mute: %s' % fs.mute)
print('Mode: %s' % fs.mode)
print('Modes: %s' % fs.modes)
print('Power: %s' % fs.power)
print('Volume steps: %s' % fs.volume_steps)
print('Volume: %s' % fs.volume)
print('Play status: %s' % fs.play_status)
print('Track name: %s' % fs.play_info_name)
print('Track text: %s' % fs.play_info_text)
print('Graphics: %s' % fs.play_info_graph)
print('Artist: %s' % fs.play_info_artist)
print('Album: %s' % fs.play_info_album)
print('Graphics: %s' % fs.play_info_graphics)
41 changes: 26 additions & 15 deletions fsapi/__init__.py
Expand Up @@ -3,29 +3,34 @@
For example internet radios from: Medion, Hama, Auna, ...
"""
import requests
import logging
import traceback
from lxml import objectify


class FSAPI(object):

DEFAULT_TIMEOUT_IN_SECONDS = 1

PLAY_STATES = {
0: 'stopped',
1: 'unknown',
2: 'playing',
3: 'paused',
}

def __init__(self, fsapi_device_url, pin):
def __init__(self, fsapi_device_url, pin, timeout=DEFAULT_TIMEOUT_IN_SECONDS):
self.pin = pin
self.sid = None
self.webfsapi = None
self.fsapi_device_url = fsapi_device_url
self.timeout = timeout

self.webfsapi = self.get_fsapi_endpoint()
self.sid = self.create_session()

def get_fsapi_endpoint(self):
endpoint = requests.get(self.fsapi_device_url)
endpoint = requests.get(self.fsapi_device_url, timeout = self.timeout)
doc = objectify.fromstring(endpoint.content)
return doc.webfsapi.text

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

def call(self, path, extra=None):
if not self.webfsapi:
raise Exception('No server found')
"""Execute a frontier silicon API call."""
try:
if not self.webfsapi:
raise Exception('No server found')

if type(extra) is not dict:
extra = dict()
if type(extra) is not dict:
extra = dict()

params = dict(
pin=self.pin,
sid=self.sid,
)
params = dict(
pin=self.pin,
sid=self.sid,
)

params.update(**extra)
params.update(**extra)

result = requests.get('%s/%s' % (self.webfsapi, path), params=params)
if result.status_code == 404:
return None
result = requests.get('%s/%s' % (self.webfsapi, path), params=params, timeout = self.timeout)
if result.status_code == 404:
return None

return objectify.fromstring(result.content)
except Exception as e:
logging.error('FSAPI Exception: ' + traceback.format_exc())

return objectify.fromstring(result.content)
return None

def __del__(self):
self.call('DELETE_SESSION')
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -28,7 +28,7 @@


setup(name='fsapi',
version='0.0.6',
version='0.0.7',
description='Implementation of the Frontier Silicon API for Python',
author='Krasimir Zhelev',
author_email='krasimir.zhelev@gmail.com',
Expand Down
21 changes: 21 additions & 0 deletions tests.py
@@ -0,0 +1,21 @@
from fsapi import FSAPI

URL = 'http://192.168.1.39:80/device'
PIN = 1234
TIMEOUT = 1 # in seconds

fs = FSAPI(URL, PIN, TIMEOUT)
print('Name: %s' % fs.friendly_name)
print('Mute: %s' % fs.mute)
print('Mode: %s' % fs.mode)
print('Modes: %s' % fs.modes)
print('Power: %s' % fs.power)
print('Volume steps: %s' % fs.volume_steps)
print('Volume: %s' % fs.volume)
print('Play status: %s' % fs.play_status)
print('Track name: %s' % fs.play_info_name)
print('Track text: %s' % fs.play_info_text)
print('Artist: %s' % fs.play_info_artist)
print('Album: %s' % fs.play_info_album)
print('Graphics: %s' % fs.play_info_graphics)

0 comments on commit ce562d4

Please sign in to comment.