diff options
Diffstat (limited to 'python-aioautomower.spec')
-rw-r--r-- | python-aioautomower.spec | 526 |
1 files changed, 526 insertions, 0 deletions
diff --git a/python-aioautomower.spec b/python-aioautomower.spec new file mode 100644 index 0000000..92ee364 --- /dev/null +++ b/python-aioautomower.spec @@ -0,0 +1,526 @@ +%global _empty_manifest_terminate_build 0 +Name: python-aioautomower +Version: 2023.4.5 +Release: 1 +Summary: module to communicate to Husqvarna Automower API +License: Apache License 2.0 +URL: https://github.com/Thomas55555/aioautomower +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/a7/d2/88f4dfe1507a2d971440d157694ca76ceaefeb0c198d5f19508f5e7da4bf/aioautomower-2023.4.5.tar.gz +BuildArch: noarch + +Requires: python3-aiohttp + +%description +# Aioautomower + +Asynchronous library to communicate with the Automower Connect API + +## REST API Examples + +```python +from aioautomower import GetAccessTokenClientCredentials, GetMowerData, Return +from aiohttp import ClientError +from aiohttp.client_exceptions import ClientConnectorError +import asyncio + +api_key = "12345678-abcd-1234-a1a1-efghijklmnop" ## Your API-Key +client_secret = "client_secret" ## Your client_secret + + +class ExampleToken: + """Returns the access token as dict.""" + def __init__(self, api_key, client_secret): + self.client_id = api_key + self.client_secret = client_secret + + async def token(self): + try: + get_token = GetAccessTokenClientCredentials( + self.client_id, + self.client_secret, + ) + access_token_raw = await get_token.async_get_access_token() + except (ClientConnectorError, ClientError): + raise KeyError + return access_token_raw + +class MowerData: + """Returns the data of all mowers as dict.""" + def __init__(self, api_key, access_token, provider, token_type): + self.api_key = api_key + self.access_token = access_token + self.provider = provider + self.token_type = token_type + + async def mowers(self): + try: + get_mower_data = GetMowerData( + self.api_key, + self.access_token, + self.provider, + self.token_type, + ) + mower_data = await get_mower_data.async_mower_state() + except (ClientConnectorError, ClientError): + return "Make sure, you are connected to the Authentication API and the Automower API" + return mower_data + +class SendingCommand: + """Returns the data of all mowers as dict.""" + def __init__(self, api_key, access_token, provider, token_type, mower_id, payload, command_type): + self.api_key = api_key + self.access_token = access_token + self.provider = provider + self.token_type = token_type + self.mower_id = mower_id + self.payload = payload + self.command_type = command_type + + async def mowers(self): + try: + send = Return( + self.api_key, + self.access_token, + self.provider, + self.token_type, + self.mower_id, + self.payload + self.command_type + ) + send = await send.async_mower_command() + except Exception: + return "Something went wrong" + return send + + +example = ExampleToken(api_key, client_id) +token_output = asyncio.run(example.token()) +print(token_output) + +access_token = token_output["access_token"] +provider = token_output["provider"] +token_type = token_output["token_type"] + +example2 = MowerData(api_key, access_token, provider, token_type) +mower_output = asyncio.run(example2.mowers()) +print(mower_output) + +mower_id = mower_output["data"][0]["id"] ## '0' is your first mower +print ("Mower ID:", mower_id) +command_type = "actions" +payload = '{"data": {"type": "ResumeSchedule"}}' ## For more commands see: https://developer.husqvarnagroup.cloud/apis/Automower+Connect+API#/swagger +example3 = SendingCommand(api_key, access_token, provider, token_type, mower_id, payload, command_type) +result = asyncio.run(example3.mowers()) +print (result) ## if, 202, then okay +``` + +## AutomowerSession examples + +An AutomowerSession keeps track of the access token, refreshing it whenever +needed and monitors a websocket for updates, whose data is sent to callbacks +provided by the user. + +```python +import asyncio +import logging + +import aioautomower + +CLIENT_SECRET = "mystringpassword" +API_KEY = "12312312-0126-6222-2662-3e6c49f0012c" + + +async def main(): + sess = aioautomower.AutomowerSession(API_KEY, token=None) + + # Add a callback, can be done at any point in time and + # multiple callbacks can be added. + sess.register_cb(lambda data:print(data)) + + # If no token was passed to the constructor, we need to call login() + # before connect(). The token can be stored somewhere and passed to + # the constructor later on. + token = await sess.logincc(CLIENT_SECRET) + + if not await sess.connect(): + # If the token is still None or too old, the connect will fail. + print("Connect failed") + return + await asyncio.sleep(5) + status = await sess.get_status() + print(status) + await asyncio.sleep(30) + + # The close() will stop the websocket and the token refresh tasks + await sess.close() + +asyncio.run(main()) +``` + +## AutomowerCLI example + +An AutomowerSession that provides you with the data in a CLI + +`automower --client_secret 12312312-12ec-486b-a7a7-9d9b06644a14 --api-key 12312312-0126-6222-2662-3e6c49f0012c` + + +%package -n python3-aioautomower +Summary: module to communicate to Husqvarna Automower API +Provides: python-aioautomower +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-aioautomower +# Aioautomower + +Asynchronous library to communicate with the Automower Connect API + +## REST API Examples + +```python +from aioautomower import GetAccessTokenClientCredentials, GetMowerData, Return +from aiohttp import ClientError +from aiohttp.client_exceptions import ClientConnectorError +import asyncio + +api_key = "12345678-abcd-1234-a1a1-efghijklmnop" ## Your API-Key +client_secret = "client_secret" ## Your client_secret + + +class ExampleToken: + """Returns the access token as dict.""" + def __init__(self, api_key, client_secret): + self.client_id = api_key + self.client_secret = client_secret + + async def token(self): + try: + get_token = GetAccessTokenClientCredentials( + self.client_id, + self.client_secret, + ) + access_token_raw = await get_token.async_get_access_token() + except (ClientConnectorError, ClientError): + raise KeyError + return access_token_raw + +class MowerData: + """Returns the data of all mowers as dict.""" + def __init__(self, api_key, access_token, provider, token_type): + self.api_key = api_key + self.access_token = access_token + self.provider = provider + self.token_type = token_type + + async def mowers(self): + try: + get_mower_data = GetMowerData( + self.api_key, + self.access_token, + self.provider, + self.token_type, + ) + mower_data = await get_mower_data.async_mower_state() + except (ClientConnectorError, ClientError): + return "Make sure, you are connected to the Authentication API and the Automower API" + return mower_data + +class SendingCommand: + """Returns the data of all mowers as dict.""" + def __init__(self, api_key, access_token, provider, token_type, mower_id, payload, command_type): + self.api_key = api_key + self.access_token = access_token + self.provider = provider + self.token_type = token_type + self.mower_id = mower_id + self.payload = payload + self.command_type = command_type + + async def mowers(self): + try: + send = Return( + self.api_key, + self.access_token, + self.provider, + self.token_type, + self.mower_id, + self.payload + self.command_type + ) + send = await send.async_mower_command() + except Exception: + return "Something went wrong" + return send + + +example = ExampleToken(api_key, client_id) +token_output = asyncio.run(example.token()) +print(token_output) + +access_token = token_output["access_token"] +provider = token_output["provider"] +token_type = token_output["token_type"] + +example2 = MowerData(api_key, access_token, provider, token_type) +mower_output = asyncio.run(example2.mowers()) +print(mower_output) + +mower_id = mower_output["data"][0]["id"] ## '0' is your first mower +print ("Mower ID:", mower_id) +command_type = "actions" +payload = '{"data": {"type": "ResumeSchedule"}}' ## For more commands see: https://developer.husqvarnagroup.cloud/apis/Automower+Connect+API#/swagger +example3 = SendingCommand(api_key, access_token, provider, token_type, mower_id, payload, command_type) +result = asyncio.run(example3.mowers()) +print (result) ## if, 202, then okay +``` + +## AutomowerSession examples + +An AutomowerSession keeps track of the access token, refreshing it whenever +needed and monitors a websocket for updates, whose data is sent to callbacks +provided by the user. + +```python +import asyncio +import logging + +import aioautomower + +CLIENT_SECRET = "mystringpassword" +API_KEY = "12312312-0126-6222-2662-3e6c49f0012c" + + +async def main(): + sess = aioautomower.AutomowerSession(API_KEY, token=None) + + # Add a callback, can be done at any point in time and + # multiple callbacks can be added. + sess.register_cb(lambda data:print(data)) + + # If no token was passed to the constructor, we need to call login() + # before connect(). The token can be stored somewhere and passed to + # the constructor later on. + token = await sess.logincc(CLIENT_SECRET) + + if not await sess.connect(): + # If the token is still None or too old, the connect will fail. + print("Connect failed") + return + await asyncio.sleep(5) + status = await sess.get_status() + print(status) + await asyncio.sleep(30) + + # The close() will stop the websocket and the token refresh tasks + await sess.close() + +asyncio.run(main()) +``` + +## AutomowerCLI example + +An AutomowerSession that provides you with the data in a CLI + +`automower --client_secret 12312312-12ec-486b-a7a7-9d9b06644a14 --api-key 12312312-0126-6222-2662-3e6c49f0012c` + + +%package help +Summary: Development documents and examples for aioautomower +Provides: python3-aioautomower-doc +%description help +# Aioautomower + +Asynchronous library to communicate with the Automower Connect API + +## REST API Examples + +```python +from aioautomower import GetAccessTokenClientCredentials, GetMowerData, Return +from aiohttp import ClientError +from aiohttp.client_exceptions import ClientConnectorError +import asyncio + +api_key = "12345678-abcd-1234-a1a1-efghijklmnop" ## Your API-Key +client_secret = "client_secret" ## Your client_secret + + +class ExampleToken: + """Returns the access token as dict.""" + def __init__(self, api_key, client_secret): + self.client_id = api_key + self.client_secret = client_secret + + async def token(self): + try: + get_token = GetAccessTokenClientCredentials( + self.client_id, + self.client_secret, + ) + access_token_raw = await get_token.async_get_access_token() + except (ClientConnectorError, ClientError): + raise KeyError + return access_token_raw + +class MowerData: + """Returns the data of all mowers as dict.""" + def __init__(self, api_key, access_token, provider, token_type): + self.api_key = api_key + self.access_token = access_token + self.provider = provider + self.token_type = token_type + + async def mowers(self): + try: + get_mower_data = GetMowerData( + self.api_key, + self.access_token, + self.provider, + self.token_type, + ) + mower_data = await get_mower_data.async_mower_state() + except (ClientConnectorError, ClientError): + return "Make sure, you are connected to the Authentication API and the Automower API" + return mower_data + +class SendingCommand: + """Returns the data of all mowers as dict.""" + def __init__(self, api_key, access_token, provider, token_type, mower_id, payload, command_type): + self.api_key = api_key + self.access_token = access_token + self.provider = provider + self.token_type = token_type + self.mower_id = mower_id + self.payload = payload + self.command_type = command_type + + async def mowers(self): + try: + send = Return( + self.api_key, + self.access_token, + self.provider, + self.token_type, + self.mower_id, + self.payload + self.command_type + ) + send = await send.async_mower_command() + except Exception: + return "Something went wrong" + return send + + +example = ExampleToken(api_key, client_id) +token_output = asyncio.run(example.token()) +print(token_output) + +access_token = token_output["access_token"] +provider = token_output["provider"] +token_type = token_output["token_type"] + +example2 = MowerData(api_key, access_token, provider, token_type) +mower_output = asyncio.run(example2.mowers()) +print(mower_output) + +mower_id = mower_output["data"][0]["id"] ## '0' is your first mower +print ("Mower ID:", mower_id) +command_type = "actions" +payload = '{"data": {"type": "ResumeSchedule"}}' ## For more commands see: https://developer.husqvarnagroup.cloud/apis/Automower+Connect+API#/swagger +example3 = SendingCommand(api_key, access_token, provider, token_type, mower_id, payload, command_type) +result = asyncio.run(example3.mowers()) +print (result) ## if, 202, then okay +``` + +## AutomowerSession examples + +An AutomowerSession keeps track of the access token, refreshing it whenever +needed and monitors a websocket for updates, whose data is sent to callbacks +provided by the user. + +```python +import asyncio +import logging + +import aioautomower + +CLIENT_SECRET = "mystringpassword" +API_KEY = "12312312-0126-6222-2662-3e6c49f0012c" + + +async def main(): + sess = aioautomower.AutomowerSession(API_KEY, token=None) + + # Add a callback, can be done at any point in time and + # multiple callbacks can be added. + sess.register_cb(lambda data:print(data)) + + # If no token was passed to the constructor, we need to call login() + # before connect(). The token can be stored somewhere and passed to + # the constructor later on. + token = await sess.logincc(CLIENT_SECRET) + + if not await sess.connect(): + # If the token is still None or too old, the connect will fail. + print("Connect failed") + return + await asyncio.sleep(5) + status = await sess.get_status() + print(status) + await asyncio.sleep(30) + + # The close() will stop the websocket and the token refresh tasks + await sess.close() + +asyncio.run(main()) +``` + +## AutomowerCLI example + +An AutomowerSession that provides you with the data in a CLI + +`automower --client_secret 12312312-12ec-486b-a7a7-9d9b06644a14 --api-key 12312312-0126-6222-2662-3e6c49f0012c` + + +%prep +%autosetup -n aioautomower-2023.4.5 + +%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-aioautomower -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 2023.4.5-1 +- Package Spec generated |