Freebox thin client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Laurent Kislaire 6904c0baa9 NoMdns, Logs and script 10 months ago
pyfbx NoMdns, Logs and script 10 months ago
tests NoMdns, Logs and script 10 months ago
.gitignore NoMdns, Logs and script 10 months ago
.gitlab-ci.yml NoMdns, Logs and script 10 months ago
LICENSE Initial commit 10 months ago
MANIFEST.in Initial commit 10 months ago
README.md NoMdns, Logs and script 10 months ago
requirements-dev.txt Initial commit 10 months ago
requirements.txt Initial commit 10 months ago
setup.cfg NoMdns, Logs and script 10 months ago
setup.py NoMdns, Logs and script 10 months ago

README.md

Freebox client library

Features

  • Full API coverage
  • Https and Mdns discovery
  • Thin client wrapper library (~250 lines)
  • CLI script example to access any command

pipeline status coverage report

Script

A script called pyfbx is installed and can be used like this:

To register the application:

pyfbx SuperAppId

Once registration is done on the device, write down the application token.

Using this app token, acquire a session token to execute a test command

pyfbx -t '<TOKEN>' SuperAppId

You can also store the token in a file (example token.txt) and also execute a specific command

pyfbx -t f:/home/foo/token.txt SuperAppId -c 'Contacts.Create_a_contact(post_data={"display_name": "Sandy Kilo", "first_name": "Sandy", "last_name":"Kilo"})'
{   'birthday': '',
    'company': '',
    'display_name': 'Sandy Kilo',
    'first_name': 'Sandy',
    'id': 17,
    'last_name': 'Kilo',
    'last_update': 1554378898,
    'notes': '',
    'photo_url': ''}

Note : Don’t forget to escape token and command.

pyfbx -h
usage: pyfbx [-h] [-c COMMAND] [-t TOKEN] [-v] [-n] app_id

positional arguments:
  app_id                application identifier

optional arguments:
  -h, --help            show this help message and exit
  -c COMMAND, --command COMMAND
                        command, defaults to
                        System.Get_the_current_system_info()
  -t TOKEN, --token TOKEN
                        token (or f:<filename>)
  -v, --verbose         increase verbosity to INFO, use twice for DEBUG
  -n, --http            Disable MDNS and use http known address

Library usage

The REST API is generated at runtime with the creation of class attributes for all Freebox subsystems.

>>> from pyfbx import Fbx
>>> f=Fbx()             # By default, this will perform MDNS discovery
>>> f=Fbx(nomdns=True)  # Use faster http api discovery
>>> f.<TAB>
f.Airmedia         f.Download_Config  f.Lan              f.Rrd              f.Upnpav
f.Call             f.Download_Feeds   f.Lcd              f.Share            f.Vpn
f.Connection       f.Freeplug         f.Nat              f.Storage          f.Vpn_Client
f.Contacts         f.Fs               f.Network_Share    f.Switch           f.Wifi
f.Dhcp             f.Ftp              f.Parental         f.System           f.mksession(
f.Download         f.Igd              f.Pvr              f.Upload           f.register(
>>> f.Freeplug.<TAB>
f.Freeplug.Get_a_particular_Freeplug_information(
f.Freeplug.Reset_a_Freeplug(
f.Freeplug.Get_the_current_Freeplugs_networks(

# Register application to get app token. Physical access is required.
>>> token = f.register("AppId", "My App", "PC")
# Generate session token
>>> f.mksession(app_id="AppId", token=token)

>>> help(f.Lan.Update_the_current_Lan_configuration)
Help on method Update_the_current_Lan_configuration:

Update_the_current_Lan_configuration(post_data) method of pyfbx.client.Lan instance
    Update the current Lan configuration

    Url parameters:
    Post data:PostData

>>> help(f.Contacts.Access_a_given_contact_entry)
Help on method Access_a_given_contact_entry:

Access_a_given_contact_entry(id) method of pyfbx.client.Contacts instance
    Access a given contact entry

    Url parameters: id
    Post data:

>>> f.Lan.Get_the_current_Lan_configuration()
{'name_dns': 'freebox-server', 'name': 'Freebox Server', 'name_mdns': 'Freebox-Server', 
'mode': 'router', 'name_netbios': 'Freebox_Server', 'ip': '192.168.1.254'}

# Any subsequent call to mksession will refresh the session token
>>> f.mksession()

Developpment

Testing

You can run tests with

pip3 install -r requirements-dev.txt
pytest tests

Currently to get 100% coverage, a Freebox sitting on its default IP (192.168.1.254) is required.