From 0f4cf489616645c869a762e4f537fb571a80ffe9 Mon Sep 17 00:00:00 2001 From: "serviceosaurus[bot]" <124343559+serviceosaurus[bot]@users.noreply.github.com> Date: Sat, 17 Aug 2024 10:55:21 +0000 Subject: [PATCH] Initial commit --- .github/ISSUE_TEMPLATE/bug_report.md | 31 +++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++ .github/PULL_REQUEST_TEMPLATE.md | 15 ++ .github/dependabot.yml | 6 + .github/init.sh | 68 ++++++ .github/rename_project.sh | 40 ++++ .github/template.yml | 1 + .github/workflows/docs.yml | 31 +++ .github/workflows/main.yml | 70 ++++++ .github/workflows/rename_project.yml | 42 ++++ .github/workflows/tests.yml | 49 +++++ .gitignore | 139 ++++++++++++ ABOUT_THIS_TEMPLATE.md | 125 +++++++++++ LICENSE | 201 ++++++++++++++++++ NOTICE.txt | 9 + README.md | 115 ++++++++++ docs/index.md | 21 ++ logo.png | Bin 0 -> 105960 bytes mkdocs.yml | 15 ++ requirements-dev.txt | 14 ++ requirements.txt | 3 + setup.py | 44 ++++ tests/__init__.py | 0 tests/conftest.py | 17 ++ tests/test_base.py | 22 ++ ukp_project_template/__init__.py | 8 + ukp_project_template/__main__.py | 6 + ukp_project_template/base.py | 62 ++++++ ukp_project_template/cli.py | 33 +++ ukp_project_template/subpackage/__init__.py | 5 + ukp_project_template/subpackage/subpackage.py | 15 ++ 31 files changed, 1227 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yml create mode 100755 .github/init.sh create mode 100755 .github/rename_project.sh create mode 100644 .github/template.yml create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/rename_project.yml create mode 100644 .github/workflows/tests.yml create mode 100644 .gitignore create mode 100644 ABOUT_THIS_TEMPLATE.md create mode 100644 LICENSE create mode 100644 NOTICE.txt create mode 100644 README.md create mode 100644 docs/index.md create mode 100644 logo.png create mode 100644 mkdocs.yml create mode 100644 requirements-dev.txt create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/test_base.py create mode 100644 ukp_project_template/__init__.py create mode 100644 ukp_project_template/__main__.py create mode 100644 ukp_project_template/base.py create mode 100644 ukp_project_template/cli.py create mode 100644 ukp_project_template/subpackage/__init__.py create mode 100644 ukp_project_template/subpackage/subpackage.py diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..0d9360d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug, help wanted +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..cc98b69 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement, question +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..9ccc736 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ +### Summary :memo: +_Write an overview about it._ + +### Details +_Describe more what you did on changes._ +1. (...) +2. (...) + +### Bugfixes :bug: (delete if dind't have any) +- + +### Checks +- [ ] Closed #798 +- [ ] Tested Changes +- [ ] Stakeholder Approval diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..120c689 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" \ No newline at end of file diff --git a/.github/init.sh b/.github/init.sh new file mode 100755 index 0000000..8a32ee3 --- /dev/null +++ b/.github/init.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +overwrite_template_dir=0 + +while getopts t:o flag +do + case "${flag}" in + t) template=${OPTARG};; + o) overwrite_template_dir=1;; + esac +done + +if [ -z "${template}" ]; then + echo "Available templates: flask" + read -p "Enter template name: " template +fi + +repo_urlname=$(basename -s .git `git config --get remote.origin.url`) +repo_name=$(basename -s .git `git config --get remote.origin.url` | tr '-' '_' | tr '[:upper:]' '[:lower:]') +repo_owner=$(git config --get remote.origin.url | awk -F ':' '{print $2}' | awk -F '/' '{print $1}') +echo "Repo name: ${repo_name}" +echo "Repo owner: ${repo_owner}" +echo "Repo urlname: ${repo_urlname}" + +if [ -f ".github/workflows/rename_project.yml" ]; then + .github/rename_project.sh -a "${repo_owner}" -n "${repo_name}" -u "${repo_urlname}" -d "Awesome ${repo_name} created by ${repo_owner}" +fi + +function download_template { + rm -rf "${template_dir}" + mkdir -p .github/templates + git clone "${template_url}" "${template_dir}" +} + +echo "Using template:${template}" +template_url="https://github.com/rochacbruno/${template}-project-template" +template_dir=".github/templates/${template}" +if [ -d "${template_dir}" ]; then + # Template directory already exists + if [ "${overwrite_template_dir}" -eq 1 ]; then + # user passed -o flag, delete and re-download + echo "Overwriting ${template_dir}" + download_template + else + # Ask user if they want to overwrite + echo "Directory ${template_dir} already exists." + read -p "Do you want to overwrite it? [y/N] " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "Overwriting ${template_dir}" + download_template + else + # User decided not to overwrite + echo "Using existing ${template_dir}" + fi + fi +else + # Template directory does not exist, download it + echo "Downloading ${template_url}" + download_template +fi + +echo "Applying ${template} template to this project"} +./.github/templates/${template}/apply.sh -a "${repo_owner}" -n "${repo_name}" -u "${repo_urlname}" -d "Awesome ${repo_name} created by ${repo_owner}" + +# echo "Removing temporary template files" +# rm -rf .github/templates/${template} + +echo "Done! review, commit and push the changes" diff --git a/.github/rename_project.sh b/.github/rename_project.sh new file mode 100755 index 0000000..4459ea9 --- /dev/null +++ b/.github/rename_project.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +while getopts a:n:u:d: flag +do + case "${flag}" in + a) author=${OPTARG};; + n) name=${OPTARG};; + u) urlname=${OPTARG};; + d) description=${OPTARG};; + esac +done + +echo "Author: $author"; +echo "Project Name: $name"; +echo "Project URL name: $urlname"; +echo "Description: $description"; + +echo "Renaming project..." + +original_author="UKPLab" +original_name="ukp_project_template" +original_urlname="ukp-project-template" +original_description="The official template for new Python projects at UKP Lab" +# Iterate over all files in the repository +git ls-files | while read -r filename; do + # Exclude .github/workflows/rename_project.yml from renaming + if [[ "$filename" != ".github/workflows/rename_project.yml" ]]; then + sed -i "s/$original_author/$author/g" "$filename" + sed -i "s/$original_name/$name/g" "$filename" + sed -i "s/$original_urlname/$urlname/g" "$filename" + sed -i "s/$original_description/$description/g" "$filename" + echo "Renamed $filename" + else + echo "Skipping $filename" + fi +done + +mv "$original_name" "$name" + +# This command runs only once on GHA! +rm -rf .github/template.yml diff --git a/.github/template.yml b/.github/template.yml new file mode 100644 index 0000000..94e4e54 --- /dev/null +++ b/.github/template.yml @@ -0,0 +1 @@ +author: UKPLab diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..45c94f6 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,31 @@ +name: Build Docs + +on: + push: + branches: + - main # Change this to your main branch name + pull_request: + branches: + - main # Change this to your main branch name + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.9 # Change this to your Python version + + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-dev.txt + + - name: Build Docs + run: | + python -m mkdocs build --verbose diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..0d39a67 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,70 @@ +# This is a basic workflow to help you get started with Actions +name: CI + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + + check-files: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Check files + run: | + # Define the list of filenames you want to check + FILES_TO_CHECK=("LICENSE" "README.md" "requirements.txt" "requirements-dev.txt" "NOTICE.txt" "setup.py") + + # Initialize a variable to track missing files + MISSING_FILES=() + + # Check if each file exists in the root directory + for FILE in "${FILES_TO_CHECK[@]}"; do + if [ ! -f "$FILE" ]; then + MISSING_FILES+=("$FILE") + fi + done + + # Output the missing files + if [ ${#MISSING_FILES[@]} -eq 0 ]; then + echo "All files exist." + else + echo "The following files are missing:" + for MISSING_FILE in "${MISSING_FILES[@]}"; do + echo "- $MISSING_FILE" + done + echo "::error::One or more files are missing." + exit 1 + fi + + linter: + runs-on: ubuntu-latest + needs: check-files + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install dependencies + run: | + pip install -r requirements-dev.txt + + - name: Analysing the code with pylint + run: | + pylint --disable=trailing-whitespace,missing-class-docstring,missing-final-newline,trailing-newlines \ + --fail-under=9.0 \ + $(git ls-files '*.py') || echo "::warning::Pylint check failed, but the workflow will continue." diff --git a/.github/workflows/rename_project.yml b/.github/workflows/rename_project.yml new file mode 100644 index 0000000..4cef27e --- /dev/null +++ b/.github/workflows/rename_project.yml @@ -0,0 +1,42 @@ +name: Rename the project from template + +on: [push] + +permissions: write-all + +jobs: + rename-project: + if: ${{ !contains (github.repository, '/ukp-project-template') }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + # by default, it uses a depth of 1 + # this fetches all history so that we can read each commit + fetch-depth: 0 + ref: ${{ github.head_ref }} + + - run: echo "REPOSITORY_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}' | tr '-' '_' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV + shell: bash + + - run: echo "REPOSITORY_URLNAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV + shell: bash + + - run: echo "REPOSITORY_OWNER=$(echo '${{ github.repository }}' | awk -F '/' '{print $1}')" >> $GITHUB_ENV + shell: bash + + - name: Is this still a template + id: is_template + run: echo "::set-output name=is_template::$(ls .github/template.yml &> /dev/null && echo true || echo false)" + + - name: Rename the project + if: steps.is_template.outputs.is_template == 'true' + run: | + echo "Renaming the project with -a(author) ${{ env.REPOSITORY_OWNER }} -n(name) ${{ env.REPOSITORY_NAME }} -u(urlname) ${{ env.REPOSITORY_URLNAME }}" + .github/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@v5 + with: + commit_message: "βœ… Ready to clone and code." + # commit_options: '--amend --no-edit' + push_options: --force diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..6a171a5 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,49 @@ +# This is a basic workflow to help you get started with Actions +name: Run tests + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + tests: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install dependencies + run: | + pip install . + pip install -r requirements-dev.txt + + # Hacky way to get package name from setup.py + - name: Get package name + id: get_package_name + run: | + setup_file="setup.py" + pattern="name=" + project_name=$(grep -oP "(?<=${pattern}\")[^\"]+" $setup_file) + echo "::set-output name=package_name::$project_name" + + - name: Run tests + run: | + pytest -v --cov-fail-under=60 --cov=${{ steps.get_package_name.outputs.package_name }} -l --tb=short --maxfail=1 tests/ + coverage xml + coverage html \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4e550cf --- /dev/null +++ b/.gitignore @@ -0,0 +1,139 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# templates +.github/templates/* + +# History +.history + +# Project files +sketch* +ukp_project_template/sketch* \ No newline at end of file diff --git a/ABOUT_THIS_TEMPLATE.md b/ABOUT_THIS_TEMPLATE.md new file mode 100644 index 0000000..82291f1 --- /dev/null +++ b/ABOUT_THIS_TEMPLATE.md @@ -0,0 +1,125 @@ +# About this template + +Hi, I've adapted this template from the excellent [python-project-template](https://github.com/rochacbruno/python-project-template/) by [rochacbruno](https://github.com/rochacbruno). It was created having in mind UKP Lab people and what the most common use-cases would be. Following its structure you'll get into developing your next paper in no time! + +It includes: + +- πŸ“¦ A basic [setup.py](setup.py) file to provide installation, packaging and distribution for your project. + Template uses setuptools because it's the de-facto standard for Python packages +- πŸ“ƒ Documentation structure using [mkdocs](http://www.mkdocs.org) +- πŸ§ͺ Testing structure using [pytest](https://docs.pytest.org/en/latest/) +- βœ… Code linting using [pylint](https://pypi.org/project/pylint/) +- 🎯 Entry points to execute your program using `python -m ` with basic CLI argument parsing. +- πŸ”„ Continuous integration using [Github Actions](https://github.com/UKPLab/ukp-project-template/actions) with jobs to check, lint and test your project. + +Are there any changes you'd like to request? Feel free to fork and open a pull request! + +## Structure + +Lets take a look at the structure of this template: + +```text +β”‚ .gitignore # A list of files to ignore when pushing to GH +β”‚ ABOUT_THIS_TEMPLATE.md # The file you're reading right now +β”‚ LICENSE # The license for the project +β”‚ mkdocs.yml # Configuration for documentation site +β”‚ NOTICE.txt # Legal notice for the repository +β”‚ README.md # The main readme for the project +β”‚ requirements-dev.txt # List of requirements for testing and devlopment +β”‚ requirements.txt # An empty file to hold the requirements for the project +β”‚ setup.py # The setup.py file for installing and packaging the project +β”‚ +β”œβ”€β”€β”€.github # Github metadata for repository +β”‚ β”‚ dependabot.yml # Dependabot workflow for updating requirements +β”‚ β”‚ init.sh # Initializes the repository +β”‚ β”‚ PULL_REQUEST_TEMPLATE.md # Used automatically by GH for pull requests +β”‚ β”‚ rename_project.sh # Called once at repository creation +β”‚ β”‚ +β”‚ β”œβ”€β”€β”€ISSUE_TEMPLATE # Templates for creating issues on GH +β”‚ β”‚ +β”‚ └───workflows # GH Actions folder +β”‚ docs.yml # Builds documentation automatically +β”‚ main.yml # Runs install and file checks +β”‚ rename_project.yml # Renames repository at creation +β”‚ tests.yml # Run all tests in 'tests' folder +β”‚ +β”œβ”€β”€β”€docs # Auto-generated documentation +β”‚ index.md # Landing page of docs +β”‚ +β”œβ”€β”€β”€ukp_project_template # The main python package for the project +β”‚ base.py # The base module for the project +β”‚ cli.py # Defines CLI instructions +β”‚ __init__.py # This tells Python that this is a package +β”‚ __main__.py # The entry point for the project +β”‚ +└───tests # Unit tests for the project (add more tests files here) + conftest.py # Configuration, hooks and fixtures for pytest + test_base.py # The base test case for the project + __init__.py # This tells Python that this is a test package +``` + +## FAQs + + +### Where should I add new stuff ? + +You should create new files and subpackages inside ukp_project_template and implement your functionalities there. Remember to add what you write to `__init__.py` so that the imports work smoothly. Take a look at `base.py` and `__init__.py` to understand how it works. + +### Why is `requirements.txt` empty ? + +This template is a low dependency project, so it doesn't have any extra dependencies. +You can freely add new dependencies. + +You should put here everything needed to replicate your work. +Testing, linting, and other requirements used only in development should go in `requirements-dev.txt`. + +### Why is there a `requirements-dev.txt` file ? + +This file lists all the requirements for testing and development. Use it to separate things you used during development from the essential stuff needed to replicate your work. + +### What is the `.github` folder? + +It contains [GitHub Actions](https://docs.github.com/en/actions) that are executed automatically when pushing your code. You can see results for your repository [here](https://github.com/UKPLab/ukp-project-template/actions). + +### What does the linter workflow do? + +It checks whether your code is clean enough from duplication, inconsistencies, violations to the naming convention etc. +It's not supposed to fail, but you should still look into it to get an idea of which parts of your code may need adjustments. + +### Why do automated actions fail ? + +This means there is something wrong in the files/tests/requirements. +Click on the failing run to read more details. + +### Why include `tests` and `docs` as part of the release? + +This template ships with everything you may need. You can remove what you don't like in this way: + - If you don't need automatic documentation generation, you can delete folder `docs`, file `.github\workflows\docs.yml` and `mkdocs.yml` + - If you don't want automatic testing, you can delete folder `tests` and file `.github\workflows\tests.yml` + +### How can I use pytest & pylint to check my code? + +Command `pytest` called from the project folder will run all tests inside the `tests` folder. +Similarly, `pylint` will run linting checks on your code and give you a status report. +It checks things such as logic, formatting, correct imports, duplication etc. + +### Why conftest includes a go_to_tmpdir fixture? + +When your project deals with file system operations, it is a good idea to use +a fixture to create a temporary directory and then remove it after the test. + +Before executing each test pytest will create a temporary directory and will +change the working directory to that path and run the test. + +So the test can create temporary artifacts isolated from other tests. + +After the execution Pytest will remove the temporary directory. + +### Why this template is not using [pre-commit](https://pre-commit.com/) ? + +pre-commit is an excellent tool to automate checks and formatting on your code. + +However I figured out that pre-commit adds extra dependency and it an entry barrier +for new contributors. + +Once the project is bigger and complex, having pre-commit as a dependency can be a good idea. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000..fa2cdd8 --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,9 @@ +------------------------------------------------------------------------------- +Copyright 2016 +Ubiquitous Knowledge Processing (UKP) Lab +Technische UniversitΓ€t Darmstadt + +------------------------------------------------------------------------------- +Third party legal information + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..441b6c2 --- /dev/null +++ b/README.md @@ -0,0 +1,115 @@ +

