Skip to content

Commit 14b36ff

Browse files
authored
Merge pull request #22 from nextcloud/chore/maintenance
maintenance + polishing
2 parents 43a7cb1 + 6984069 commit 14b36ff

15 files changed

+64
-110
lines changed

.github/workflows/analysis-coverage.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ jobs:
3030
- name: Run Analysis
3131
run: |
3232
python3 -m pip install pylint
33-
python3 -m pylint "lib/"
33+
python3 -m pylint --recursive=y "ex_app/lib/"

.github/workflows/appstore-build-publish.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
runs-on: ubuntu-latest
1818

1919
# Only allowed to be run on nextcloud-releases repositories
20-
if: ${{ github.repository_owner == 'cloud-py-api' }} # REPLACE THIS WITH YOUR ORGANIZATION NAME
20+
if: ${{ github.repository_owner == 'nextcloud' }} # REPLACE THIS WITH YOUR ORGANIZATION NAME
2121

2222
steps:
2323
- name: Check actor permission

.github/workflows/publish-docker-cpu.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
push_to_registry:
88
name: Build image
99
runs-on: ubuntu-latest
10-
if: ${{ github.repository_owner == 'cloud-py-api' }}
10+
if: ${{ github.repository_owner == 'nextcloud' }}
1111
permissions:
1212
packages: write
1313
contents: read
@@ -88,6 +88,6 @@ jobs:
8888
push: true
8989
context: ./${{ env.APP_NAME }}
9090
platforms: linux/amd64,linux/arm64
91-
tags: ghcr.io/cloud-py-api/${{ env.APP_NAME }}:${{ env.VERSION }}
91+
tags: ghcr.io/nextcloud/${{ env.APP_NAME }}:${{ env.VERSION }}
9292
build-args: |
9393
BUILD_TYPE=cpu

.nextcloudignore

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
/babel.config.js
1717
/build
1818
/APPS.md
19-
/AUTHORS.md
2019
/HOW_TO_INSTALL.md
2120
/README.md
2221
/composer.*

.pre-commit-config.yaml

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ci:
22
skip: [pylint]
33

4+
exclude: '^ex_app/(img|js)/|.*\.phar'
45
repos:
56
- repo: https://github.com/pre-commit/pre-commit-hooks
67
rev: v4.6.0
@@ -14,13 +15,13 @@ repos:
1415
rev: 5.13.2
1516
hooks:
1617
- id: isort
17-
files: lib/
18+
files: ex_app/lib/
1819

1920
- repo: https://github.com/psf/black
2021
rev: 24.8.0
2122
hooks:
2223
- id: black
23-
files: lib/
24+
files: ex_app/lib/
2425

2526
- repo: https://github.com/astral-sh/ruff-pre-commit
2627
rev: v0.6.5
@@ -31,7 +32,7 @@ repos:
3132
hooks:
3233
- id: pylint
3334
name: pylint
34-
entry: pylint "lib/"
35+
entry: pylint --recursive=y "ex_app/lib/"
3536
language: system
3637
types: [ python ]
3738
pass_filenames: false

.run/NC 27.run.xml

-31
This file was deleted.

.run/NC 29.run.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@
55
<option name="INTERPRETER_OPTIONS" value="" />
66
<option name="PARENT_ENVS" value="true" />
77
<envs>
8-
<env name="PYTHONUNBUFFERED" value="1" />
8+
<env name="APP_HOST" value="0.0.0.0" />
99
<env name="APP_ID" value="skeleton" />
1010
<env name="APP_PORT" value="9030" />
1111
<env name="APP_SECRET" value="12345" />
12-
<env name="APP_VERSION" value="1.0.0" />
12+
<env name="APP_VERSION" value="2.0.0" />
1313
<env name="NEXTCLOUD_URL" value="http://stable29.local/index.php" />
14-
<env name="APP_HOST" value="0.0.0.0" />
14+
<env name="PYTHONUNBUFFERED" value="1" />
1515
</envs>
1616
<option name="SDK_HOME" value="" />
1717
<option name="SDK_NAME" value="Python 3.10 (app-skeleton-python)" />
18-
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/lib" />
18+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ex_app/lib" />
1919
<option name="IS_MODULE_SDK" value="false" />
2020
<option name="ADD_CONTENT_ROOTS" value="true" />
2121
<option name="ADD_SOURCE_ROOTS" value="true" />
2222
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
23-
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lib/main.py" />
23+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ex_app/lib/main.py" />
2424
<option name="PARAMETERS" value="" />
2525
<option name="SHOW_COMMAND_LINE" value="false" />
2626
<option name="EMULATE_TERMINAL" value="false" />

