Skip to content

maintenance + polishing #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/analysis-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ jobs:
- name: Run Analysis
run: |
python3 -m pip install pylint
python3 -m pylint "lib/"
python3 -m pylint --recursive=y "ex_app/lib/"
2 changes: 1 addition & 1 deletion .github/workflows/appstore-build-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest

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

steps:
- name: Check actor permission
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-docker-cpu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
push_to_registry:
name: Build image
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'cloud-py-api' }}
if: ${{ github.repository_owner == 'nextcloud' }}
permissions:
packages: write
contents: read
Expand Down Expand Up @@ -88,6 +88,6 @@ jobs:
push: true
context: ./${{ env.APP_NAME }}
platforms: linux/amd64,linux/arm64
tags: ghcr.io/cloud-py-api/${{ env.APP_NAME }}:${{ env.VERSION }}
tags: ghcr.io/nextcloud/${{ env.APP_NAME }}:${{ env.VERSION }}
build-args: |
BUILD_TYPE=cpu
1 change: 0 additions & 1 deletion .nextcloudignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
/babel.config.js
/build
/APPS.md
/AUTHORS.md
/HOW_TO_INSTALL.md
/README.md
/composer.*
Expand Down
7 changes: 4 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
ci:
skip: [pylint]

exclude: '^ex_app/(img|js)/|.*\.phar'
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
Expand All @@ -14,13 +15,13 @@ repos:
rev: 5.13.2
hooks:
- id: isort
files: lib/
files: ex_app/lib/

- repo: https://github.com/psf/black
rev: 24.8.0
hooks:
- id: black
files: lib/
files: ex_app/lib/

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.5
Expand All @@ -31,7 +32,7 @@ repos:
hooks:
- id: pylint
name: pylint
entry: pylint "lib/"
entry: pylint --recursive=y "ex_app/lib/"
language: system
types: [ python ]
pass_filenames: false
Expand Down
31 changes: 0 additions & 31 deletions .run/NC 27.run.xml

This file was deleted.

10 changes: 5 additions & 5 deletions .run/NC 29.run.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="APP_HOST" value="0.0.0.0" />
<env name="APP_ID" value="skeleton" />
<env name="APP_PORT" value="9030" />
<env name="APP_SECRET" value="12345" />
<env name="APP_VERSION" value="1.0.0" />
<env name="APP_VERSION" value="2.0.0" />
<env name="NEXTCLOUD_URL" value="http://stable29.local/index.php" />
<env name="APP_HOST" value="0.0.0.0" />
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.10 (app-skeleton-python)" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/lib" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ex_app/lib" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lib/main.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ex_app/lib/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
Expand Down
14 changes: 7 additions & 7 deletions .run/NC 28.run.xml → .run/NC 30.run.xml
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="NC 28" type="PythonConfigurationType" factoryName="Python">
<configuration default="false" name="NC 30" type="PythonConfigurationType" factoryName="Python">
<module name="app-skeleton-python" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="APP_HOST" value="0.0.0.0" />
<env name="APP_ID" value="skeleton" />
<env name="APP_PORT" value="9030" />
<env name="APP_SECRET" value="12345" />
<env name="APP_VERSION" value="1.0.0" />
<env name="NEXTCLOUD_URL" value="http://stable28.local/index.php" />
<env name="APP_HOST" value="0.0.0.0" />
<env name="APP_VERSION" value="2.0.0" />
<env name="NEXTCLOUD_URL" value="http://stable30.local/index.php" />
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.10 (app-skeleton-python)" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/lib" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ex_app/lib" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lib/main.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ex_app/lib/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
Expand Down
10 changes: 5 additions & 5 deletions .run/NC Last.run.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="APP_HOST" value="0.0.0.0" />
<env name="APP_ID" value="skeleton" />
<env name="APP_PORT" value="9030" />
<env name="APP_SECRET" value="12345" />
<env name="APP_VERSION" value="1.0.0" />
<env name="APP_VERSION" value="2.0.0" />
<env name="NEXTCLOUD_URL" value="http://nextcloud.local/index.php" />
<env name="APP_HOST" value="0.0.0.0" />
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.10 (app-skeleton-python)" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/lib" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ex_app/lib" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lib/main.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ex_app/lib/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
Expand Down
12 changes: 6 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ COPY requirements.txt /
RUN \
python3 -m pip install -r requirements.txt && rm -rf ~/.cache && rm requirements.txt

ADD cs[s] /app/css
ADD im[g] /app/img
ADD j[s] /app/js
ADD l10[n] /app/l10n
ADD li[b] /app/lib
ADD /ex_app/cs[s] /ex_app/css
ADD /ex_app/im[g] /ex_app/img
ADD /ex_app/j[s] /ex_app/js
ADD /ex_app/l10[n] /ex_app/l10n
ADD /ex_app/li[b] /ex_app/lib

