Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
d40dcdb
Create django.yml
Cybernetic-Ransomware Feb 8, 2024
9cd3301
Features/medical notes fixes (#6)
Cybernetic-Ransomware Feb 29, 2024
2a57afd
Synch: to CI_CD
Cybernetic-Ransomware Feb 29, 2024
107c2b1
Secrets
Cybernetic-Ransomware Mar 4, 2024
b77c10d
Secrets
Cybernetic-Ransomware Mar 4, 2024
6c906af
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
f30a42d
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
17d317f
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
e6998bf
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
ae5ed27
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
44f8c18
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
4af99b9
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
815f326
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
b45f8af
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
866597d
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
aaf07e4
Synch: to CI_CD
Cybernetic-Ransomware Mar 4, 2024
b6e612f
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
b69d543
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
c370c96
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
3edc2ad
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
cddc6dc
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
0727ddb
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
25a7af4
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
5b5d128
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
9ed06af
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
167a1e9
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
36aabe4
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
bf27206
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
e7cad39
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
8449cce
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
ebdf315
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
6cbf1e3
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
809a827
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
7b636c5
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
e349379
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
cdef7d1
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
973824b
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
c3ee154
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
c83be46
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
33b790d
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
054b803
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
8f6b0e9
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
18db6de
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
341a5f1
Synch: to CI_CD
Cybernetic-Ransomware Mar 5, 2024
ca52e56
Fix import
Cybernetic-Ransomware Mar 5, 2024
9063e78
Fix import
Cybernetic-Ransomware Mar 5, 2024
c429615
Fix import
Cybernetic-Ransomware Mar 5, 2024
9dd6220
Fix import
Cybernetic-Ransomware Mar 6, 2024
5a0a0db
Fix import
Cybernetic-Ransomware Mar 6, 2024
365e7a9
Fix import
Cybernetic-Ransomware Mar 6, 2024
d1684bb
Fix import
Cybernetic-Ransomware Mar 6, 2024
7b5c8aa
Fix import
Cybernetic-Ransomware Mar 6, 2024
f922dcf
Fix import
Cybernetic-Ransomware Mar 6, 2024
52856a7
Fix import
Cybernetic-Ransomware Mar 6, 2024
19bcd82
Fix import
Cybernetic-Ransomware Mar 6, 2024
3a1791f
Fix import
Cybernetic-Ransomware Mar 6, 2024
45fad9c
Fix import
Cybernetic-Ransomware Mar 6, 2024
fd62a19
Fix import
Cybernetic-Ransomware Mar 6, 2024
9c823ce
Fix import
Cybernetic-Ransomware Mar 6, 2024
2294e6a
Fix import
Cybernetic-Ransomware Mar 6, 2024
20498a0
Fix import
Cybernetic-Ransomware Mar 6, 2024
ba2f8a2
Fix import
Cybernetic-Ransomware Mar 7, 2024
296118d
Synch: CI|CD
Cybernetic-Ransomware Mar 7, 2024
789311c
Synch: CI|CD
Cybernetic-Ransomware Mar 7, 2024
c608e23
Synch: CI|CD
Cybernetic-Ransomware Mar 7, 2024
aad642e
Synch: CI|CD
Cybernetic-Ransomware Mar 7, 2024
2cf321b
Synch: CI|CD
Cybernetic-Ransomware Mar 7, 2024
9c740fe
Synch: CI|CD
Cybernetic-Ransomware Mar 7, 2024
7bb553e
Synch: CI|CD
Cybernetic-Ransomware Mar 12, 2024
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
54 changes: 54 additions & 0 deletions .github/workflows/django.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: AHC CI|CD

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
test:
runs-on: ubuntu-20.04
env:
POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
CELERY_BROKER_URL: ${{ secrets.CELERY_BROKER_URL }}
FLOWER_PORT: ${{ secrets.FLOWER_PORT }}
FLOWER_BASIC_AUTH: ${{ secrets.FLOWER_BASIC_AUTH }}
DB_NAME: ${{ secrets.DB_NAME }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_HOST: ${{ secrets.DB_HOST }}
DB_PORT: ${{ secrets.DB_PORT }}
COUCHDB_USER: ${{ secrets.COUCHDB_USER }}
COUCHDB_PASSWORD: ${{ secrets.COUCHDB_PASSWORD }}
COUCHDB_PORT: ${{ secrets.COUCHDB_PORT }}
COUCH_CONNECTOR: ${{ secrets.COUCH_CONNECTOR }}
CELERY_BACKEND: ${{ secrets.CELERY_BACKEND }}
EMAIL_BACKEND: ${{ secrets.EMAIL_BACKEND }}
EMAIL_HOST: ${{ secrets.EMAIL_HOST }}
EMAIL_PORT: ${{ secrets.EMAIL_PORT }}
EMAIL_USE_TLS: ${{ secrets.EMAIL_USE_TLS }}
EMAIL_HOST_USER: ${{ secrets.EMAIL_HOST_USER }}
EMAIL_HOST_PASSWORD: ${{ secrets.EMAIL_HOST_PASSWORD }}
DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }}
strategy:
max-parallel: 4

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.12

