summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-10 08:32:59 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-10 08:32:59 +0000
commitb06c36657f387d53a01f87a9be09b20281d906ff (patch)
treef2737610847cd4c886bf1e94fe09a077f8e1e7db
parenta52229c0efd877c2b3d22842309d2c80e9515b8f (diff)
automatic import of python-homepluscontrol
-rw-r--r--.gitignore1
-rw-r--r--python-homepluscontrol.spec444
-rw-r--r--sources1
3 files changed, 446 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..da045e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/homepluscontrol-0.1.tar.gz
diff --git a/python-homepluscontrol.spec b/python-homepluscontrol.spec
new file mode 100644
index 0000000..a2622f8
--- /dev/null
+++ b/python-homepluscontrol.spec
@@ -0,0 +1,444 @@
+%global _empty_manifest_terminate_build 0
+Name: python-homepluscontrol
+Version: 0.1
+Release: 1
+Summary: Python-based API to interact with the Legrand Home + Control interface
+License: GPLv3
+URL: https://github.com/chemaaa/homepluscontrol
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/33/36/c09919a84ae317c85a4e7db2929a1f38ffd0abf6f259bc5847bc526d66a3/homepluscontrol-0.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-aiohttp
+Requires: python3-PyJWT
+Requires: python3-yarl
+
+%description
+# Home + Control
+This is a basic Python library that interacts with the *Legrand Home + Control* API. It is
+primarily intended for integration into Smart Home platforms such as Home Assistant.
+
+More information of the API can be found here: https://developer.legrand.com/
+
+The library currently supports 4 types of Legrand modules:
+
+1) Plugs (power outlets)
+2) Lights (connected switches)
+3) Remotes (wireless switches)
+4) Automations (shutters/covers)
+
+The first two - plugs and lights - are modeled as basic switches that can be interacted with to set their status to *on* or *off*.
+Remotes are presented as passive modules that only have a battery level attribute.
+Automations can be issued commands to open or close to their full positions and to be stopped during the motion.
+
+A 'home' is represented by a *plant* which presents all of its corresponding modules in a topology. A *plant* is basically a
+Legrand Home+ Control gateway.
+
+The status of each module in the *plant* can be accessed through a single *status* call to the *plant* or through individual *status*
+calls to each module.
+
+## Authentication
+The *Legrand Home + Control* API uses Oauth2 authentication, so you must first register an account at https://developer.legrand.com/.
+
+Once registered, you will then need to create a subscription to the *Starter Kit* (currently the only subscription available) and this will
+generate your SUBSCRIPTION_KEY.
+
+As a final step, you will have to register an Application, where you will have to define a name, a redirect URL and the scopes of your application
+(for simplicity you can mark all scopes).
+
+Once the Application is confirmed, you should receive an email containing the CLIENT_IDENTIFIER and
+the CLIENT_SECRET which you will be using to set up the authentication flows.
+
+### Authentication Flow
+Communication with the API, first requires Oauth2 authentication to obtain an access and a refresh token. Subsequent requests to the API, require the use of the SUBSCRIPTION_KEY in addition to the access token.
+
+Information about the Oauth2 exchange is provided here: https://developer.legrand.com/tutorials/0auth2-end-point-url/
+
+## Quickstart
+Install `homepluscontrol` using `pip`:
+
+ $ pip install homepluscontrol
+
+### Usage Example
+The following script is a simple example of how this Python library can be used::
+
+```python
+from homepluscontrol import authentication, homeplusplant
+import asyncio
+
+client_id = 'YOUR_CLIENT_IDENTIFIER'
+client_secret = 'YOUR_CLIENT_SECRET'
+subscription_key = 'YOUR_SUBSCRIPTION_KEY'
+redirect_uri = 'https://www.example.com'
+
+dummy_token =
+ {"refresh_token":
+ "dummy-refresh-token",
+ "access_token": "dummy-access-token",
+ "expires_at": -1,
+ "expires_on": -1}
+api_plant_url = 'https://api.developer.legrand.com/hc/api/v1.0/plants'
+
+# Create the asynchronous client to handle the authentication
+# process and the authenitcated requests
+client = authentication.HomePlusOAuth2Async(client_id,
+ client_secret,
+ subscription_key,
+ token=dummy_token,
+ redirect_uri=redirect_uri)
+
+# The URL returned by this method launches the Oauth2 flow and
+# allows a user to confirm the process.
+# Doing so redirects the user's browser/client to the redirect URI
+# and includes the code and the state for the next step.
+authorization_url = client.generate_authorize_url()
+print(authorization_url)
+
+# Here is where you can enter the complete redirect URL
+return_url = input('Redirect URL received:')
+
+# This function will now handle the asynchronous calls to the API
+async def interact_with_api():
+ token = await client.async_fetch_initial_token(return_url)
+ print(token)
+ # The client now has a valid token and can be used
+ # to interact with the API.
+
+ # First get the plant information
+ result = await client.request('get', api_plant_url)
+ plant_info = await result.json()
+ print(plant_info)
+ plant_array = []
+ for p in plant_info['plants']:
+ plant_array.append(
+ homeplusplant.HomePlusPlant(p['id'],
+ p['name'],
+ p['country'],
+ client)
+ )
+ plant = plant_array[0]
+ print(plant)
+
+ # Next read the module information for the plant
+ await plant.update_topology_and_modules()
+ for mod_id in plant.modules.keys():
+ print(plant.modules[mod_id])
+ # Close the client session
+ await client.oauth_client.close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(interact_with_api())
+```
+
+## Testing
+`homepluscontrol` tests are based on `pytest`. To run, change to the root directory of `homepluscontrol` and use the command:
+
+ $ pip install -r requirements.txt
+ $ pip install -r requirements_test.txt
+ $ pytest
+
+
+
+%package -n python3-homepluscontrol
+Summary: Python-based API to interact with the Legrand Home + Control interface
+Provides: python-homepluscontrol
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-homepluscontrol
+# Home + Control
+This is a basic Python library that interacts with the *Legrand Home + Control* API. It is
+primarily intended for integration into Smart Home platforms such as Home Assistant.
+
+More information of the API can be found here: https://developer.legrand.com/
+
+The library currently supports 4 types of Legrand modules:
+
+1) Plugs (power outlets)
+2) Lights (connected switches)
+3) Remotes (wireless switches)
+4) Automations (shutters/covers)
+
+The first two - plugs and lights - are modeled as basic switches that can be interacted with to set their status to *on* or *off*.
+Remotes are presented as passive modules that only have a battery level attribute.
+Automations can be issued commands to open or close to their full positions and to be stopped during the motion.
+
+A 'home' is represented by a *plant* which presents all of its corresponding modules in a topology. A *plant* is basically a
+Legrand Home+ Control gateway.
+
+The status of each module in the *plant* can be accessed through a single *status* call to the *plant* or through individual *status*
+calls to each module.
+
+## Authentication
+The *Legrand Home + Control* API uses Oauth2 authentication, so you must first register an account at https://developer.legrand.com/.
+
+Once registered, you will then need to create a subscription to the *Starter Kit* (currently the only subscription available) and this will
+generate your SUBSCRIPTION_KEY.
+
+As a final step, you will have to register an Application, where you will have to define a name, a redirect URL and the scopes of your application
+(for simplicity you can mark all scopes).
+
+Once the Application is confirmed, you should receive an email containing the CLIENT_IDENTIFIER and
+the CLIENT_SECRET which you will be using to set up the authentication flows.
+
+### Authentication Flow
+Communication with the API, first requires Oauth2 authentication to obtain an access and a refresh token. Subsequent requests to the API, require the use of the SUBSCRIPTION_KEY in addition to the access token.
+
+Information about the Oauth2 exchange is provided here: https://developer.legrand.com/tutorials/0auth2-end-point-url/
+
+## Quickstart
+Install `homepluscontrol` using `pip`:
+
+ $ pip install homepluscontrol
+
+### Usage Example
+The following script is a simple example of how this Python library can be used::
+
+```python
+from homepluscontrol import authentication, homeplusplant
+import asyncio
+
+client_id = 'YOUR_CLIENT_IDENTIFIER'
+client_secret = 'YOUR_CLIENT_SECRET'
+subscription_key = 'YOUR_SUBSCRIPTION_KEY'
+redirect_uri = 'https://www.example.com'
+
+dummy_token =
+ {"refresh_token":
+ "dummy-refresh-token",
+ "access_token": "dummy-access-token",
+ "expires_at": -1,
+ "expires_on": -1}
+api_plant_url = 'https://api.developer.legrand.com/hc/api/v1.0/plants'
+
+# Create the asynchronous client to handle the authentication
+# process and the authenitcated requests
+client = authentication.HomePlusOAuth2Async(client_id,
+ client_secret,
+ subscription_key,
+ token=dummy_token,
+ redirect_uri=redirect_uri)
+
+# The URL returned by this method launches the Oauth2 flow and
+# allows a user to confirm the process.
+# Doing so redirects the user's browser/client to the redirect URI
+# and includes the code and the state for the next step.
+authorization_url = client.generate_authorize_url()
+print(authorization_url)
+
+# Here is where you can enter the complete redirect URL
+return_url = input('Redirect URL received:')
+
+# This function will now handle the asynchronous calls to the API
+async def interact_with_api():
+ token = await client.async_fetch_initial_token(return_url)
+ print(token)
+ # The client now has a valid token and can be used
+ # to interact with the API.
+
+ # First get the plant information
+ result = await client.request('get', api_plant_url)
+ plant_info = await result.json()
+ print(plant_info)
+ plant_array = []
+ for p in plant_info['plants']:
+ plant_array.append(
+ homeplusplant.HomePlusPlant(p['id'],
+ p['name'],
+ p['country'],
+ client)
+ )
+ plant = plant_array[0]
+ print(plant)
+
+ # Next read the module information for the plant
+ await plant.update_topology_and_modules()
+ for mod_id in plant.modules.keys():
+ print(plant.modules[mod_id])
+ # Close the client session
+ await client.oauth_client.close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(interact_with_api())
+```
+
+## Testing
+`homepluscontrol` tests are based on `pytest`. To run, change to the root directory of `homepluscontrol` and use the command:
+
+ $ pip install -r requirements.txt
+ $ pip install -r requirements_test.txt
+ $ pytest
+
+
+
+%package help
+Summary: Development documents and examples for homepluscontrol
+Provides: python3-homepluscontrol-doc
+%description help
+# Home + Control
+This is a basic Python library that interacts with the *Legrand Home + Control* API. It is
+primarily intended for integration into Smart Home platforms such as Home Assistant.
+
+More information of the API can be found here: https://developer.legrand.com/
+
+The library currently supports 4 types of Legrand modules:
+
+1) Plugs (power outlets)
+2) Lights (connected switches)
+3) Remotes (wireless switches)
+4) Automations (shutters/covers)
+
+The first two - plugs and lights - are modeled as basic switches that can be interacted with to set their status to *on* or *off*.
+Remotes are presented as passive modules that only have a battery level attribute.
+Automations can be issued commands to open or close to their full positions and to be stopped during the motion.
+
+A 'home' is represented by a *plant* which presents all of its corresponding modules in a topology. A *plant* is basically a
+Legrand Home+ Control gateway.
+
+The status of each module in the *plant* can be accessed through a single *status* call to the *plant* or through individual *status*
+calls to each module.
+
+## Authentication
+The *Legrand Home + Control* API uses Oauth2 authentication, so you must first register an account at https://developer.legrand.com/.
+
+Once registered, you will then need to create a subscription to the *Starter Kit* (currently the only subscription available) and this will
+generate your SUBSCRIPTION_KEY.
+
+As a final step, you will have to register an Application, where you will have to define a name, a redirect URL and the scopes of your application
+(for simplicity you can mark all scopes).
+
+Once the Application is confirmed, you should receive an email containing the CLIENT_IDENTIFIER and
+the CLIENT_SECRET which you will be using to set up the authentication flows.
+
+### Authentication Flow
+Communication with the API, first requires Oauth2 authentication to obtain an access and a refresh token. Subsequent requests to the API, require the use of the SUBSCRIPTION_KEY in addition to the access token.
+
+Information about the Oauth2 exchange is provided here: https://developer.legrand.com/tutorials/0auth2-end-point-url/
+
+## Quickstart
+Install `homepluscontrol` using `pip`:
+
+ $ pip install homepluscontrol
+
+### Usage Example
+The following script is a simple example of how this Python library can be used::
+
+```python
+from homepluscontrol import authentication, homeplusplant
+import asyncio
+
+client_id = 'YOUR_CLIENT_IDENTIFIER'
+client_secret = 'YOUR_CLIENT_SECRET'
+subscription_key = 'YOUR_SUBSCRIPTION_KEY'
+redirect_uri = 'https://www.example.com'
+
+dummy_token =
+ {"refresh_token":
+ "dummy-refresh-token",
+ "access_token": "dummy-access-token",
+ "expires_at": -1,
+ "expires_on": -1}
+api_plant_url = 'https://api.developer.legrand.com/hc/api/v1.0/plants'
+
+# Create the asynchronous client to handle the authentication
+# process and the authenitcated requests
+client = authentication.HomePlusOAuth2Async(client_id,
+ client_secret,
+ subscription_key,
+ token=dummy_token,
+ redirect_uri=redirect_uri)
+
+# The URL returned by this method launches the Oauth2 flow and
+# allows a user to confirm the process.
+# Doing so redirects the user's browser/client to the redirect URI
+# and includes the code and the state for the next step.
+authorization_url = client.generate_authorize_url()
+print(authorization_url)
+
+# Here is where you can enter the complete redirect URL
+return_url = input('Redirect URL received:')
+
+# This function will now handle the asynchronous calls to the API
+async def interact_with_api():
+ token = await client.async_fetch_initial_token(return_url)
+ print(token)
+ # The client now has a valid token and can be used
+ # to interact with the API.
+
+ # First get the plant information
+ result = await client.request('get', api_plant_url)
+ plant_info = await result.json()
+ print(plant_info)
+ plant_array = []
+ for p in plant_info['plants']:
+ plant_array.append(
+ homeplusplant.HomePlusPlant(p['id'],
+ p['name'],
+ p['country'],
+ client)
+ )
+ plant = plant_array[0]
+ print(plant)
+
+ # Next read the module information for the plant
+ await plant.update_topology_and_modules()
+ for mod_id in plant.modules.keys():
+ print(plant.modules[mod_id])
+ # Close the client session
+ await client.oauth_client.close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(interact_with_api())
+```
+
+## Testing
+`homepluscontrol` tests are based on `pytest`. To run, change to the root directory of `homepluscontrol` and use the command:
+
+ $ pip install -r requirements.txt
+ $ pip install -r requirements_test.txt
+ $ pytest
+
+
+
+%prep
+%autosetup -n homepluscontrol-0.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-homepluscontrol -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..c895fb9
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+3ddaada6b40caccbd431f42dce64b925 homepluscontrol-0.1.tar.gz