feat(DockerTestBrock): merging for the use of testing

This commit is contained in:
darkicewolf50 2024-11-26 20:41:42 +00:00
commit 8f59972e19
33 changed files with 373 additions and 7 deletions

17
Docker Test/Dockerfile Normal file
View File

@ -0,0 +1,17 @@
# Use an official Python runtime as a parent image
FROM python:3.10-slim
# Set the working directory inside the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY ./mock /app
# Install any necessary dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Expose port 8080 for the container to listen on
EXPOSE 8080
# Command to run the Python server when the container starts
CMD ["python", "server.py"]

View File

@ -0,0 +1,10 @@
services:
test-http-container:
container_name: test-http-container
ports:
- 8080:8080
volumes:
- ./mock:/app
build: .
# networks:
# - testnet

View File

View File

@ -0,0 +1,49 @@
import json
import signal
import sys
from http.server import BaseHTTPRequestHandler, HTTPServer
from django.http import HttpResponse
# Function to generate the response
def send_funct():
ymlschedule = {"message": False}
to_send = {
"statusCode": 200,
"isBase64ENcoded": "false",
"body": json.dumps(ymlschedule)
}
return json.dumps(to_send)
# Define request handler
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# Send response headers
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
# Send the response body (the JSON data)
self.wfile.write(send_funct().encode('utf-8'))
# Graceful shutdown handler
def signal_handler(sig, frame):
print("\nShutting down server gracefully...")
sys.exit(0)
# Set up and start the server
if __name__ == "__main__":
# Register signal handler for graceful shutdown (e.g., Ctrl+C)
signal.signal(signal.SIGINT, signal_handler)
# Set the server address (localhost) and port (8080)
server_address = ('', 8080)
httpd = HTTPServer(server_address, RequestHandler)
print("Server started on port 8080")
try:
# Start the server and listen for requests
httpd.serve_forever()
except KeyboardInterrupt:
# Server shutdown is handled in signal_handler
pass

42
ReadDB.py Normal file
View File

@ -0,0 +1,42 @@
import pandas as pd
import json
def ReadDatabase():
"""
Reads the Database
``REQUIRES``: None
``PROMISES``: JSON (Interview Avaiable Slots)
``Develop in part by``: Ahmad
``Contact``: ahmad.ahmad1@ucalgary.ca
"""
# Load the updated Excel file into a pandas DataFrame
excel_file_path = "./interview_database.xlsx"
df = pd.read_excel(excel_file_path)
# Initialize the dictionary to store the structured data
interview_data = {}
# Group the DataFrame by Date, Start Time, and Slot for organization
for _, row in df.iterrows():
date = str(row['Date'])
start_time = str(row['Start Time'])
slot = int(row['Slot']) if not pd.isna(row['Slot']) else 0
#Returns amount of interviewees in the slot and if it's empty it will return 0
interviewee_amount = len(str(row['Interviewee Name']).split()) if str(row['Interviewee Name']) != "nan" else 0
# Check if the slot is available for an interviewee to attend
avaliable_slots = interviewee_amount != slot
if avaliable_slots:
# Initialize nested structure if not present
if date not in interview_data:
interview_data[date] = {}
#Adds the start time and duration if not present
if start_time not in interview_data[date]:
interview_data[date][start_time] = {
'Meeting Duration': row['Meeting Duration'],
}
return interview_data

BIN
TestResultsCodeSpace.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

22
djangotutorial/manage.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()

View File

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,16 @@
"""
ASGI config for mysite project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_asgi_application()

View File

@ -0,0 +1,123 @@
"""
Django settings for mysite project.
Generated by 'django-admin startproject' using Django 5.1.3.
For more information on this file, see
https://docs.djangoproject.com/en/5.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.1/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-6&71dc8$=p0pg+5=7^_vk6_an^8o2mrr)gh1gs5#i56h)f2um6"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "mysite.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
WSGI_APPLICATION = "mysite.wsgi.application"
# Database
# https://docs.djangoproject.com/en/5.1/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
# Password validation
# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]
# Internationalization
# https://docs.djangoproject.com/en/5.1/topics/i18n/
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.1/howto/static-files/
STATIC_URL = "static/"
# Default primary key field type
# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

View File

@ -0,0 +1,24 @@
"""
URL configuration for mysite project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]

View File

@ -0,0 +1,16 @@
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()

View File

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class PollsConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "polls"

View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1,11 @@
import json
from django.http import HttpResponse
def index(request):
ymlschedule = {"message": False}
res = {
"statusCode": 200,
"isBase64ENcoded": "false",
"body": json.dumps(ymlschedule)
}
return HttpResponse(json.dumps(res))

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -0,0 +1,9 @@
from django.urls import path
from . import views
from . import newtest
urlpatterns = [
path("", views.index, name="index"),
path("test", newtest.index, name="index")
]

View File

@ -0,0 +1,8 @@
# from django.shortcuts import render
# # Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

BIN
interview_database.xlsx Normal file

Binary file not shown.

View File

@ -2,13 +2,17 @@ import json
import requests
import timeit
def BenchMark():
rawRes = requests.get("http://localhost:8080/getAppointments")
def BenchMarkServer():
rawRes = requests.get("http://localhost:8080")
res = json.loads(rawRes.text)
#print(json.dumps(res, indent=1))
def BenchMarkDjango():
rawRes = requests.get("http://localhost:8000/polls/test")
res = json.loads(rawRes.text)
#print(json.dumps(res, indent=1))
if __name__ == "__main__":
print(timeit.timeit(
stmt=BenchMark,
number=10))
djangoTime = timeit.timeit(stmt=BenchMarkDjango, number=10)
pythonTime = timeit.timeit(stmt=BenchMarkServer, number=10)
print(f"Django: {djangoTime}\nPython: {pythonTime}")