Skip to content

Commit 89d4477

Browse files
authored
Talk Bot API (#97)
Full Talk Bot API --------- Signed-off-by: Alexander Piskun <[email protected]>
1 parent 1a9e412 commit 89d4477

32 files changed

+1111
-103
lines changed

.github/workflows/analysis-coverage.yml

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ jobs:
106106
--admin-user admin --admin-pass ${{ env.NC_AUTH_PASS }}
107107
php occ config:system:set loglevel --value=1 --type=integer
108108
php occ config:system:set debug --value=true --type=boolean
109-
php occ config:system:set allow_local_remote_servers --value true
110109
php -S localhost:8080 &
111110
112111
- name: Checkout NcPyApi
@@ -136,7 +135,7 @@ jobs:
136135
cd ..
137136
php occ app_ecosystem_v2:daemon:register manual_install "Manual Install" manual-install 0 0 0
138137
php occ app_ecosystem_v2:app:register $APP_ID manual_install --json-info \
139-
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
138+
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\", \"TALK_BOT\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
140139
-e --force-scopes
141140
kill -15 $(cat /tmp/_install.pid)
142141
timeout 3m tail --pid=$(cat /tmp/_install.pid) -f /dev/null
@@ -160,7 +159,14 @@ jobs:
160159

161160
- name: Generate coverage report
162161
working-directory: nc_py_api
163-
run: coverage run --data-file=.coverage.ci -m pytest && coverage combine && coverage xml && coverage html
162+
run: |
163+
coverage run --data-file=.coverage.talk_bot tests/_talk_bot.py &
164+
echo $! > /tmp/_talk_bot.pid
165+
coverage run --data-file=.coverage.ci -m pytest
166+
kill -15 $(cat /tmp/_talk_bot.pid)
167+
timeout 3m tail --pid=$(cat /tmp/_talk_bot.pid) -f /dev/null
168+
coverage run --data-file=.coverage.at_the_end -m pytest tests/_tests_at_the_end.py
169+
coverage combine && coverage xml && coverage html
164170
165171
- name: HTML coverage to artifacts
166172
uses: actions/upload-artifact@v3
@@ -258,7 +264,6 @@ jobs:
258264
--admin-user admin --admin-pass ${{ env.NC_AUTH_PASS }}
259265
php occ config:system:set loglevel --value=1
260266
php occ config:system:set debug --value=true --type=boolean
261-
php occ config:system:set allow_local_remote_servers --value true
262267
php -S localhost:8080 &
263268
264269
- name: Checkout NcPyApi
@@ -290,7 +295,7 @@ jobs:
290295
cd ..
291296
php occ app_ecosystem_v2:daemon:register manual_install "Manual Install" manual-install 0 0 0
292297
php occ app_ecosystem_v2:app:register $APP_ID manual_install --json-info \
293-
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
298+
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\", \"TALK_BOT\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
294299
-e --force-scopes
295300
kill -15 $(cat /tmp/_install.pid)
296301
timeout 3m tail --pid=$(cat /tmp/_install.pid) -f /dev/null
@@ -314,7 +319,14 @@ jobs:
314319

315320
- name: Generate coverage report
316321
working-directory: nc_py_api
317-
run: coverage run --data-file=.coverage.ci -m pytest && coverage combine && coverage xml && coverage html
322+
run: |
323+
coverage run --data-file=.coverage.talk_bot tests/_talk_bot.py &
324+
echo $! > /tmp/_talk_bot.pid
325+
coverage run --data-file=.coverage.ci -m pytest
326+
kill -15 $(cat /tmp/_talk_bot.pid)
327+
timeout 3m tail --pid=$(cat /tmp/_talk_bot.pid) -f /dev/null
328+
coverage run --data-file=.coverage.at_the_end -m pytest tests/_tests_at_the_end.py
329+
coverage combine && coverage xml && coverage html
318330
319331
- name: HTML coverage to artifacts
320332
uses: actions/upload-artifact@v3
@@ -399,7 +411,6 @@ jobs:
399411
--admin-user admin --admin-pass ${{ env.NC_AUTH_PASS }}
400412
php occ config:system:set loglevel --value=1 --type=integer
401413
php occ config:system:set debug --value=true --type=boolean
402-
php occ config:system:set allow_local_remote_servers --value true
403414
php -S localhost:8080 &
404415
405416
- name: Checkout NcPyApi
@@ -429,14 +440,17 @@ jobs:
429440
cd ..
430441
php occ app_ecosystem_v2:daemon:register manual_install "Manual Install" manual-install 0 0 0
431442
php occ app_ecosystem_v2:app:register $APP_ID manual_install --json-info \
432-
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
443+
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\", \"TALK_BOT\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
433444
-e --force-scopes
434445
kill -15 $(cat /tmp/_install.pid)
435446
timeout 3m tail --pid=$(cat /tmp/_install.pid) -f /dev/null
436447
437448
- name: Generate coverage report
438449
working-directory: nc_py_api
439-
run: coverage run --data-file=.coverage.ci -m pytest && coverage combine && coverage xml && coverage html
450+
run: |
451+
coverage run --data-file=.coverage.ci -m pytest
452+
coverage run --data-file=.coverage.at_the_end -m pytest tests/_tests_at_the_end.py
453+
coverage combine && coverage xml && coverage html
440454
env:
441455
SKIP_NC_CLIENT_TESTS: 1
442456

@@ -519,7 +533,6 @@ jobs:
519533
--admin-user admin --admin-pass ${{ env.NC_AUTH_PASS }}
520534
./occ config:system:set loglevel --value=0 --type=integer
521535
./occ config:system:set debug --value=true --type=boolean
522-
./occ config:system:set allow_local_remote_servers --value true
523536
./occ app:enable notifications
524537
php -S localhost:8080 &
525538
@@ -549,7 +562,7 @@ jobs:
549562
cd ..
550563
php occ app_ecosystem_v2:daemon:register manual_install "Manual Install" manual-install 0 0 0
551564
php occ app_ecosystem_v2:app:register $APP_ID manual_install --json-info \
552-
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
565+
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\", \"TALK_BOT\"]},\"port\":$APP_PORT,\"protocol\":\"http\",\"system_app\":1}" \
553566
-e --force-scopes
554567
kill -15 $(cat /tmp/_install.pid)
555568
timeout 3m tail --pid=$(cat /tmp/_install.pid) -f /dev/null
@@ -571,7 +584,14 @@ jobs:
571584

572585
- name: Generate coverage report
573586
working-directory: nc_py_api
574-
run: coverage run --data-file=.coverage.ci -m pytest && coverage combine && coverage xml && coverage html
587+
run: |
588+
coverage run --data-file=.coverage.talk_bot tests/_talk_bot.py &
589+
echo $! > /tmp/_talk_bot.pid
590+
coverage run --data-file=.coverage.ci -m pytest
591+
kill -15 $(cat /tmp/_talk_bot.pid)
592+
timeout 3m tail --pid=$(cat /tmp/_talk_bot.pid) -f /dev/null
593+
coverage run --data-file=.coverage.at_the_end -m pytest tests/_tests_at_the_end.py
594+
coverage combine && coverage xml && coverage html
575595
576596
- name: HTML coverage to artifacts
577597
uses: actions/upload-artifact@v3
@@ -655,7 +675,6 @@ jobs:
655675
--admin-user admin --admin-pass ${{ env.NC_AUTH_PASS }}
656676
./occ config:system:set loglevel --value=0 --type=integer
657677
./occ config:system:set debug --value=true --type=boolean
658-
./occ config:system:set allow_local_remote_servers --value true
659678
./occ app:enable notifications
660679
php -S localhost:8080 &
661680
@@ -685,7 +704,10 @@ jobs:
685704

686705
- name: Generate coverage report
687706
working-directory: nc_py_api
688-
run: coverage run -m pytest && coverage xml && coverage html
707+
run: |
708+
coverage run -m pytest
709+
coverage run --data-file=.coverage.at_the_end -m pytest tests/_tests_at_the_end.py
710+
coverage combine && coverage xml && coverage html
689711
env:
690712
SKIP_AE_TESTS: 1
691713
NPA_NC_CERT: ''
@@ -761,7 +783,6 @@ jobs:
761783
--admin-user admin --admin-pass ${{ env.NC_AUTH_PASS }}
762784
./occ config:system:set loglevel --value=0 --type=integer
763785
./occ config:system:set debug --value=true --type=boolean
764-
./occ config:system:set allow_local_remote_servers --value true
765786
./occ app:enable notifications
766787
php -S localhost:8080 &
767788
@@ -795,7 +816,7 @@ jobs:
795816
cd ..
796817
php occ app_ecosystem_v2:daemon:register manual_install "Manual Install" manual-install 0 0 0
797818
php occ app_ecosystem_v2:app:register $APP_ID manual_install --json-info \
798-
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\"]},\"protocol\":\"http\",\"port\":$APP_PORT,\"system_app\":1}" \
819+
"{\"appid\":\"$APP_ID\",\"name\":\"$APP_ID\",\"daemon_config_name\":\"manual_install\",\"version\":\"$APP_VERSION\",\"secret\":\"$APP_SECRET\",\"host\":\"localhost\",\"scopes\":{\"required\":[\"SYSTEM\", \"FILES\", \"FILES_SHARING\"],\"optional\":[\"USER_INFO\", \"USER_STATUS\", \"NOTIFICATIONS\", \"WEATHER_STATUS\", \"TALK\", \"TALK_BOT\"]},\"protocol\":\"http\",\"port\":$APP_PORT,\"system_app\":1}" \
799820
-e --force-scopes
800821
kill -15 $(cat /tmp/_install.pid)
801822
timeout 3m tail --pid=$(cat /tmp/_install.pid) -f /dev/null
@@ -818,7 +839,14 @@ jobs:
818839

819840
- name: Generate coverage report
820841
working-directory: nc_py_api
821-
run: coverage run --data-file=.coverage.ci -m pytest && coverage combine && coverage xml && coverage html
842+
run: |
843+
coverage run --data-file=.coverage.talk_bot tests/_talk_bot.py &
844+
echo $! > /tmp/_talk_bot.pid
845+
coverage run --data-file=.coverage.ci -m pytest
846+
kill -15 $(cat /tmp/_talk_bot.pid)
847+
timeout 3m tail --pid=$(cat /tmp/_talk_bot.pid) -f /dev/null
848+
coverage run --data-file=.coverage.at_the_end -m pytest tests/_tests_at_the_end.py
849+
coverage combine && coverage xml && coverage html
822850
env:
823851
NPA_TIMEOUT: None
824852
NPA_TIMEOUT_DAV: None

.run/TalkBot.run.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="TalkBot" type="PythonConfigurationType" factoryName="Python">
3+
<module name="nc_py_api" />
4+
<option name="INTERPRETER_OPTIONS" value="" />
5+
<option name="PARENT_ENVS" value="true" />
6+
<envs>
7+
<env name="APP_ID" value="talk_bot" />
8+
<env name="APP_PORT" value="9032" />
9+
<env name="APP_SECRET" value="12345" />
10+
<env name="APP_VERSION" value="1.0.0" />
11+
<env name="NEXTCLOUD_URL" value="http://nextcloud.local/index.php" />
12+
<env name="PYTHONUNBUFFERED" value="1" />
13+
</envs>
14+
<option name="SDK_HOME" value="" />
15+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
16+
<option name="IS_MODULE_SDK" value="true" />
17+
<option name="ADD_CONTENT_ROOTS" value="true" />
18+
<option name="ADD_SOURCE_ROOTS" value="true" />
19+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
20+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/examples/as_app/talk_bot/src/main.py" />
21+
<option name="PARAMETERS" value="" />
22+
<option name="SHOW_COMMAND_LINE" value="false" />
23+
<option name="EMULATE_TERMINAL" value="false" />
24+
<option name="MODULE_MODE" value="false" />
25+
<option name="REDIRECT_INPUT" value="false" />
26+
<option name="INPUT_FILE" value="" />
27+
<method v="2" />
28+
</configuration>
29+
</component>

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [0.0.41 - 2023-08-25]
6+
7+
### Added
8+
9+
- Nextcloud Talk API for bots + example
10+
511
## [0.0.40 - 2023-08-22]
612

713
### Added

README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,25 @@ Python library that provides a robust and well-documented API that allows develo
2323
* **Easy**: Designed to be easy to use with excellent documentation.
2424

2525
### Capabilities
26-
| **_Capability_** | Nextcloud 26 | Nextcloud 27 | Nextcloud 28 |
27-
|------------------|:------------:|:------------:|:------------:|
28-
| Filesystem* ||||
29-
| Shares ||||
30-
| Users & Groups ||||
31-
| User status ||||
32-
| Weather status ||||
33-
| Notifications ||||
34-
| Nextcloud Talk ||||
35-
| Text Provider** ||||
26+
| **_Capability_** | Nextcloud 26 | Nextcloud 27 | Nextcloud 28 |
27+
|-------------------|:------------:|:------------:|:------------:|
28+
| Filesystem* ||||
29+
| Shares ||||
30+
| Users & Groups ||||
31+
| User status ||||
32+
| Weather status ||||
33+
| Notifications ||||
34+
| Nextcloud Talk ||||
35+
| Talk Bot API** | N/A |||
36+
| Text Processing** | N/A |||
37+
| SpeechToText** | N/A |||
3638

3739
&ast;missing `Trash bin` and `File version` support.<br>
3840
&ast;&ast;available only for NextcloudApp
3941

4042
### Differences between the Nextcloud and NextcloudApp classes
4143

42-
The **Nextcloud** class functions as a standard NextCloud client,
44+
The **Nextcloud** class functions as a standard Nextcloud client,
4345
enabling you to make API requests using a username and password.
4446

4547
On the other hand, the **NextcloudApp** class is designed for creating applications for Nextcloud.<br>
@@ -66,7 +68,8 @@ You can support us in several ways:
6668
- [Documentation](https://cloud-py-api.github.io/nc_py_api/)
6769
- [First steps](https://cloud-py-api.github.io/nc_py_api/FirstSteps.html)
6870
- [More APIs](https://cloud-py-api.github.io/nc_py_api/MoreAPIs.html)
69-
- [Writing a simple Nextcloud application](https://cloud-py-api.github.io/nc_py_api/NextcloudApp.html)
71+
- [Writing a simple Nextcloud Application](https://cloud-py-api.github.io/nc_py_api/NextcloudApp.html)
72+
- [Using Nextcloud Talk Bot API in Application](https://cloud-py-api.github.io/nc_py_api/NextcloudTalkBot.html)
7073
- [Writing a Nextcloud System Application](https://cloud-py-api.github.io/nc_py_api/NextcloudSysApp.html)
7174
- [Examples](https://github.com/cloud-py-api/nc_py_api/tree/main/examples)
7275
- [Contribute](https://github.com/cloud-py-api/nc_py_api/blob/main/.github/CONTRIBUTING.md)

docs/NextcloudTalkBot.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Nextcloud Talk Bot API in Application
2+
=====================================
3+
4+
to-do

docs/conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151

5252
html_theme_options = {
5353
"display_version": True,
54+
"logo_only": True,
5455
}
5556

5657
# If true, `todos` produce output. Else they produce nothing.

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Have a great time with Python and Nextcloud!
3131
FirstSteps
3232
MoreAPIs
3333
NextcloudApp
34+
NextcloudTalkBot
3435
NextcloudSysApp
3536
Options
3637
reference/index.rst

docs/reference/Talk.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ Talk API
55
:members:
66
:inherited-members:
77

8+
.. autoclass:: nc_py_api.talk.TalkMessage
9+
:members:
10+
:inherited-members:
11+
812
.. autoclass:: nc_py_api.talk._TalkAPI
913
:members:
1014

@@ -48,3 +52,10 @@ Talk API
4852
.. autoclass:: nc_py_api.talk.BreakoutRoomStatus
4953
:members:
5054
:undoc-members:
55+
56+
.. autoclass:: nc_py_api.talk.BotInfo
57+
:members:
58+
:inherited-members:
59+
60+
.. autoclass:: nc_py_api.talk.BotInfoBasic
61+
:members:

docs/reference/TalkBot.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
.. py:currentmodule:: nc_py_api
2+
3+
Talk Bot API
4+
------------
5+
6+
.. autoclass:: nc_py_api.talk_bot.TalkBotMessage
7+
:members:
8+
:undoc-members:
9+
10+
.. autoclass:: nc_py_api.talk_bot.TalkBot
11+
:members:
12+
13+
.. autoclass:: nc_py_api.talk_bot.ObjectContent
14+
:members:
15+
:undoc-members:
16+
17+
.. autofunction:: nc_py_api.talk_bot.get_bot_secret

docs/reference/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ Reference
1111
ExApp
1212
Exceptions
1313
Talk
14+
TalkBot
1415
Session

0 commit comments

Comments
 (0)