%global _empty_manifest_terminate_build 0
Name:		python-pyrituals
Version:	0.0.6
Release:	1
Summary:	Async Python wrapper for the Rituals Perfume Genie API
License:	GPLv3
URL:		https://github.com/milanmeu/pyrituals
Source0:	https://mirrors.nju.edu.cn/pypi/web/packages/8d/97/1364136ac7b9668f28def833beffcdbf1cee6adf9bc827934cf941fb3ebf/pyrituals-0.0.6.tar.gz
BuildArch:	noarch

Requires:	python3-aiohttp

%description
# PyRituals package 
[![PyPI](https://img.shields.io/pypi/v/pyrituals)](https://pypi.org/project/pyrituals/) ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyrituals) [![PyPI - License](https://img.shields.io/pypi/l/pyrituals?color=blue)](https://github.com/milanmeu/pyrituals/blob/main/LICENSE)

An async Python wrapper for the Rituals Perfume Genie API.
It allows you to control the diffuser and retrieve its state.
The package supports the first and second version.

## Installation
```bash
pip install pyrituals
```

## Usage
### Import
```python
from pyrituals import Account, Diffuser, AuthenticationException
```

### Create a `aiohttp.ClientSession` to make requests
```python
from aiohttp import ClientSession
session = ClientSession()
```

### Endpoints
Default endpoints:
```python
AUTH_URL = "https://rituals.sense-company.com/ocapi/login"           # Account.authenticate()
ACCOUNT_URL = "https://rituals.sense-company.com/api/account/hubs"   # Account.get_devices()
HUB_URL = "https://rituals.sense-company.com/api/account/hub"        # Diffuser.update_data()
UPDATE_URL = "https://rituals.sense-company.com/api/hub/update/attr" # Diffuser.turn_*(), Diffuser.set_*()
```

To change the used API endpoints add an `url` parameter to the function. Example:
```python
LOGIN_URL = "https://rituals.sense-company.com/ocapi/login"
account = Account("name@example.com", "passw0rd", session)
await account.authenticate(url=LOGIN_URL)
```

### Account
#### Create an instance
```python
email = "name@example.com"
password = "passw0rd"

account = Account(email, password, session)
```

#### Authenticate
```python
try:
    await account.authenticate()
except AuthenticationException as e:
    print("Could not authenticate:", e)
```

#### Account data
The account data is only available after authentication.
```python
account.data
```

#### Get linked devices
`get_devices()` returns a list of `Diffuser`s. 
```python
devices = await account.get_devices()
```

### Diffuser
#### Diffuser data
The initial data and format is different from the data after executing `update_data()`.
Some properties require data that is only available after executing `update_data()`.
Therefore, it's required to execute `update_data()` before using the diffuser properties.
```python
diffuser.data
diffuser.battery_percentage
diffuser.charging
diffuser.has_battery
diffuser.has_cartridge
diffuser.hash
diffuser.hub_data
diffuser.hublot
diffuser.fill
diffuser.perfume
diffuser.perfume_amount
diffuser.room_size
diffuser.is_on
diffuser.is_online
diffuser.name
diffuser.version
diffuser.wifi_percentage
diffuser.room_size_square_meter
```

#### Get updated data
```python
await diffuser.update_data()
```

#### Turn the diffuser on
```python
await diffuser.turn_on()
```

#### Turn the diffuser off
```python
await diffuser.turn_off()
```

#### Set the diffuser perfume amount
Amount must be an integer between 1 and 3, inclusive.
```python
amount = 1
await diffuser.set_perfume_amount(amount)
```

#### Set the diffuser room size
Size must be an integer between 1 and 4, inclusive.
```python
size = 2
await diffuser.set_room_size(size)
```

#### Set the diffuser room size in square meters
Size must be the integer 15, 30, 60 or 100.
```python
size = 60
await diffuser.set_room_size_square_meter(size)
```

## Example
```python
from aiohttp import ClientSession
from asyncio import run

import pyrituals

async def main():
    async with ClientSession() as session:
        account = pyrituals.Account("name@example.com", "passw0rd", session)
        try:
            await account.authenticate()
        except pyrituals.AuthenticationException as ex:
            print("Could not authenticate:", ex)
            return
        print("Account data:", account.data)
        devices = await account.get_devices()
        for diffuser in devices:
            print("Diffuser data:", diffuser.data)
            await diffuser.turn_on()
            await diffuser.set_perfume_amount(1)
            await diffuser.set_room_size(4)
            await diffuser.update_data()
            print("Diffuser updated data:", diffuser.data)
            if diffuser.has_battery:
                print(f"Battery percentage: {diffuser.battery_percentage}%")

run(main())
```




%package -n python3-pyrituals
Summary:	Async Python wrapper for the Rituals Perfume Genie API
Provides:	python-pyrituals
BuildRequires:	python3-devel
BuildRequires:	python3-setuptools
BuildRequires:	python3-pip
%description -n python3-pyrituals
# PyRituals package 
[![PyPI](https://img.shields.io/pypi/v/pyrituals)](https://pypi.org/project/pyrituals/) ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyrituals) [![PyPI - License](https://img.shields.io/pypi/l/pyrituals?color=blue)](https://github.com/milanmeu/pyrituals/blob/main/LICENSE)

An async Python wrapper for the Rituals Perfume Genie API.
It allows you to control the diffuser and retrieve its state.
The package supports the first and second version.

## Installation
```bash
pip install pyrituals
```

## Usage
### Import
```python
from pyrituals import Account, Diffuser, AuthenticationException
```

### Create a `aiohttp.ClientSession` to make requests
```python
from aiohttp import ClientSession
session = ClientSession()
```

### Endpoints
Default endpoints:
```python
AUTH_URL = "https://rituals.sense-company.com/ocapi/login"           # Account.authenticate()
ACCOUNT_URL = "https://rituals.sense-company.com/api/account/hubs"   # Account.get_devices()
HUB_URL = "https://rituals.sense-company.com/api/account/hub"        # Diffuser.update_data()
UPDATE_URL = "https://rituals.sense-company.com/api/hub/update/attr" # Diffuser.turn_*(), Diffuser.set_*()
```

To change the used API endpoints add an `url` parameter to the function. Example:
```python
LOGIN_URL = "https://rituals.sense-company.com/ocapi/login"
account = Account("name@example.com", "passw0rd", session)
await account.authenticate(url=LOGIN_URL)
```

### Account
#### Create an instance
```python
email = "name@example.com"
password = "passw0rd"

account = Account(email, password, session)
```

#### Authenticate
```python
try:
    await account.authenticate()
except AuthenticationException as e:
    print("Could not authenticate:", e)
```

#### Account data
The account data is only available after authentication.
```python
account.data
```

#### Get linked devices
`get_devices()` returns a list of `Diffuser`s. 
```python
devices = await account.get_devices()
```

### Diffuser
#### Diffuser data
The initial data and format is different from the data after executing `update_data()`.
Some properties require data that is only available after executing `update_data()`.
Therefore, it's required to execute `update_data()` before using the diffuser properties.
```python
diffuser.data
diffuser.battery_percentage
diffuser.charging
diffuser.has_battery
diffuser.has_cartridge
diffuser.hash
diffuser.hub_data
diffuser.hublot
diffuser.fill
diffuser.perfume
diffuser.perfume_amount
diffuser.room_size
diffuser.is_on
diffuser.is_online
diffuser.name
diffuser.version
diffuser.wifi_percentage
diffuser.room_size_square_meter
```

#### Get updated data
```python
await diffuser.update_data()
```

#### Turn the diffuser on
```python
await diffuser.turn_on()
```

#### Turn the diffuser off
```python
await diffuser.turn_off()
```

#### Set the diffuser perfume amount
Amount must be an integer between 1 and 3, inclusive.
```python
amount = 1
await diffuser.set_perfume_amount(amount)
```

#### Set the diffuser room size
Size must be an integer between 1 and 4, inclusive.
```python
size = 2
await diffuser.set_room_size(size)
```

#### Set the diffuser room size in square meters
Size must be the integer 15, 30, 60 or 100.
```python
size = 60
await diffuser.set_room_size_square_meter(size)
```

## Example
```python
from aiohttp import ClientSession
from asyncio import run

import pyrituals

async def main():
    async with ClientSession() as session:
        account = pyrituals.Account("name@example.com", "passw0rd", session)
        try:
            await account.authenticate()
        except pyrituals.AuthenticationException as ex:
            print("Could not authenticate:", ex)
            return
        print("Account data:", account.data)
        devices = await account.get_devices()
        for diffuser in devices:
            print("Diffuser data:", diffuser.data)
            await diffuser.turn_on()
            await diffuser.set_perfume_amount(1)
            await diffuser.set_room_size(4)
            await diffuser.update_data()
            print("Diffuser updated data:", diffuser.data)
            if diffuser.has_battery:
                print(f"Battery percentage: {diffuser.battery_percentage}%")

run(main())
```




%package help
Summary:	Development documents and examples for pyrituals
Provides:	python3-pyrituals-doc
%description help
# PyRituals package 
[![PyPI](https://img.shields.io/pypi/v/pyrituals)](https://pypi.org/project/pyrituals/) ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyrituals) [![PyPI - License](https://img.shields.io/pypi/l/pyrituals?color=blue)](https://github.com/milanmeu/pyrituals/blob/main/LICENSE)

An async Python wrapper for the Rituals Perfume Genie API.
It allows you to control the diffuser and retrieve its state.
The package supports the first and second version.

## Installation
```bash
pip install pyrituals
```

## Usage
### Import
```python
from pyrituals import Account, Diffuser, AuthenticationException
```

### Create a `aiohttp.ClientSession` to make requests
```python
from aiohttp import ClientSession
session = ClientSession()
```

### Endpoints
Default endpoints:
```python
AUTH_URL = "https://rituals.sense-company.com/ocapi/login"           # Account.authenticate()
ACCOUNT_URL = "https://rituals.sense-company.com/api/account/hubs"   # Account.get_devices()
HUB_URL = "https://rituals.sense-company.com/api/account/hub"        # Diffuser.update_data()
UPDATE_URL = "https://rituals.sense-company.com/api/hub/update/attr" # Diffuser.turn_*(), Diffuser.set_*()
```

To change the used API endpoints add an `url` parameter to the function. Example:
```python
LOGIN_URL = "https://rituals.sense-company.com/ocapi/login"
account = Account("name@example.com", "passw0rd", session)
await account.authenticate(url=LOGIN_URL)
```

### Account
#### Create an instance
```python
email = "name@example.com"
password = "passw0rd"

account = Account(email, password, session)
```

#### Authenticate
```python
try:
    await account.authenticate()
except AuthenticationException as e:
    print("Could not authenticate:", e)
```

#### Account data
The account data is only available after authentication.
```python
account.data
```

#### Get linked devices
`get_devices()` returns a list of `Diffuser`s. 
```python
devices = await account.get_devices()
```

### Diffuser
#### Diffuser data
The initial data and format is different from the data after executing `update_data()`.
Some properties require data that is only available after executing `update_data()`.
Therefore, it's required to execute `update_data()` before using the diffuser properties.
```python
diffuser.data
diffuser.battery_percentage
diffuser.charging
diffuser.has_battery
diffuser.has_cartridge
diffuser.hash
diffuser.hub_data
diffuser.hublot
diffuser.fill
diffuser.perfume
diffuser.perfume_amount
diffuser.room_size
diffuser.is_on
diffuser.is_online
diffuser.name
diffuser.version
diffuser.wifi_percentage
diffuser.room_size_square_meter
```

#### Get updated data
```python
await diffuser.update_data()
```

#### Turn the diffuser on
```python
await diffuser.turn_on()
```

#### Turn the diffuser off
```python
await diffuser.turn_off()
```

#### Set the diffuser perfume amount
Amount must be an integer between 1 and 3, inclusive.
```python
amount = 1
await diffuser.set_perfume_amount(amount)
```

#### Set the diffuser room size
Size must be an integer between 1 and 4, inclusive.
```python
size = 2
await diffuser.set_room_size(size)
```

#### Set the diffuser room size in square meters
Size must be the integer 15, 30, 60 or 100.
```python
size = 60
await diffuser.set_room_size_square_meter(size)
```

## Example
```python
from aiohttp import ClientSession
from asyncio import run

import pyrituals

async def main():
    async with ClientSession() as session:
        account = pyrituals.Account("name@example.com", "passw0rd", session)
        try:
            await account.authenticate()
        except pyrituals.AuthenticationException as ex:
            print("Could not authenticate:", ex)
            return
        print("Account data:", account.data)
        devices = await account.get_devices()
        for diffuser in devices:
            print("Diffuser data:", diffuser.data)
            await diffuser.turn_on()
            await diffuser.set_perfume_amount(1)
            await diffuser.set_room_size(4)
            await diffuser.update_data()
            print("Diffuser updated data:", diffuser.data)
            if diffuser.has_battery:
                print(f"Battery percentage: {diffuser.battery_percentage}%")

run(main())
```




%prep
%autosetup -n pyrituals-0.0.6

%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-pyrituals -f filelist.lst
%dir %{python3_sitelib}/*

%files help -f doclist.lst
%{_docdir}/*

%changelog
* Tue May 30 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.6-1
- Package Spec generated