.run/NC 28.run.xml renamed to .run/NC 30.run.xml

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
<component name="ProjectRunConfigurationManager">
2-
<configuration default="false" name="NC 28" type="PythonConfigurationType" factoryName="Python">
2+
<configuration default="false" name="NC 30" type="PythonConfigurationType" factoryName="Python">
33
<module name="app-skeleton-python" />
44
<option name="ENV_FILES" value="" />
55
<option name="INTERPRETER_OPTIONS" value="" />
66
<option name="PARENT_ENVS" value="true" />
77
<envs>
8-
<env name="PYTHONUNBUFFERED" value="1" />
8+
<env name="APP_HOST" value="0.0.0.0" />
99
<env name="APP_ID" value="skeleton" />
1010
<env name="APP_PORT" value="9030" />
1111
<env name="APP_SECRET" value="12345" />
12-
<env name="APP_VERSION" value="1.0.0" />
13-
<env name="NEXTCLOUD_URL" value="http://stable28.local/index.php" />
14-
<env name="APP_HOST" value="0.0.0.0" />
12+
<env name="APP_VERSION" value="2.0.0" />
13+
<env name="NEXTCLOUD_URL" value="http://stable30.local/index.php" />
14+
<env name="PYTHONUNBUFFERED" value="1" />
1515
</envs>
1616
<option name="SDK_HOME" value="" />
1717
<option name="SDK_NAME" value="Python 3.10 (app-skeleton-python)" />
18-
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/lib" />
18+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ex_app/lib" />
1919
<option name="IS_MODULE_SDK" value="false" />
2020
<option name="ADD_CONTENT_ROOTS" value="true" />
2121
<option name="ADD_SOURCE_ROOTS" value="true" />
2222
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
23-
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lib/main.py" />
23+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ex_app/lib/main.py" />
2424
<option name="PARAMETERS" value="" />
2525
<option name="SHOW_COMMAND_LINE" value="false" />
2626
<option name="EMULATE_TERMINAL" value="false" />

.run/NC Last.run.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@
55
<option name="INTERPRETER_OPTIONS" value="" />
66
<option name="PARENT_ENVS" value="true" />
77
<envs>
8-
<env name="PYTHONUNBUFFERED" value="1" />
8+
<env name="APP_HOST" value="0.0.0.0" />
99
<env name="APP_ID" value="skeleton" />
1010
<env name="APP_PORT" value="9030" />
1111
<env name="APP_SECRET" value="12345" />
12-
<env name="APP_VERSION" value="1.0.0" />
12+
<env name="APP_VERSION" value="2.0.0" />
1313
<env name="NEXTCLOUD_URL" value="http://nextcloud.local/index.php" />
14-
<env name="APP_HOST" value="0.0.0.0" />
14+
<env name="PYTHONUNBUFFERED" value="1" />
1515
</envs>
1616
<option name="SDK_HOME" value="" />
1717
<option name="SDK_NAME" value="Python 3.10 (app-skeleton-python)" />
18-
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/lib" />
18+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ex_app/lib" />
1919
<option name="IS_MODULE_SDK" value="false" />
2020
<option name="ADD_CONTENT_ROOTS" value="true" />
2121
<option name="ADD_SOURCE_ROOTS" value="true" />
2222
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
23-
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lib/main.py" />
23+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ex_app/lib/main.py" />
2424
<option name="PARAMETERS" value="" />
2525
<option name="SHOW_COMMAND_LINE" value="false" />
2626
<option name="EMULATE_TERMINAL" value="false" />

