diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-aioautomower.spec | 526 | ||||
| -rw-r--r-- | sources | 1 | 
3 files changed, 528 insertions, 0 deletions
| @@ -0,0 +1 @@ +/aioautomower-2023.4.5.tar.gz 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 @@ -0,0 +1 @@ +7431b76d6caaf93cd67c521d5353aedd  aioautomower-2023.4.5.tar.gz | 