+ +

+ +# ukp_project_template +[![Arxiv](https://img.shields.io/badge/Arxiv-YYMM.NNNNN-red?style=flat-square&logo=arxiv&logoColor=white)](https://put-here-your-paper.com) +[![License](https://img.shields.io/github/license/UKPLab/ukp-project-template)](https://opensource.org/licenses/Apache-2.0) +[![Python Versions](https://img.shields.io/badge/Python-3.9-blue.svg?style=flat&logo=python&logoColor=white)](https://www.python.org/) +[![CI](https://github.com/UKPLab/ukp-project-template/actions/workflows/main.yml/badge.svg)](https://github.com/UKPLab/ukp-project-template/actions/workflows/main.yml) + +This is the official template for new Python projects at UKP Lab. It was adapted for the needs of UKP Lab from the excellent [python-project-template](https://github.com/rochacbruno/python-project-template/) by [rochacbruno](https://github.com/rochacbruno). + +It should help you start your project and give you continuous status updates on the development through [GitHub Actions](https://docs.github.com/en/actions). + +> **Abstract:** The study of natural language processing (NLP) has gained increasing importance in recent years, with applications ranging from machine translation to sentiment analysis. Properly managing Python projects in this domain is of paramount importance to ensure reproducibility and facilitate collaboration. The template provides a structured starting point for projects and offers continuous status updates on development through GitHub Actions. Key features include a basic setup.py file for installation, packaging, and distribution, documentation structure using mkdocs, testing structure using pytest, code linting with pylint, and entry points for executing the program with basic CLI argument parsing. Additionally, the template incorporates continuous integration using GitHub Actions with jobs to check, lint, and test the project, ensuring robustness and reliability throughout the development process. + +Contact person: [Federico Tiblias](mailto:federico.tiblias@tu-darmstadt.de) + +[UKP Lab](https://www.ukp.tu-darmstadt.de/) | [TU Darmstadt](https://www.tu-darmstadt.de/ +) + +Don't hesitate to send us an e-mail or report an issue, if something is broken (and it shouldn't be) or if you have further questions. + + +## Getting Started + +> **DO NOT CLONE OR FORK** + +If you want to set up this template: + +1. Request a repository on UKP Lab's GitHub by following the standard procedure on the wiki. It will install the template directly. Alternatively, set it up in your personal GitHub account by clicking **[Use this template](https://github.com/rochacbruno/python-project-template/generate)**. +2. Wait until the first run of CI finishes. Github Actions will commit to your new repo with a "βœ… Ready to clone and code" message. +3. Delete optional files: + - If you don't need automatic documentation generation, you can delete folder `docs`, file `.github\workflows\docs.yml` and `mkdocs.yml` + - If you don't want automatic testing, you can delete folder `tests` and file `.github\workflows\tests.yml` +4. Prepare a virtual environment: +```bash +python -m venv .venv +source .venv/bin/activate +pip install . +pip install -r requirements-dev.txt # Only needed for development +``` +5. Adapt anything else (for example this file) to your project. + +6. Read the file [ABOUT_THIS_TEMPLATE.md](ABOUT_THIS_TEMPLATE.md) for more information about development. + +## Usage + +### Using the classes + +To import classes/methods of `ukp_project_template` from inside the package itself you can use relative imports: + +```py +from .base import BaseClass # Notice how I omit the package name + +BaseClass().something() +``` + +To import classes/methods from outside the package (e.g. when you want to use the package in some other project) you can instead refer to the package name: + +```py +from ukp_project_template import BaseClass # Notice how I omit the file name +from ukp_project_template.subpackage import SubPackageClass # Here it's necessary because it's a subpackage + +BaseClass().something() +SubPackageClass().something() +``` + +### Using scripts + +This is how you can use `ukp_project_template` from command line: + +```bash +$ python -m ukp_project_template +``` + +### Expected results + +After running the experiments, you should expect the following results: + +(Feel free to describe your expected results here...) + +### Parameter description + +* `x, --xxxx`: This parameter does something nice + +* ... + +* `z, --zzzz`: This parameter does something even nicer + +## Development + +Read the FAQs in [ABOUT_THIS_TEMPLATE.md](ABOUT_THIS_TEMPLATE.md) to learn more about how this template works and where you should put your classes & methods. Make sure you've correctly installed `requirements-dev.txt` dependencies + +## Cite + +Please use the following citation: + +``` +@InProceedings{smith:20xx:CONFERENCE_TITLE, + author = {Smith, John}, + title = {My Paper Title}, + booktitle = {Proceedings of the 20XX Conference on XXXX}, + month = mmm, + year = {20xx}, + address = {Gotham City, USA}, + publisher = {Association for XXX}, + pages = {XXXX--XXXX}, + url = {http://xxxx.xxx} +} +``` + +## Disclaimer + +> This repository contains experimental software and is published for the sole purpose of giving additional background details on the respective publication. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..fe27dfe --- /dev/null +++ b/docs/index.md @@ -0,0 +1,21 @@ +# Welcome to MkDocs + +For full documentation visit [mkdocs.org](https://www.mkdocs.org). + +## Commands + +* `mkdocs new [dir-name]` - Create a new project. +* `mkdocs serve` - Start the live-reloading docs server. +* `mkdocs build` - Build the documentation site. +* `mkdocs -h` - Print help message and exit. + +## Project layout + + mkdocs.yml # The configuration file. + docs/ + index.md # The documentation homepage. + ... # Other markdown pages, images and other files. + +## Docs + +::: ukp_project_template \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..89f79d04b69ed907c42ae436aa16e9cfa7cfd9bf GIT binary patch literal 105960 zcmeEt=T}o-(C(p269o~FrqY8HL5c_jlrFt@P?~hAjaI zy@%eD-26Vg>;4P(uJz_i&RWSj`|O$7&&)jYoJeg=Won8C6aWBFtEwpI0st}ok{Gx} zivNPL@_z(?hk&YryuSaB-9_>rEOu!Zha16V@Shu++=&?ra<^ZqG`^BtOA@`K8UOxc zs9^u2KaV!yc`(5zAi4 zGk4nl7Ro4N;N(QdV)AtAS{luTU;BSQ|7(H&wZQ)e7SKNYfAJx6mI?kJd@Q*xuX{lR zK$VQK^Yuw-{^ZE7MkUN3Y$=Zh&Xw)(+Nvyp+91E~`l4(PrLNWd=<<5~9vJ#MJ9Tpp z6BN`sD1-Q>t3M0?^JGShK%3#~uxnMd5&NG|15IJZ%E5B3qu(k+SGqq z?4}9_MGbjl{f5sanB=aqiYObb_*ii{GK-gibL-fp`3;pN{s8sg&XGn3QZjrY8qRR& zjlitmoZEJ_1v_}QZpwRarQL=J`I$NhQqKo3I+kQ$t#GN&KhB+64|$g1k9<3&v}pM> z296UnbU(U&Q|Nr1h}QkLF=(G(Jb(5%O*o_1_Jx$xoM@VQ&}*}uxl`w9Wb^Vz`r!(z zhW$dje(c%8F9ZG*#7Q6JUidI`u2S)uZxd@-cWIZe$Hq<~Cjhum!q|XNOIJaqEOEz; zlg7xEjTn}vZ-*o4cv!_eC;p@*@@TM0*bls`g#Q$DDRv#%O0Pw;F%y3v4p9p$1;rT<^l`)ji)HOp*qem?OYeqXnZC;&MZ zz2Dfz%-L62A|$nR1ms#I8(%~ueLXlC-Ah+N5uBeosx>OoxrLoCY|MIS^*gK zGZCdE@g`wqZ^+u{+fL)XB|R?k(7c8QMS{0R(a`hjL{!7iQ}B5}!(Jl;SZLNggA$Rj zaaxP%a|z6dGDE(w(mO?f#f#!No{2ZdW~j6Ajn6tERa@(p%U~PuC7MO7ej`!&{!^2? zNT>(R7q$k6mGkMt>!wQYvFn%gXa1Xkl;`JRdw$nFGJ=;2ra}A0O|nFDG8WF$eC^v8 z0U!gpPkd?u4ud7UtP0c>|vY`;%cr89C&pOZMs47A;CfMWN~%it8DgA{fl;>zz8!&ZceJ=50=9`#0tnh@z|zT1M}i*V4iS>I{S$ z3I}n)d$J?1(X@5p!>BM~g=ubj)|@=zHYFheL;d}5bJ~adT;olY$^F8e;P57|(g-i! z1ntYbdDFSmqqY9kE(R+q+(i)>i%oOLy1e19L|{A3+>uMU6SwU4juz5hi2wj7>l*-s z_UW+{e`R~BrjacbJoNkc_RZMR^{&_7lSTW2o*1UY5?DoV-SQ43V(mwaF}Xq)0d!>c zXv_5IMNj@l9)~k0c-?}c+sTha#L#aM*;Ng3UmPIoT&HE^@{ioRPwZ}gO_|6rf1(o@ zh=E}*&FaqsgH~d*QO6uXP;AO<`o?*!V#b5GZ)mlV(^Hyb_8lzpv@U88lv-NU1Z1YYLIBk55~qqYQS zD<|)$k`Ik(Qn9e(Y|;?>pd-lQu)_zRaj?z@i7 zM8s{`-SQ3^@bdbi!{CD5_C!fYu->a1iNshlniam@JmGsnYZ;J!=#4{SooWM467YES zeML@|{ku2!{o4KeRh;n<+7mw-+2$-%0O~#`KoRiqhPJ+rU@rxKO;1)F%%&qxm@|(y zO8_>p{__EvoxP&fh}VSoxB$-Q`mC(1x&{WxoFvOR;DJwbm3?aq3y&%L`cEe!CAj*i zd5qz!?nh&p7bWeOTafk;O)^=Wx93nMztKvOT*uMIv zV=Y&EY^2N2S95doYngsaCdZvCaY%ohRtV$_ogKK1ajTSniC>RZ%@^SH3jffyyLj%j z;Euxx%Kp1psZ6W8E?<9Y)BO%S0)Lp&uNW+&Igpw?i17L$LmsNZK@j?3e41D;Jw4!X$L;2lF~}Zm=10R@+3?5rP}6K$4i62f!<;+6Aqgy_U#?TVsvl zWX>9E{4(LrK|U4+rZJz~9)lC>K4{XH8%#YvwA_$k*5Fkl1bEqlH2?+fD5Kqxtf|a? z>UGAQl%p8^?(e+s+}$OFkVi*R$|0wJKGH1U+QgtCr^Dsk0ALrBzzp=s>CRSCe=e&T zlHNH<)RNiSZ}K`Or``DB$bRmZ{}-2CCUTmO{F6G1vS?Z>7K2N%u|MtdJn zvXcn{5^yl%&VD_9zJIwCfDG7`sPqeZ{@?k$&s#x|qd;GO5X)K@4V?=k@w0sYJDd`~ zm)90>ZZHQ@47R-JR-wUPA$r*t1mn`8k2yD5B!wj6o!UIe1GGa-tdHzIZ=HF;7Tz)N zZ#71Q(t>yYR9rchQ)ipi7N2I|&IYw0*IDkkoMSFkJQ(!m7m$Y1>M>pnr#)>5`4_Mu z?Xm56?6CLDEvA~bi4U_Z2v^(DPC9C)U(2MsSmQqkho@f1RPf!luA2G9286?@iDrs# zsxon(r=rk(e0%%>n91qEk2EqDC_j|X`BU`GX=d^9nkp$Er<&(Y8k!)YWY#>hTi-vB z9xZrv!Ljip=&WTu{!|JU)5CvY#vz`O{ZDA?*nJTfYxV_ASM$H*;sqA-)K{Lz7!<%#Q#YI6+n8Y zP#B;Bi~;#O&xoUIey#k^d|iUNL4%t+c0dObI&jf zn;djZhY+n40kiudm;F}QxJt+xKRe%oE-e8dEX*5BU`+-pf5u*m8_lmo9)50!le!x5 zzVqc%Jh_b4CG4$B-q2l4Yd$fV@cZRM6_O5s6a1tNv%BBVXhZ0SY;L{UE=$XBgF9l0 zXrvFyY@_jk()LxkmlAlPLVFX(B%=wvIqGMZJ->PVmFb1AamaI|o9O#!-9;$+E|+BJ zhskm6!Ypo3B+q?syT2T9(zL->3TZlB8PL;_b!_b!;$nN_u-6f9i4@e)X-U-uDhu=jL!rkn=;Oi#gvk zBLb)0-4Unj9EoI!#6T$P$FciBy(q&CTGs2Viodeus%zyd?)~xRXa`1}`x&B=)h2e+ zb^*C+hFg@HA0Pm7s7~siMe^+v{0)OTS7Z}kYsp>~G-1x>wSo`uY4KhH093uw9wTh? zO{l#RlHO=9gS8x?-Ll1;Q&dSnmRc{svsMlyvk#uaCc*3%5r*ZJ;zkO3VML6Q8QX