Dockerfile

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ COPY requirements.txt /
55
RUN \
66
python3 -m pip install -r requirements.txt && rm -rf ~/.cache && rm requirements.txt
77

8-
ADD cs[s] /app/css
9-
ADD im[g] /app/img
10-
ADD j[s] /app/js
11-
ADD l10[n] /app/l10n
12-
ADD li[b] /app/lib
8+
ADD /ex_app/cs[s] /ex_app/css
9+
ADD /ex_app/im[g] /ex_app/img
10+
ADD /ex_app/j[s] /ex_app/js
11+
ADD /ex_app/l10[n] /ex_app/l10n
12+
ADD /ex_app/li[b] /ex_app/lib
1313

14-
WORKDIR /app/lib
14+
WORKDIR /ex_app/lib
1515
ENTRYPOINT ["python3", "main.py"]

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2024 cloud-py-api
3+
Copyright (c) 2024 Nextcloud GmbH and Nextcloud contributors
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

Makefile

+22-37
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
.DEFAULT_GOAL := help
22

3+
APP_ID := skeleton
4+
APP_NAME := SkeletonApp
5+
APP_VERSION := 2.0.0
6+
JSON_INFO := "{\"id\":\"$(APP_ID)\",\"name\":\"$(APP_NAME)\",\"daemon_config_name\":\"manual_install\",\"version\":\"$(APP_VERSION)\",\"secret\":\"12345\",\"port\":9030}"
7+
8+
39
.PHONY: help
410
help:
511
@echo "Welcome to Skeleton example. Please use \`make <target>\` where <target> is one of"
@@ -9,72 +15,51 @@ help:
915
@echo " "
1016
@echo " build-push build image and upload to ghcr.io"
1117
@echo " "
12-
@echo " run28 install Skeleton for Nextcloud 28"
1318
@echo " run29 install Skeleton for Nextcloud 29"
1419
@echo " run30 install Skeleton for Nextcloud 30"
1520
@echo " run install Skeleton for Nextcloud Last"
1621
@echo " "
1722
@echo " For development of this example use PyCharm run configurations. Development is always set for last Nextcloud."
1823
@echo " First run 'Skeleton' and then 'make registerXX', after that you can use/debug/develop it and easy test."
1924
@echo " "
20-
@echo " register28 perform registration of running Skeleton into the 'manual_install' deploy daemon."
2125
@echo " register29 perform registration of running Skeleton into the 'manual_install' deploy daemon."
2226
@echo " register30 perform registration of running Skeleton into the 'manual_install' deploy daemon."
2327
@echo " register perform registration of running Skeleton into the 'manual_install' deploy daemon."
2428

2529
.PHONY: build-push
2630
build-push:
2731
docker login ghcr.io
28-
docker buildx build --push --platform linux/arm64/v8,linux/amd64 --tag ghcr.io/cloud-py-api/skeleton:latest .
29-
30-
.PHONY: run28
31-
run28:
32-
docker exec master-stable28-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
33-
docker exec master-stable28-1 sudo -u www-data php occ app_api:app:register skeleton --force-scopes \
34-
--info-xml https://raw.githubusercontent.com/cloud-py-api/app-skeleton-python/main/appinfo/info.xml
32+
docker buildx build --push --platform linux/arm64/v8,linux/amd64 --tag ghcr.io/nextcloud/skeleton:latest .
3533

3634
.PHONY: run29
3735
run29:
38-
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
39-
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:register skeleton --force-scopes \
40-
--info-xml https://raw.githubusercontent.com/cloud-py-api/app-skeleton-python/main/appinfo/info.xml
36+
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
37+
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:register $(APP_ID) \
38+
--info-xml https://raw.githubusercontent.com/nextcloud/$(APP_ID)/main/appinfo/info.xml
4139

