Compare commits
2 Commits
e4f251f138
...
62e1917a95
Author | SHA1 | Date | |
---|---|---|---|
62e1917a95 | |||
43ff10817d |
@ -16,10 +16,10 @@ echo "Description: $description";
|
|||||||
|
|
||||||
echo "Renaming project..."
|
echo "Renaming project..."
|
||||||
|
|
||||||
original_author="Templates"
|
original_author="author_name"
|
||||||
original_name="python"
|
original_name="project_name"
|
||||||
original_urlname="Python"
|
original_urlname="project_urlname"
|
||||||
original_description="Awesome python created by Templates"
|
original_description="project_description"
|
||||||
# for filename in $(find . -name "*.*")
|
# for filename in $(find . -name "*.*")
|
||||||
for filename in $(git ls-files)
|
for filename in $(git ls-files)
|
||||||
do
|
do
|
||||||
@ -30,7 +30,7 @@ do
|
|||||||
echo "Renamed $filename"
|
echo "Renamed $filename"
|
||||||
done
|
done
|
||||||
|
|
||||||
mv python $name
|
mv project_name $name
|
||||||
|
|
||||||
# This command runs only once on GHA!
|
# This command runs only once on GHA!
|
||||||
rm -rf .gitea/template.yml
|
rm -rf .gitea/template.yml
|
||||||
|
1
.gitea/template.yml
Normal file
1
.gitea/template.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
author: rochacbruno
|
@ -6,7 +6,7 @@ permissions: write-all
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
rename-project:
|
rename-project:
|
||||||
if: ${{ !contains (github.repository, '/python-project-template') }}
|
if: ${{ !contains (gitea.repository, '/Pythonx') }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
@ -14,29 +14,32 @@ jobs:
|
|||||||
# by default, it uses a depth of 1
|
# by default, it uses a depth of 1
|
||||||
# this fetches all history so that we can read each commit
|
# this fetches all history so that we can read each commit
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ gitea.head_ref }}
|
||||||
|
|
||||||
- run: echo "REPOSITORY_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}' | tr '-' '_' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
|
- run: env
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- run: echo "REPOSITORY_URLNAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV
|
# - run: echo "REPOSITORY_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}' | tr '-' '_' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
|
||||||
shell: bash
|
# shell: bash
|
||||||
|
|
||||||
- run: echo "REPOSITORY_OWNER=$(echo '${{ github.repository }}' | awk -F '/' '{print $1}')" >> $GITHUB_ENV
|
# - run: echo "REPOSITORY_URLNAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV
|
||||||
shell: bash
|
# shell: bash
|
||||||
|
|
||||||
- name: Is this still a template
|
# - run: echo "REPOSITORY_OWNER=$(echo '${{ github.repository }}' | awk -F '/' '{print $1}')" >> $GITHUB_ENV
|
||||||
id: is_template
|
# shell: bash
|
||||||
run: echo "::set-output name=is_template::$(ls .gitea/template.yml &> /dev/null && echo true || echo false)"
|
|
||||||
|
|
||||||
- name: Rename the project
|
# - name: Is this still a template
|
||||||
if: steps.is_template.outputs.is_template == 'true'
|
# id: is_template
|
||||||
run: |
|
# run: echo "::set-output name=is_template::$(ls .gitea/template.yml &> /dev/null && echo true || echo false)"
|
||||||
echo "Renaming the project with -a(author) ${{ env.REPOSITORY_OWNER }} -n(name) ${{ env.REPOSITORY_NAME }} -u(urlname) ${{ env.REPOSITORY_URLNAME }}"
|
|
||||||
.gitea/rename_project.sh -a ${{ env.REPOSITORY_OWNER }} -n ${{ env.REPOSITORY_NAME }} -u ${{ env.REPOSITORY_URLNAME }} -d "Awesome ${{ env.REPOSITORY_NAME }} created by ${{ env.REPOSITORY_OWNER }}"
|
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
# - name: Rename the project
|
||||||
with:
|
# if: steps.is_template.outputs.is_template == 'true'
|
||||||
commit_message: "✅ Ready to clone and code."
|
# run: |
|
||||||
# commit_options: '--amend --no-edit'
|
# echo "Renaming the project with -a(author) ${{ env.REPOSITORY_OWNER }} -n(name) ${{ env.REPOSITORY_NAME }} -u(urlname) ${{ env.REPOSITORY_URLNAME }}"
|
||||||
push_options: --force
|
# .gitea/rename_project.sh -a ${{ env.REPOSITORY_OWNER }} -n ${{ env.REPOSITORY_NAME }} -u ${{ env.REPOSITORY_URLNAME }} -d "Awesome ${{ env.REPOSITORY_NAME }} created by ${{ env.REPOSITORY_OWNER }}"
|
||||||
|
|
||||||
|
# - uses: stefanzweifel/git-auto-commit-action@v4
|
||||||
|
# with:
|
||||||
|
# commit_message: "✅ Ready to clone and code."
|
||||||
|
# # commit_options: '--amend --no-edit'
|
||||||
|
# push_options: --force
|
||||||
|
@ -32,7 +32,7 @@ Lets take a look at the structure of this template:
|
|||||||
├── Makefile # A collection of utilities to manage the project
|
├── Makefile # A collection of utilities to manage the project
|
||||||
├── MANIFEST.in # A list of files to include in a package
|
├── MANIFEST.in # A list of files to include in a package
|
||||||
├── mkdocs.yml # Configuration for documentation site
|
├── mkdocs.yml # Configuration for documentation site
|
||||||
├── python # The main python package for the project
|
├── project_name # The main python package for the project
|
||||||
│ ├── base.py # The base module for the project
|
│ ├── base.py # The base module for the project
|
||||||
│ ├── __init__.py # This tells Python that this is a package
|
│ ├── __init__.py # This tells Python that this is a package
|
||||||
│ ├── __main__.py # The entry point for the project
|
│ ├── __main__.py # The entry point for the project
|
||||||
@ -109,7 +109,7 @@ I had to do some tricks to read that version variable inside the setuptools
|
|||||||
I decided to keep the version in a static file because it is easier to read from
|
I decided to keep the version in a static file because it is easier to read from
|
||||||
wherever I want without the need to install the package.
|
wherever I want without the need to install the package.
|
||||||
|
|
||||||
e.g: `cat python/VERSION` will get the project version without harming
|
e.g: `cat project_name/VERSION` will get the project version without harming
|
||||||
with module imports or anything else, it is useful for CI, logs and debugging.
|
with module imports or anything else, it is useful for CI, logs and debugging.
|
||||||
|
|
||||||
### Why to include `tests`, `history` and `Containerfile` as part of the release?
|
### Why to include `tests`, `history` and `Containerfile` as part of the release?
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# How to develop on this project
|
# How to develop on this project
|
||||||
|
|
||||||
python welcomes contributions from the community.
|
project_name welcomes contributions from the community.
|
||||||
|
|
||||||
**You need PYTHON3!**
|
**You need PYTHON3!**
|
||||||
|
|
||||||
@ -8,9 +8,9 @@ This instructions are for linux base systems. (Linux, MacOS, BSD, etc.)
|
|||||||
## Setting up your own fork of this repo.
|
## Setting up your own fork of this repo.
|
||||||
|
|
||||||
- On github interface click on `Fork` button.
|
- On github interface click on `Fork` button.
|
||||||
- Clone your fork of this repo. `git clone git@github.com:YOUR_GIT_USERNAME/Python.git`
|
- Clone your fork of this repo. `git clone git@github.com:YOUR_GIT_USERNAME/project_urlname.git`
|
||||||
- Enter the directory `cd Python`
|
- Enter the directory `cd project_urlname`
|
||||||
- Add upstream repo `git remote add upstream https://github.com/Templates/Python`
|
- Add upstream repo `git remote add upstream https://github.com/author_name/project_urlname`
|
||||||
|
|
||||||
## Setting up your own virtual environment
|
## Setting up your own virtual environment
|
||||||
|
|
||||||
|
@ -2,4 +2,4 @@ FROM python:3.7-slim
|
|||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN pip install .
|
RUN pip install .
|
||||||
CMD ["python"]
|
CMD ["project_name"]
|
||||||
|
@ -2,4 +2,4 @@ include LICENSE
|
|||||||
include HISTORY.md
|
include HISTORY.md
|
||||||
include Containerfile
|
include Containerfile
|
||||||
graft tests
|
graft tests
|
||||||
graft python
|
graft project_name
|
||||||
|
20
Makefile
20
Makefile
@ -26,20 +26,20 @@ install: ## Install the project in dev mode.
|
|||||||
|
|
||||||
.PHONY: fmt
|
.PHONY: fmt
|
||||||
fmt: ## Format code using black & isort.
|
fmt: ## Format code using black & isort.
|
||||||
$(ENV_PREFIX)isort python/
|
$(ENV_PREFIX)isort project_name/
|
||||||
$(ENV_PREFIX)black -l 79 python/
|
$(ENV_PREFIX)black -l 79 project_name/
|
||||||
$(ENV_PREFIX)black -l 79 tests/
|
$(ENV_PREFIX)black -l 79 tests/
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint: ## Run pep8, black, mypy linters.
|
lint: ## Run pep8, black, mypy linters.
|
||||||
$(ENV_PREFIX)flake8 python/
|
$(ENV_PREFIX)flake8 project_name/
|
||||||
$(ENV_PREFIX)black -l 79 --check python/
|
$(ENV_PREFIX)black -l 79 --check project_name/
|
||||||
$(ENV_PREFIX)black -l 79 --check tests/
|
$(ENV_PREFIX)black -l 79 --check tests/
|
||||||
$(ENV_PREFIX)mypy --ignore-missing-imports python/
|
$(ENV_PREFIX)mypy --ignore-missing-imports project_name/
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: lint ## Run tests and generate coverage report.
|
test: lint ## Run tests and generate coverage report.
|
||||||
$(ENV_PREFIX)pytest -v --cov-config .coveragerc --cov=python -l --tb=short --maxfail=1 tests/
|
$(ENV_PREFIX)pytest -v --cov-config .coveragerc --cov=project_name -l --tb=short --maxfail=1 tests/
|
||||||
$(ENV_PREFIX)coverage xml
|
$(ENV_PREFIX)coverage xml
|
||||||
$(ENV_PREFIX)coverage html
|
$(ENV_PREFIX)coverage html
|
||||||
|
|
||||||
@ -78,9 +78,9 @@ virtualenv: ## Create a virtual environment.
|
|||||||
release: ## Create a new tag for release.
|
release: ## Create a new tag for release.
|
||||||
@echo "WARNING: This operation will create s version tag and push to github"
|
@echo "WARNING: This operation will create s version tag and push to github"
|
||||||
@read -p "Version? (provide the next x.y.z semver) : " TAG
|
@read -p "Version? (provide the next x.y.z semver) : " TAG
|
||||||
@echo "$${TAG}" > python/VERSION
|
@echo "$${TAG}" > project_name/VERSION
|
||||||
@$(ENV_PREFIX)gitchangelog > HISTORY.md
|
@$(ENV_PREFIX)gitchangelog > HISTORY.md
|
||||||
@git add python/VERSION HISTORY.md
|
@git add project_name/VERSION HISTORY.md
|
||||||
@git commit -m "release: version $${TAG} 🚀"
|
@git commit -m "release: version $${TAG} 🚀"
|
||||||
@echo "creating git tag : $${TAG}"
|
@echo "creating git tag : $${TAG}"
|
||||||
@git tag $${TAG}
|
@git tag $${TAG}
|
||||||
@ -101,7 +101,7 @@ switch-to-poetry: ## Switch to poetry package manager.
|
|||||||
@poetry init --no-interaction --name=a_flask_test --author=rochacbruno
|
@poetry init --no-interaction --name=a_flask_test --author=rochacbruno
|
||||||
@echo "" >> pyproject.toml
|
@echo "" >> pyproject.toml
|
||||||
@echo "[tool.poetry.scripts]" >> pyproject.toml
|
@echo "[tool.poetry.scripts]" >> pyproject.toml
|
||||||
@echo "python = 'python.__main__:main'" >> pyproject.toml
|
@echo "project_name = 'project_name.__main__:main'" >> pyproject.toml
|
||||||
@cat requirements.txt | while read in; do poetry add --no-interaction "$${in}"; done
|
@cat requirements.txt | while read in; do poetry add --no-interaction "$${in}"; done
|
||||||
@cat requirements-test.txt | while read in; do poetry add --no-interaction "$${in}" --dev; done
|
@cat requirements-test.txt | while read in; do poetry add --no-interaction "$${in}" --dev; done
|
||||||
@poetry install --no-interaction
|
@poetry install --no-interaction
|
||||||
@ -109,7 +109,7 @@ switch-to-poetry: ## Switch to poetry package manager.
|
|||||||
@mv requirements* .gitea/backup
|
@mv requirements* .gitea/backup
|
||||||
@mv setup.py .gitea/backup
|
@mv setup.py .gitea/backup
|
||||||
@echo "You have switched to https://python-poetry.org/ package manager."
|
@echo "You have switched to https://python-poetry.org/ package manager."
|
||||||
@echo "Please run 'poetry shell' or 'poetry run python'"
|
@echo "Please run 'poetry shell' or 'poetry run project_name'"
|
||||||
|
|
||||||
.PHONY: init
|
.PHONY: init
|
||||||
init: ## Initialize the project based on an application template.
|
init: ## Initialize the project based on an application template.
|
||||||
|
18
README.md
18
README.md
@ -11,7 +11,7 @@ See also
|
|||||||
|
|
||||||
1. Choose a name for your project
|
1. Choose a name for your project
|
||||||
(e.g. `my_awesome_project` recommendation is to use all lowercase and underscores separation for repo names.)
|
(e.g. `my_awesome_project` recommendation is to use all lowercase and underscores separation for repo names.)
|
||||||
2. Replace all text instances of "python" in this repo with your new name
|
2. Replace all text instances of "project_name" in this repo with your new name
|
||||||
3. If you want Automatic Release to [PyPI](https://pypi.org)
|
3. If you want Automatic Release to [PyPI](https://pypi.org)
|
||||||
On the new repository `settings->secrets` add your `PYPI_API_TOKEN` (get the tokens on PyPI website)
|
On the new repository `settings->secrets` add your `PYPI_API_TOKEN` (get the tokens on PyPI website)
|
||||||
4. Read the file [CONTRIBUTING.md](CONTRIBUTING.md)
|
4. Read the file [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||||
@ -35,7 +35,7 @@ See also
|
|||||||
- 🧪 Testing structure using [pytest](https://docs.pytest.org/en/latest/)
|
- 🧪 Testing structure using [pytest](https://docs.pytest.org/en/latest/)
|
||||||
- ✅ Code linting using [flake8](https://flake8.pycqa.org/en/latest/)
|
- ✅ Code linting using [flake8](https://flake8.pycqa.org/en/latest/)
|
||||||
- 🛳️ Automatic release to [PyPI](https://pypi.org) using [twine](https://twine.readthedocs.io/en/latest/) and github actions.
|
- 🛳️ Automatic release to [PyPI](https://pypi.org) using [twine](https://twine.readthedocs.io/en/latest/) and github actions.
|
||||||
- 🎯 Entry points to execute your program using `python -m <python>` or `$ python` with basic CLI argument parsing.
|
- 🎯 Entry points to execute your program using `python -m <project_name>` or `$ project_name` with basic CLI argument parsing.
|
||||||
- 🔄 Continuous integration using [Github Actions](.gitea/workflows/) with jobs to lint, test and release your project on Linux, Mac and Windows environments.
|
- 🔄 Continuous integration using [Github Actions](.gitea/workflows/) with jobs to lint, test and release your project on Linux, Mac and Windows environments.
|
||||||
|
|
||||||
> Curious about architectural decisions on this template? read [ABOUT_THIS_TEMPLATE.md](ABOUT_THIS_TEMPLATE.md)
|
> Curious about architectural decisions on this template? read [ABOUT_THIS_TEMPLATE.md](ABOUT_THIS_TEMPLATE.md)
|
||||||
@ -46,30 +46,30 @@ See also
|
|||||||
<!-- DELETE THE LINES ABOVE THIS AND WRITE YOUR PROJECT README BELOW -->
|
<!-- DELETE THE LINES ABOVE THIS AND WRITE YOUR PROJECT README BELOW -->
|
||||||
|
|
||||||
---
|
---
|
||||||
# python
|
# project_name
|
||||||
|
|
||||||
Awesome python created by Templates
|
project_description
|
||||||
|
|
||||||
## Install it from PyPI
|
## Install it from PyPI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install python
|
pip install project_name
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```py
|
```py
|
||||||
from python import BaseClass
|
from project_name import BaseClass
|
||||||
from python import base_function
|
from project_name import base_function
|
||||||
|
|
||||||
BaseClass().base_method()
|
BaseClass().base_method()
|
||||||
base_function()
|
base_function()
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ python -m python
|
$ python -m project_name
|
||||||
#or
|
#or
|
||||||
$ python
|
$ project_name
|
||||||
```
|
```
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
site_name: python
|
site_name: project_name
|
||||||
theme: readthedocs
|
theme: readthedocs
|
||||||
|
6
project_name/__main__.py
Normal file
6
project_name/__main__.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
"""Entry point for project_name."""
|
||||||
|
|
||||||
|
from project_name.cli import main # pragma: no cover
|
||||||
|
|
||||||
|
if __name__ == "__main__": # pragma: no cover
|
||||||
|
main()
|
@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
python base module.
|
project_name base module.
|
||||||
|
|
||||||
This is the principal module of the python project.
|
This is the principal module of the project_name project.
|
||||||
here you put your main classes and objects.
|
here you put your main classes and objects.
|
||||||
|
|
||||||
Be creative! do whatever you want!
|
Be creative! do whatever you want!
|
||||||
@ -14,4 +14,4 @@ and then choose `flask` as template.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# example constant variable
|
# example constant variable
|
||||||
NAME = "python"
|
NAME = "project_name"
|
@ -1,4 +1,4 @@
|
|||||||
"""CLI interface for python project.
|
"""CLI interface for project_name project.
|
||||||
|
|
||||||
Be creative! do whatever you want!
|
Be creative! do whatever you want!
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ Be creative! do whatever you want!
|
|||||||
def main(): # pragma: no cover
|
def main(): # pragma: no cover
|
||||||
"""
|
"""
|
||||||
The main function executes on commands:
|
The main function executes on commands:
|
||||||
`python -m python` and `$ python `.
|
`python -m project_name` and `$ project_name `.
|
||||||
|
|
||||||
This is your program's entry point.
|
This is your program's entry point.
|
||||||
|
|
@ -1,6 +0,0 @@
|
|||||||
"""Entry point for python."""
|
|
||||||
|
|
||||||
from python.cli import main # pragma: no cover
|
|
||||||
|
|
||||||
if __name__ == "__main__": # pragma: no cover
|
|
||||||
main()
|
|
16
setup.py
16
setup.py
@ -1,4 +1,4 @@
|
|||||||
"""Python setup.py for python package"""
|
"""Python setup.py for project_name package"""
|
||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
from setuptools import find_packages, setup
|
from setuptools import find_packages, setup
|
||||||
@ -6,7 +6,7 @@ from setuptools import find_packages, setup
|
|||||||
|
|
||||||
def read(*paths, **kwargs):
|
def read(*paths, **kwargs):
|
||||||
"""Read the contents of a text file safely.
|
"""Read the contents of a text file safely.
|
||||||
>>> read("python", "VERSION")
|
>>> read("project_name", "VERSION")
|
||||||
'0.1.0'
|
'0.1.0'
|
||||||
>>> read("README.md")
|
>>> read("README.md")
|
||||||
...
|
...
|
||||||
@ -30,17 +30,17 @@ def read_requirements(path):
|
|||||||
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="python",
|
name="project_name",
|
||||||
version=read("python", "VERSION"),
|
version=read("project_name", "VERSION"),
|
||||||
description="Awesome python created by Templates",
|
description="project_description",
|
||||||
url="https://git.disi.dev/Templates/Python/",
|
url="https://git.disi.dev/author_name/project_urlname/",
|
||||||
long_description=read("README.md"),
|
long_description=read("README.md"),
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
author="Templates",
|
author="author_name",
|
||||||
packages=find_packages(exclude=["tests", ".gitea"]),
|
packages=find_packages(exclude=["tests", ".gitea"]),
|
||||||
install_requires=read_requirements("requirements.txt"),
|
install_requires=read_requirements("requirements.txt"),
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": ["python = python.__main__:main"]
|
"console_scripts": ["project_name = project_name.__main__:main"]
|
||||||
},
|
},
|
||||||
extras_require={"test": read_requirements("requirements-test.txt")},
|
extras_require={"test": read_requirements("requirements-test.txt")},
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from python.base import NAME
|
from project_name.base import NAME
|
||||||
|
|
||||||
|
|
||||||
def test_base():
|
def test_base():
|
||||||
assert NAME == "python"
|
assert NAME == "project_name"
|
||||||
|
Loading…
Reference in New Issue
Block a user