-}c;E(h>24c(Ie@u~QK3k2)*5z2vI6XNi;cDcIT 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 read("ukp_project_template", "VERSION") + '0.1.0' + >>> read("README.md") + ... + """ + + content = "" + with io.open( + os.path.join(os.path.dirname(__file__), *paths), + encoding=kwargs.get("encoding", "utf8"), + ) as open_file: + content = open_file.read().strip() + return content + + +def read_requirements(path): + return [ + line.strip() + for line in read(path).split("\n") + if not line.startswith(('"', "#", "-", "git+")) + ] + + +setup( + name="ukp_project_template", + url="https://github.com/UKPLab/ukp-project-template/", + long_description=read("README.md"), + long_description_content_type="text/markdown", + author="author_name", + packages=find_packages(exclude=["tests", ".github"]), + install_requires=read_requirements("requirements.txt"), + entry_points={ + "console_scripts": ["ukp_project_template = ukp_project_template.__main__:main"] + }, + extras_require={"test": read_requirements("requirements-dev.txt")}, +) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..2dc2a8f --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,17 @@ +# This file defines fixtures that are used by all tests in the tests/ directory. +# See https://docs.pytest.org/en/latest/fixture.html for more information about fixtures. + +import sys +import pytest + + +# each test runs on cwd to its temp dir +@pytest.fixture(autouse=True) +def go_to_tmpdir(request): + # Get the fixture dynamically by its name. + tmpdir = request.getfixturevalue("tmpdir") + # ensure local test created packages can be imported + sys.path.insert(0, str(tmpdir)) + # Chdir only for the duration of the test. + with tmpdir.as_cwd(): + yield diff --git a/tests/test_base.py b/tests/test_base.py new file mode 100644 index 0000000..6eac760 --- /dev/null +++ b/tests/test_base.py @@ -0,0 +1,22 @@ +# Tests are defined here +from ukp_project_template import BaseClass +from ukp_project_template.subpackage import SubPackageClass + +def test_template(): + assert True + +def test_base_class(): + bc1 = BaseClass(name="test1") + bc2 = BaseClass(name="test2") + + assert str(bc1) == "test1" + assert repr(bc1) == "test1" + assert bc1 != bc2 + assert bc1.something() == "something" + +def test_subpackage(): + spc = SubPackageClass(name="test") + + assert str(spc) == "SubPackage - test" + assert repr(spc) == "SubPackage - test" + assert spc.something() == "SubPackage - something" \ No newline at end of file diff --git a/ukp_project_template/__init__.py b/ukp_project_template/__init__.py new file mode 100644 index 0000000..4003b3e --- /dev/null +++ b/ukp_project_template/__init__.py @@ -0,0 +1,8 @@ +from .base import BaseClass + + + +__all__ = [ + "subpackage", + "BaseClass" + ] \ No newline at end of file diff --git a/ukp_project_template/__main__.py b/ukp_project_template/__main__.py new file mode 100644 index 0000000..c6bc87c --- /dev/null +++ b/ukp_project_template/__main__.py @@ -0,0 +1,6 @@ +"""Entry point for ukp_project_template.""" + +from .cli import main # pragma: no cover + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/ukp_project_template/base.py b/ukp_project_template/base.py new file mode 100644 index 0000000..7ecc6ac --- /dev/null +++ b/ukp_project_template/base.py @@ -0,0 +1,62 @@ +# Example class +class BaseClass: + """ + Base class representing an entity. + + Attributes + ---------- + name : str + The name of the entity. + + Methods + ------- + __init__(): + Initializes a new instance of the BaseClass. + __str__(): + Returns a string representation of the entity. + __repr__(): + Returns a string representation of the entity for debugging. + __eq__(other): + Checks if two entities are equal based on their names. + + """ + + def __init__(self, name: str): + """ + Initializes a new instance of the BaseClass. + """ + self.name = name + + def __str__(self): + """ + Returns a string representation of the entity. + """ + return self.name + + def __repr__(self): + """ + Returns a string representation of the entity for debugging. + """ + return self.name + + def __eq__(self, other): + """ + Checks if two entities are equal based on their names. + + Parameters + ---------- + other : BaseClass + Another instance of BaseClass. + + Returns + ------- + bool + True if the entities are equal, False otherwise. + """ + return self.name == other.name + + def something(self): + """ + Does something. + """ + return "something" diff --git a/ukp_project_template/cli.py b/ukp_project_template/cli.py new file mode 100644 index 0000000..325b7c9 --- /dev/null +++ b/ukp_project_template/cli.py @@ -0,0 +1,33 @@ +"""CLI interface for ukp_project_template project. + +Be creative! do whatever you want! + +- Install click or typer and create a CLI app +- Use builtin argparse +- Start a web application +- Import things from your .base module +""" +from .base import BaseClass +from .subpackage import SubPackageClass + +def main(): # pragma: no cover + """ + The main function executes on commands: + `python -m ukp_project_template` and `$ ukp_project_template `. + + This is your program's entry point. + + You can change this function to do whatever you want. + Examples: + * Run a test suite + * Run a server + * Do some other stuff + * Run a command line application (Click, Typer, ArgParse) + * List all available tasks + * Run an application (Flask, FastAPI, Django, etc.) + """ + bc = BaseClass("test") + print(f"This will do something: {bc.something()}") + + spc = SubPackageClass("test") + print(f"This will do something else: {spc.something()}") diff --git a/ukp_project_template/subpackage/__init__.py b/ukp_project_template/subpackage/__init__.py new file mode 100644 index 0000000..bf2baf1 --- /dev/null +++ b/ukp_project_template/subpackage/__init__.py @@ -0,0 +1,5 @@ +from .subpackage import SubPackageClass + +__all__ = [ + "SubPackageClass" +] \ No newline at end of file diff --git a/ukp_project_template/subpackage/subpackage.py b/ukp_project_template/subpackage/subpackage.py new file mode 100644 index 0000000..c676ed5 --- /dev/null +++ b/ukp_project_template/subpackage/subpackage.py @@ -0,0 +1,15 @@ +class SubPackageClass: + def __init__(self, name): + self.name = name + + def __str__(self): + return f"SubPackage - {self.name}" + + def __repr__(self): + return f"SubPackage - {self.name}" + + def __eq__(self, other): + return self.name == other.name + + def something(self): + return "SubPackage - something" \ No newline at end of file