4240
.PHONY: run30
4341
run30:
44-
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
45-
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:register skeleton --force-scopes \
46-
--info-xml https://raw.githubusercontent.com/cloud-py-api/app-skeleton-python/main/appinfo/info.xml
42+
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
43+
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:register $(APP_ID) \
44+
--info-xml https://raw.githubusercontent.com/nextcloud/$(APP_ID)/main/appinfo/info.xml
4745

4846
.PHONY: run
4947
run:
50-
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
51-
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register skeleton --force-scopes \
52-
--info-xml https://raw.githubusercontent.com/cloud-py-api/app-skeleton-python/main/appinfo/info.xml
53-
54-
.PHONY: register28
55-
register28:
56-
docker exec master-stable28-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
57-
docker exec master-stable28-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
58-
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
59-
--force-scopes --wait-finish
48+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
49+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register $(APP_ID) \
50+
--info-xml https://raw.githubusercontent.com/nextcloud/$(APP_ID)/main/appinfo/info.xml
6051

6152
.PHONY: register29
6253
register29:
63-
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
64-
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
65-
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
66-
--force-scopes --wait-finish
54+
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
55+
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:register $(APP_ID) manual_install --json-info $(JSON_INFO) --wait-finish
6756

6857
.PHONY: register30
6958
register30:
70-
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
71-
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
72-
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
73-
--force-scopes --wait-finish
59+
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
60+
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:register $(APP_ID) manual_install --json-info $(JSON_INFO) --wait-finish
7461

7562
.PHONY: register
7663
register:
77-
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
78-
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
79-
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
80-
--force-scopes --wait-finish
64+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
65+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register $(APP_ID) manual_install --json-info $(JSON_INFO) --wait-finish

appinfo/info.xml

+6-9
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,22 @@
66
<description>
77
<![CDATA[Simplest skeleton of the Nextcloud application written in python]]>
88
</description>
9-
<version>1.0.0</version>
9+
<version>2.0.0</version>
1010
<licence>MIT</licence>
1111
<author mail="[email protected]" homepage="https://github.com/bigcat88">Alexander Piskun</author>
1212
<namespace>PyAppV2_skeleton</namespace>
1313
<category>tools</category>
14-
<website>https://github.com/cloud-py-api/app-skeleton-python</website>
15-
<bugs>https://github.com/cloud-py-api/app-skeleton-python/issues</bugs>
16-
<repository type="git">https://github.com/cloud-py-api/app-skeleton-python</repository>
14+
<website>https://github.com/nextcloud/app-skeleton-python</website>
15+
<bugs>https://github.com/nextcloud/app-skeleton-python/issues</bugs>
16+
<repository type="git">https://github.com/nextcloud/app-skeleton-python</repository>
1717
<dependencies>
18-
<nextcloud min-version="27" max-version="30"/>
18+
<nextcloud min-version="29" max-version="31"/>
1919
</dependencies>
2020
<external-app>
2121
<docker-install>
2222
<registry>ghcr.io</registry>
23-
<image>cloud-py-api/skeleton</image>
23+
<image>nextcloud/skeleton</image>
2424
<image-tag>latest</image-tag>
2525
</docker-install>
26-
<scopes>
27-
</scopes>
28-
<system>false</system>
2926
</external-app>
3027
</info>

lib/main.py renamed to ex_app/lib/main.py

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""Simplest example."""
22

3+
import os
34
from contextlib import asynccontextmanager
5+
from pathlib import Path
46

57
from fastapi import FastAPI
68
from nc_py_api import NextcloudApp
@@ -32,4 +34,5 @@ def enabled_handler(enabled: bool, nc: NextcloudApp) -> str:
3234
if __name__ == "__main__":
3335
# Wrapper around `uvicorn.run`.
3436
# You are free to call it directly, with just using the `APP_HOST` and `APP_PORT` variables from the environment.
37+
os.chdir(Path(__file__).parent)
3538
run_app("main:APP", log_level="trace")

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nc_py_api[app]>=0.15.0
1+
nc_py_api[app]>=0.17.1

0 commit comments

Comments
 (0)