WORKDIR /app/lib
WORKDIR /ex_app/lib
ENTRYPOINT ["python3", "main.py"]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

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

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
59 changes: 22 additions & 37 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
.DEFAULT_GOAL := help

APP_ID := skeleton
APP_NAME := SkeletonApp
APP_VERSION := 2.0.0
JSON_INFO := "{\"id\":\"$(APP_ID)\",\"name\":\"$(APP_NAME)\",\"daemon_config_name\":\"manual_install\",\"version\":\"$(APP_VERSION)\",\"secret\":\"12345\",\"port\":9030}"


.PHONY: help
help:
@echo "Welcome to Skeleton example. Please use \`make <target>\` where <target> is one of"
Expand All @@ -9,72 +15,51 @@ help:
@echo " "
@echo " build-push build image and upload to ghcr.io"
@echo " "
@echo " run28 install Skeleton for Nextcloud 28"
@echo " run29 install Skeleton for Nextcloud 29"
@echo " run30 install Skeleton for Nextcloud 30"
@echo " run install Skeleton for Nextcloud Last"
@echo " "
@echo " For development of this example use PyCharm run configurations. Development is always set for last Nextcloud."
@echo " First run 'Skeleton' and then 'make registerXX', after that you can use/debug/develop it and easy test."
@echo " "
@echo " register28 perform registration of running Skeleton into the 'manual_install' deploy daemon."
@echo " register29 perform registration of running Skeleton into the 'manual_install' deploy daemon."
@echo " register30 perform registration of running Skeleton into the 'manual_install' deploy daemon."
@echo " register perform registration of running Skeleton into the 'manual_install' deploy daemon."

.PHONY: build-push
build-push:
docker login ghcr.io
docker buildx build --push --platform linux/arm64/v8,linux/amd64 --tag ghcr.io/cloud-py-api/skeleton:latest .

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

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

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

.PHONY: run
run:
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register skeleton --force-scopes \
--info-xml https://raw.githubusercontent.com/cloud-py-api/app-skeleton-python/main/appinfo/info.xml

.PHONY: register28
register28:
docker exec master-stable28-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
docker exec master-stable28-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
--force-scopes --wait-finish
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register $(APP_ID) \
--info-xml https://raw.githubusercontent.com/nextcloud/$(APP_ID)/main/appinfo/info.xml

.PHONY: register29
register29:
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
--force-scopes --wait-finish
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
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

.PHONY: register30
register30:
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
--force-scopes --wait-finish
docker exec master-stable30-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
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

.PHONY: register
register:
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister skeleton --silent --force || true
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register skeleton manual_install --json-info \
"{\"id\":\"skeleton\",\"name\":\"App Skeleton\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9030,\"scopes\":[]}" \
--force-scopes --wait-finish
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
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
15 changes: 6 additions & 9 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,22 @@
<description>
<![CDATA[Simplest skeleton of the Nextcloud application written in python]]>
</description>
<version>1.0.0</version>
<version>2.0.0</version>
<licence>MIT</licence>
<author mail="[email protected]" homepage="https://github.com/bigcat88">Alexander Piskun</author>
<namespace>PyAppV2_skeleton</namespace>
<category>tools</category>
<website>https://github.com/cloud-py-api/app-skeleton-python</website>
<bugs>https://github.com/cloud-py-api/app-skeleton-python/issues</bugs>
<repository type="git">https://github.com/cloud-py-api/app-skeleton-python</repository>
<website>https://github.com/nextcloud/app-skeleton-python</website>
<bugs>https://github.com/nextcloud/app-skeleton-python/issues</bugs>
<repository type="git">https://github.com/nextcloud/app-skeleton-python</repository>
<dependencies>
<nextcloud min-version="27" max-version="30"/>
<nextcloud min-version="29" max-version="31"/>
</dependencies>
<external-app>
<docker-install>
<registry>ghcr.io</registry>
<image>cloud-py-api/skeleton</image>
<image>nextcloud/skeleton</image>
<image-tag>latest</image-tag>
</docker-install>
<scopes>
</scopes>
<system>false</system>
</external-app>
</info>
3 changes: 3 additions & 0 deletions lib/main.py → ex_app/lib/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
"""Simplest example."""

import os
from contextlib import asynccontextmanager
from pathlib import Path

from fastapi import FastAPI
from nc_py_api import NextcloudApp
Expand Down Expand Up @@ -32,4 +34,5 @@ def enabled_handler(enabled: bool, nc: NextcloudApp) -> str:
if __name__ == "__main__":
# Wrapper around `uvicorn.run`.
# You are free to call it directly, with just using the `APP_HOST` and `APP_PORT` variables from the environment.
os.chdir(Path(__file__).parent)
run_app("main:APP", log_level="trace")
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
nc_py_api[app]>=0.15.0
nc_py_api[app]>=0.17.1