- name: Prepare environment and run tests
run: |
cd ./AHC_app
pip install pipenv
pipenv install --dev
pipenv graph
pipenv run python manage.py test
39 changes: 39 additions & 0 deletions AHC_app/.env.template.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# PostgresDB for docker-compose.yml - dev
POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=

# Celery for docker-compose.yml - dev
CELERY_BROKER_URL=
FLOWER_PORT=
FLOWER_BASIC_AUTH=

# PostgresDB for settings.py - dev
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=

# CouchDB for docker-compose - dev
COUCHDB_USER=
COUCHDB_PASSWORD=
COUCHDB_PORT=

# CouchDB for settings.py - dev
COUCH_CONNECTOR=Server("")

# Celery for settings.py - dev
CELERY_BROKER_URL=
CELERY_BACKEND=

# SMTP for settings.py - dev
EMAIL_BACKEND = ""
EMAIL_HOST = ""
EMAIL_PORT = ""
EMAIL_USE_TLS =
EMAIL_HOST_USER = ""
EMAIL_HOST_PASSWORD = ""

# Discord bot token
DISCORD_TOKEN = ""
2 changes: 1 addition & 1 deletion AHC_app/.pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ repos:
types: [python]
require_serial: true
args: ['--in-place', '--remove-all-unused-imports']
exclude: '^requirements\.txt$'
exclude: '^requirements\.txt$|^setup_couchdb\.sh$'
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
Expand Down
10 changes: 6 additions & 4 deletions AHC_app/AHC_app/celery_notifications/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from celery.utils.log import get_task_logger
from django.conf import settings

from AHC_app.celery_notifications.utils.discord_utils import send_via_discord
from AHC_app.celery_notifications.utils.sending_utils import (
send_via_email, # , send_via_sms, send_via_discord
)
Expand All @@ -20,7 +21,7 @@


@celery_obj.task()
def send_email_notifications(**kwargs):
def send_email_notifications(*args, **kwargs):
recipient_list = kwargs.get("email")
subject = kwargs.get("subject")
message = kwargs.get("message")
Expand All @@ -42,6 +43,7 @@ def send_sms_notifications(**kwargs):


@shared_task(bind=True)
def send_discord_notifications(**kwargs):
# send_via_discord(**kwargs)
pass
def send_discord_notifications(self, *args, **kwargs):
user_id = kwargs.get("user_id")
user_message = kwargs.get("user_message")
send_via_discord(user_id, user_message)
58 changes: 38 additions & 20 deletions AHC_app/AHC_app/celery_notifications/cron.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@

from django.db.models import Q, QuerySet
from django.utils import timezone
from django_cron import CronJobBase, Schedule
from medical_notes.models.type_feeding_notes import EmailNotification

from AHC_app.celery_notifications.config import send_email_notifications
from AHC_app.celery_notifications.config import (
send_discord_notifications,
send_email_notifications,
)
from AHC_app.celery_notifications.utils.example_task import send_mail_fnc

logger = logging.getLogger("crons_logger")
Expand Down Expand Up @@ -138,21 +140,37 @@ def send_sms():

@log_exceptions_and_notifications
def send_discord_notes():
pass


class SynchNotificationsCron(CronJobBase):
RUN_EVERY_MINS = 60

schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
code = "AHC_app.SynchNotificationsCronJob"

run_at_times = ["55"]

@staticmethod
def cron_send_emails():
from icecream import ic

ic()

send_emails()
# notifications_to_send = get_notifications_to_send()
#
# if not notifications_to_send:
# return None

user_id: int = 422570242275934219
# user_id: int = 530756049913905172
user_message = "Test message"
delay: int = 0

send_discord_notifications.apply_async(kwargs={"user_id": user_id, "user_message": user_message}, countdown=delay)


# class SynchNotificationsCron(CronJobBase):
# RUN_EVERY_MINS = 60
#
# schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
# code = "AHC_app.SynchNotificationsCronJob"
#
# # run_at_times = ["55"]
#
# @staticmethod
# def cron_send_emails():
# from icecream import ic
# ic()
#
# send_emails()
#
# @staticmethod
# def cron_send_discord():
# from icecream import ic
# ic()
#
# send_discord_notes()
33 changes: 33 additions & 0 deletions AHC_app/AHC_app/celery_notifications/utils/discord_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import asyncio

from discord import Client, Intents
from discord.ext import commands
from django.conf import settings

TOKEN = settings.DISCORD_TOKEN


def send_via_discord(user_id: int, user_message: str) -> None:
def init_bot() -> Client:
intents = Intents.default()
intents.members = True
intents.message_content = True

# discord_client = Client(intents=intents)
discord_client = commands.Bot(command_prefix="!", intents=intents)

