javabudd / okuna-api

πŸ€– The Okuna Social Network API

Home Page:https://okuna.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Okuna logo

CircleCI Maintainability Test Coverage gitmoji badge

The API server for Okuna.

Table of contents

Requirements

Project overview

The project is a Django application.

Contributing

There are many different ways to contribute to the website development, just find the one that best fits with your skills and open an issue/pull request in the repository.

Examples of contributions we love include:

  • Code patches
  • Bug reports
  • Patch reviews
  • Translations
  • UI enhancements

Code of Conduct

Please read and follow our Code of Conduct.

License

Every contribution accepted is licensed under AGPL v3.0 or any later version. You must be careful to not include any code that can not be licensed under this license.

Please read carefully our license and ask us if you have any questions.

Responsible disclosure

Cyber-hero? Check out our Vulnerability Disclosure page.

Other issues

We're available almost 24/7 in the Okuna slack channel. Join us!

Git commit message conventions

Help us keep the repository history consistent πŸ™!

We use gitmoji as our git message convention.

If you're using git in your command line, you can download the handy tool gitmoji-cli.

Getting started

Clone the repository

git clone git@github.com:OkunaOrg/okuna-api.git

Create and configure your .env file

cp .env.sample .env
nano .env

Install the dependencies

pipenv install

Activate the pipenv environment

pipenv shell

Run the database migrations

python manage.py migrate

Collect the media fixtures

python manage.py collectmedia

Load the fixtures

python manage.py loaddata circles.json emoji-groups.json emojis.json badges.json categories.json languages.json

Serve with hot reload

For local API development it suffices to bind the server to localhost:

python manage.py runserver

For app development you have to bind the server to your local network:

python manage.py runserver 0.0.0.0:8000

Django Translations

  1. Use ./manage.py makemessages -l es to generate messages. Doesn't matter which language we target, the translation tool is agnostic.
  2. This generates a new django.po file in the locale/es/LC_MESSAGES/ folder. It will have all the source strings and a place to enter the translation strings. It doesnt overwrite previous translations.
  3. Sometimes, if django is confused, it marks a string as fuzzy. So do search for the word 'fuzzy' in django.po
  4. If you find a fuzzy string, you can resolve it manually. Finally each string should like this
#: openbook_lists/validators.py:10   <- place where the string occurs in code
msgid "The list does not exist."     <- english translations  
msgstr "Die Liste ist nicht vorhanden."   <-- this will be empty for new strings
  1. Upload this django.po file to https://crowdin.com/project/okuna/settings#files by pressing Update next to the existing django.po file.
  2. Once all language volunteers have translated the new strings, download all the django.po files for each locale and put them in their respective folders.
  3. Run ./manage.py compilemessages to auto-generate django.mo files.
  4. You need to checkin both django.po and django.mo files for each locale.

Django Custom Commands

manage.py create_invite

Creates a user invite and outputs its token. Required for creating a new account.

usage: manage.py create_invite [-h] [--email EMAIL] [--username USERNAME] [--name NAME] [--badge BADGE]

manage.py import_invites

Imports user invites from a kickstarter/indiegogo csv

usage: manage.py import_invites [-h] [--indiegogo PATH_TO_CSV] [--kickstarter PATH_TO_CSV]

manage.py send_invites

Send invite emails to all user invites who have not been sent the email.

usage: manage.py send_invites [-h]

manage.py allocate_invites

Assign user invites to all or specific users.

usage: manage.py allocate_invites [-h] [--count INCREMENT_INVITES_BY_COUNT] [--total TOTAL_INVITE_COUNT_TO_SET] [--username USERNAME]

Automatic model translations from Crowdin

Download the latest django.po files in the respective locale/ folders from crowdin. Then locally run all or some of these commands depending on which models need updating. It will update the .json files, then check them in.

./manage.py shell < openbook_common/i18n/update_translations_emoji_groups.py
./manage.py shell < openbook_common/i18n/update_translations_emojis.py
./manage.py shell < openbook_moderation/i18n/update_translations.py
./manage.py shell < openbook_categories/i18n/update_translations.py

Docker Compose

Replace .env settings

# Relational Database Service configuration
RDS_DB_NAME=okuna
RDS_USERNAME=root
RDS_PASSWORD=okuna
RDS_HOSTNAME=db.okuna
RDS_PORT=3306
RDS_HOSTNAME_READER=db.okuna
RDS_HOSTNAME_WRITER=db.okuna

Build the container

usage: docker-compose build

Run the container

usage: docker-compose up (-d in background)

Visit the static webserver IP

http://172.16.16.1:80

Troubleshooting

macOS

The pipenv install command fails

You probably installed openssl via Homebew, make sure to follow the instructions that are given when you type brew info openssl.

FAQ

Double logging in console

The local development server runs a separate process for the auto-reloader. You can turn off the auto-reload process by passing the --noreload flag.

python manage.py runserver --noreload

Happy coding πŸŽ‰!

About

πŸ€– The Okuna Social Network API

https://okuna.io

License:GNU Affero General Public License v3.0


Languages

Language:Python 95.5%Language:HTML 4.2%Language:Shell 0.2%Language:Makefile 0.0%Language:Dockerfile 0.0%