Skip to content

Commit 0337836

Browse files
authored
Merge pull request #12 from speechpro/toml
Чтение credentials из TOML файла
2 parents 74459cd + b78bc97 commit 0337836

File tree

6 files changed

+86
-35
lines changed

6 files changed

+86
-35
lines changed

HISTORY.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
History
33
=======
44

5+
0.1.9 (2020-08-29)
6+
------------------
7+
8+
* Credentials can now be stored in TOML format and read automatically.
9+
510
0.1.8 (2020-08-28)
611
------------------
712

README.md

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
# Распознавание и синтез речи в Облаке ЦРТ
2+
[![PyPI version](https://badge.fury.io/py/speechpro-cloud-python.svg)](https://badge.fury.io/py/speechpro-cloud-python)
23

34
## Начало работы
45
Установите клиентскую библиотеку с помощью pip
5-
```
6+
```shell
67
pip install speechpro-cloud-python
78
```
89

9-
Задайте данные вашей учетной записи [Облака ЦРТ](https://cp.speechpro.com) с помощью переменных среды, например
10-
```
11-
export SPEECHPRO_USERNAME=username
12-
export SPEECHPRO_DOMAIN_ID=200
13-
export SPEECHPRO_PASSWORD=password
10+
Создайте файл *~/.speechpro/credentials*, укажите в ней данные учетной записи в формате TOML в профиле (секции) *default*, например:
11+
```toml
12+
[default]
13+
username = "username"
14+
domain_id = 200
15+
password = "password"
1416
```
17+
Узнайте больше об аутентификации в разделе [Аутентификация](#аутентификация).
1518

1619
## Распознавание речи из файла
1720
Код распознавания WAV файла на русском языке моделью **GENERAL** выглядит следующим образом
@@ -21,11 +24,7 @@ import os
2124
from speechpro.cloud.speech.recognition import RecognitionClient
2225
from speechpro.cloud.speech.recognition import enums
2326

24-
сlient = RecognitionClient(
25-
os.environ['SPEECHPRO_USERNAME'],
26-
os.environ['SPEECHPRO_DOMAIN_ID'],
27-
os.environ['SPEECHPRO_PASSWORD']
28-
)
27+
сlient = RecognitionClient()
2928

3029
with open('path_to_wav_file', "rb") as f:
3130
content = f.read()
@@ -43,7 +42,7 @@ for w in word_list:
4342
```
4443

4544
Аналогичная операция с помощью командной строки
46-
```
45+
```shell
4746
speechpro recognize-word-list --model GENERAL --filename //path_to_audio
4847
```
4948

@@ -56,11 +55,7 @@ speechpro recognize-word-list --model GENERAL --filename //path_to_audio
5655
import os
5756
from speechpro.cloud.speech import synthesis
5857

59-
сlient = synthesis.SynthesisClient(
60-
os.environ['SPEECHPRO_USERNAME'],
61-
os.environ['SPEECHPRO_DOMAIN_ID'],
62-
os.environ['SPEECHPRO_PASSWORD']
63-
)
58+
сlient = synthesis.SynthesisClient()
6459

6560
text = 'Привет, я - синтезированный голос от компании ЦРТ'
6661
audio = сlient.synthesize(synthesis.enums.Voice.JULIA, synthesis.enums.PlaybackProfile.SPEAKER, text)
@@ -70,13 +65,52 @@ with open('output.wav', 'wb') as f:
7065
```
7166

7267
Аналогичная операция с помощью командной строки
73-
```
68+
```shell
7469
speechpro synthesize --voice JULIA --input "Привет, я - синтезированный голос от компании ЦРТ" --output hi.wav
7570
```
7671

7772
### Полная документация API синтеза речи
7873
Полная документация API синтеза речи доступна на сайте Облака ЦРТ по адресу https://cp.speechpro.com/doc/tts
7974

75+
## Аутентификация
76+
77+
Данные для аутентификации можно задать несколькими способами - передать в качестве параметров в конструктор, сохранить в TOML формате, либо установить переменные среды.
78+
79+
### TOML
80+
81+
Предполагается, что TOML файл расположен по пути *~/.speechpro/credentials*, по умолчанию используется профиль (секция) *default*:
82+
83+
```toml
84+
[default]
85+
username = "username"
86+
domain_id = 200
87+
password = "password"
88+
```
89+
Для использования профиля с другим именем, установите его значение в переменную среду *SPEECHPRO_PROFILE*.
90+
91+
### Переменные среды
92+
93+
Задайте данные вашей учетной записи [Облака ЦРТ](https://cp.speechpro.com) с помощью переменных среды, их значения будут использованы в случае, если не удастся прочитать TOML файл.
94+
```shell
95+
export SPEECHPRO_USERNAME=username
96+
export SPEECHPRO_DOMAIN_ID=200
97+
export SPEECHPRO_PASSWORD=password
98+
```
99+
100+
### Конструктор
101+
102+
Возможно также передать значения напрямую в конструктор, например:
103+
104+
```python
105+
from speechpro.cloud.speech.recognition import RecognitionClient
106+
107+
сlient = RecognitionClient(
108+
'username',
109+
200,
110+
'password'
111+
)
112+
```
113+
80114
## TODO
81115
* Добавить оставшиеся методы API распознавания речи
82116
* Описания моделей и голосов

requirements_dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ coverage==4.5.4
88
Sphinx==1.8.5
99
twine==1.14.0
1010
Click==7.0
11+
toml==0.10.1

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
'six>=1.10',
1717
'python_dateutil>=2.5.3',
1818
'setuptools>=21.0.0',
19-
'urllib3>=1.15.1'
19+
'urllib3>=1.15.1',
20+
'toml==0.10.1'
2021
]
2122

2223
setup_requirements = [ ]

speechpro/cli.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,9 @@
77
from speechpro.cloud.speech import synthesis
88

99

10-
recognitionClient = recognition.RecognitionClient(
11-
os.environ['SPEECHPRO_USERNAME'],
12-
os.environ['SPEECHPRO_DOMAIN_ID'],
13-
os.environ['SPEECHPRO_PASSWORD']
14-
)
15-
16-
synthesisClient = synthesis.SynthesisClient(
17-
os.environ['SPEECHPRO_USERNAME'],
18-
os.environ['SPEECHPRO_DOMAIN_ID'],
19-
os.environ['SPEECHPRO_PASSWORD']
20-
)
10+
recognitionClient = recognition.RecognitionClient()
11+
12+
synthesisClient = synthesis.SynthesisClient()
2113

2214

2315
def recognize(language, model, response_type, filename, audio_channel_count=1):

speechpro/cloud/speech/common/__init__.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
1+
from typing import Optional, Union
2+
import os
3+
4+
import toml
15
from speechpro.cloud.speech.common.rest.cloud_client.models.auth_status_dto import AuthStatusDto
26
from speechpro.cloud.speech.common.rest.cloud_client import SessionApi, AuthRequestDto
37

48

59
class SpeechproApiClientBase:
6-
def __init__(self, username, domain_id, password):
7-
self.username = username
8-
self.domain_id = domain_id
9-
self.password = password
10+
def __init__(self, username: Optional[str] = None, domain_id: Optional[Union[str, int]] = None, password: Optional[str] = None):
11+
if username and domain_id and password:
12+
self.username = username
13+
self.domain_id = domain_id
14+
self.password = password
15+
else:
16+
profile: str = os.environ.get('SPEECHPRO_PROFILE', 'default')
17+
try:
18+
f = os.path.expanduser(os.path.join('~', '.speechpro', 'credentials'))
19+
credentials = toml.load(f)[profile]
20+
self.username = credentials['username']
21+
self.domain_id = credentials['domain_id']
22+
self.password = credentials['password']
23+
except (FileNotFoundError, KeyError):
24+
self.username = os.environ.get('SPEECHPRO_USERNAME')
25+
self.domain_id = os.environ.get('SPEECHPRO_DOMAIN_ID')
26+
self.password = os.environ.get('SPEECHPRO_PASSWORD')
27+
1028
self._session_id = None
1129

1230

@@ -17,7 +35,7 @@ def _check_session_status(self) -> bool:
1735

1836

1937
@property
20-
def session_id(self):
38+
def session_id(self) -> str:
2139
if self._session_id and self._check_session_status():
2240
return self._session_id
2341
else:

0 commit comments

Comments
 (0)