return discord_client

client = init_bot()

@client.event
async def on_ready():
for guild in client.guilds:
user = guild.get_member(user_id)
if user:
await user.send(user_message)

await asyncio.sleep(2)
await client.close()

client.run(TOKEN)
74 changes: 40 additions & 34 deletions AHC_app/AHC_app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@
https://docs.djangoproject.com/en/4.2/ref/settings/
"""
import os
import sys

from pathlib import Path

from decouple import config
import pycouchdb

# from ibmcloudant.cloudant_v1 import CloudantV1
from decouple import config

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Expand Down Expand Up @@ -95,36 +96,39 @@
# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases

DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": config("DB_NAME"),
"USER": config("DB_USER"),
"PASSWORD": config("DB_PASSWORD"),
"HOST": config("DB_HOST"),
"PORT": config("DB_PORT", default="5432"),
if "test" in sys.argv:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "mydatabase",
}
}
else:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": config("DB_NAME"),
"USER": config("DB_USER"),
"PASSWORD": config("DB_PASSWORD"),
"HOST": config("DB_HOST"),
"PORT": config("DB_PORT", default="5432"),
}
}
}

# COUCH_CONNECTOR = (config("COUCH_CONNECTOR"),)

COUCHDB_USER = config("COUCHDB_USER")
COUCHDB_PASSWORD = config("COUCHDB_PASSWORD")
# COUCHDB_URL = f'http://{COUCHDB_USER}:{COUCHDB_PASSWORD}@localhost:5984'
# COUCHDB_DATABASE_NAME = 'your_database_name' # Dostosuj nazwę bazy danych
#
# client = Cloudant(COUCHDB_USER, COUCHDB_PASSWORD, url=COUCHDB_URL)
# client.connect()
#
# COUCHDB_ATTACHMENTS_DATABASES = {
# 'default': {
# 'ENGINE': 'django_couchdb.backends.Cloudant',
# 'NAME': COUCHDB_DATABASE_NAME,
# 'USER': COUCHDB_USER,
# 'PASSWORD': COUCHDB_PASSWORD,
# 'URL': COUCHDB_URL,
# },
# }
if "test" not in sys.argv:

COUCHDB_USER = config("COUCHDB_USER")
COUCHDB_PASSWORD = config("COUCHDB_PASSWORD")
COUCHDB_PORT = config("COUCHDB_PORT")

COUCH_SERVER = pycouchdb.Server(
f"http://{COUCHDB_USER}:{COUCHDB_PASSWORD}@appendixes-db:{COUCHDB_PORT}/", authmethod="basic"
)
COUCH_DB = COUCH_SERVER.database("appendixes")

COUCH_DB_LIMIT_PER_NOTE = 5


# Password validation
Expand Down Expand Up @@ -155,9 +159,7 @@
LANGUAGE_CODE = "en-us"

TIME_ZONE = "Europe/Warsaw"

USE_I18N = True

USE_TZ = True


Expand Down Expand Up @@ -201,10 +203,10 @@


CRONJOBS = [
("*/4 * * * *", "AHC_app.celery_notifications.cron.send_emails"),
("*/2 * * * *", "AHC_app.celery_notifications.cron.send_email_example"),
# ('2 * * * *', 'AHC_app.celery_notifications.cron:send_emails'),
("4 * * * *", "AHC_app.celery_notifications.cron.send_sms"),
# ("*/4 * * * *", "AHC_app.celery_notifications.cron.send_emails"),
# ("*/2 * * * *", "AHC_app.celery_notifications.cron.send_email_example"),
# # ('2 * * * *', 'AHC_app.celery_notifications.cron:send_emails'),
# ("4 * * * *", "AHC_app.celery_notifications.cron.send_sms"),
("6 * * * *", "AHC_app.celery_notifications.cron.send_discord_notes"),
]

Expand All @@ -222,3 +224,7 @@
EMAIL_USE_TLS = config("EMAIL_USE_TLS", default=False, cast=bool)
EMAIL_HOST_USER = config("EMAIL_HOST_USER")
EMAIL_HOST_PASSWORD = config("EMAIL_HOST_PASSWORD")

DISCORD_TOKEN = config("DISCORD_TOKEN")

TEST_RUNNER = "django.test.runner.DiscoverRunner"
3 changes: 1 addition & 2 deletions AHC_app/AHC_app/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import include, path
from django.views.generic.base import RedirectView

Expand All @@ -29,6 +28,6 @@
path("note/", include("medical_notes.urls")),
path(
"favicon.ico",
RedirectView.as_view(url=staticfiles_storage.url("media/icons/chinchilla.png")),
RedirectView.as_view(url=static("media/icons/chinchilla.png")),
),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
2 changes: 1 addition & 1 deletion AHC_app/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.11.3
FROM python:3.12
LABEL authors="AM"
WORKDIR /app
COPY Pipfile Pipfile.lock ./
Expand Down
Loading