Improving contributing docs/process

This commit is contained in:
Michael Manfre 2022-11-13 15:57:27 -05:00 committed by GitHub
parent 30c208226e
commit 5a8b6bb3d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 107 additions and 4 deletions

35
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,35 @@
# Contributing to Takahē
## Getting Started
Takahē requires Python 3.11
Create and activate a virtual environment
```
python3 -m venv .venv
. .venv/bin/activate
```
Install the development requirements:
```
pip install -r requirements-dev.txt
```
Enable git commit hooks:
```bash
pre-commit install
```
Try running the tests:
```bash
pytest
```
# Code of Conduct
As a contributor, you can help us keep the Takahē community open and inclusive. Takahē
follows the [Django Project Code of Conduct](https://www.djangoproject.com/conduct/).

26
LICENSE Normal file
View file

@ -0,0 +1,26 @@
Copyright 2022 Andrew Godwin
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -8,3 +8,16 @@ Goals:
* Multiple account domains possible per server * Multiple account domains possible per server
* Mastodon client API compatible * Mastodon client API compatible
* Async evented core for fan-out/delivery * Async evented core for fan-out/delivery
## Deployment
### Requirements:
- **Python** 3.11
- **Postgresql** 14+
- **Lots of patience** This is *very experimental*
## Contributing
If you'd like to contribute, please read [CONTRIBUTING.md](./CONTRIBUTING.md).

View file

@ -3,10 +3,26 @@
import os import os
import sys import sys
# List of settings files that should guard against running certain commands
GUARDED_ENVIRONMENTS = [
"production",
]
GUARDED_COMMANDS =[
"test",
]
def main(): def main():
"""Run administrative tasks.""" """Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "takahe.settings.production") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "takahe.settings.production")
# Guard against running tests in arbitrary environments
env_name = os.environ["DJANGO_SETTINGS_MODULE"].rsplit(".", 1)[-1]
if env_name in GUARDED_ENVIRONMENTS:
for cmd in sys.argv:
if cmd in GUARDED_COMMANDS:
raise Exception(f"Cannot run {cmd} in {env_name}")
try: try:
from django.core.management import execute_from_command_line from django.core.management import execute_from_command_line
except ImportError as exc: except ImportError as exc:

8
requirements-dev.txt Normal file
View file

@ -0,0 +1,8 @@
pre-commit~=2.20.0
-r requirements.txt
black==22.10.0
flake8==5.0.4
isort==5.10.1
pre-commit~=2.20.0
pytest-django~=4.5.2
pytest-httpx~=0.21

View file

@ -10,6 +10,4 @@ uvicorn~=0.19
gunicorn~=20.1.0 gunicorn~=20.1.0
psycopg2~=2.9.5 psycopg2~=2.9.5
bleach~=5.0.1 bleach~=5.0.1
pytest-django~=4.5.2
pytest-httpx~=0.21
pydantic~=1.10.2 pydantic~=1.10.2

View file

@ -1,5 +1,5 @@
[flake8] [flake8]
exclude = venv/*,tox/*,specs/* exclude = .venv/*,venv/*,tox/*,specs/*
ignore = E123,E128,E203,E266,E402,F405,E501,W503,E731,W601 ignore = E123,E128,E203,E266,E402,F405,E501,W503,E731,W601
max-line-length = 119 max-line-length = 119

View file

@ -55,6 +55,7 @@ DATABASES = {
"default": { "default": {
"ENGINE": "django.db.backends.postgresql_psycopg2", "ENGINE": "django.db.backends.postgresql_psycopg2",
"HOST": os.environ.get("POSTGRES_HOST", "localhost"), "HOST": os.environ.get("POSTGRES_HOST", "localhost"),
"PORT": os.environ.get("POSTGRES_PORT", 5432),
"NAME": os.environ.get("POSTGRES_DB", "takahe"), "NAME": os.environ.get("POSTGRES_DB", "takahe"),
"USER": os.environ.get("POSTGRES_USER", "postgres"), "USER": os.environ.get("POSTGRES_USER", "postgres"),
"PASSWORD": os.environ.get("POSTGRES_PASSWORD"), "PASSWORD": os.environ.get("POSTGRES_PASSWORD"),

View file

@ -11,3 +11,9 @@ MIDDLEWARE.insert(0, "core.middleware.AlwaysSecureMiddleware")
# Ensure debug features are on # Ensure debug features are on
DEBUG = True DEBUG = True
CRISPY_FAIL_SILENTLY = False CRISPY_FAIL_SILENTLY = False
ALLOWED_HOSTS = ["*"]
CSRF_TRUSTED_ORIGINS = [
"http://127.0.0.1:8000",
"https://127.0.0.1:8000",
]

View file

@ -26,7 +26,7 @@ class ViewIdentity(TemplateView):
fetch=True, fetch=True,
) )
posts = identity.posts.all()[:100] posts = identity.posts.all()[:100]
if identity.data_age > Config.load().IDENTITY_MAX_AGE: if identity.data_age > Config.load().identity_max_age:
identity.transition_perform(IdentityStates.outdated) identity.transition_perform(IdentityStates.outdated)
return { return {
"identity": identity, "identity": identity,