Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 15 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,27 @@ https://www.jetbrains.com/help/pycharm/poetry.html
``` bash
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
```
### Create .env with own vars
### Create .sh with own vars

```
# .env
# env.sh

# Django Secret Key
SECRET_KEY=django-insecure-genkey
ROUTE_ENGINE_SECRET_KEY=django-insecure-genkey
export SECRET_KEY="django-insecure-genkey"
export ROUTE_ENGINE_SECRET_KEY="django-insecure-genkey"

LOGICWAY_URL=http://localhost:8000
ROUTE_ENGINE_URL=http://localhost:8001
# Route Engine URL
export LOGICWAY_URL="http://localhost:8000"
export ROUTE_ENGINE_URL="http://localhost:8001"

# PostgreSQL Database Settings
DB_NAME=logic_way_db
DB_USER=myuser
DB_PASSWORD=mypassword
DB_HOST=localhost
DB_PORT=5432
export DB_NAME="logic_way_db"
export DB_USER="myuser"
export DB_PASSWORD="mypassword"
export DB_HOST="localhost"
export DB_PORT="5432"

export REACT_APP_LOGICWAY_URL="$LOGICWAY_URL"
export REACT_APP_ROUTE_ENGINE_URL="$LOGICWAY_URL/routing/proxy_route_engine"
```

### Development and deployment with Docker Compose
Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"start": ". ../env.sh && react-scripts start",
"build": "react-scripts build",
"copy": "copyfiles -u 1 \"build/**/*\" \"../map/static/map/frontend\"",
"clean": "rimraf ../map/static/map/frontend",
Expand Down
14 changes: 7 additions & 7 deletions logicway/database/database.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv
import envsh
import os

load_dotenv()
envsh.load(search_paths=["../.."])

IS_BUILD_PHASE = os.environ.get('APP_BUILD_PHASE') == '1'
if not IS_BUILD_PHASE:
db_name = os.getenv('DB_NAME')
db_user = os.getenv('DB_USER')
db_password = os.getenv('DB_PASSWORD')
db_host = os.getenv('DB_HOST')
db_port = os.getenv('DB_PORT')
db_name = envsh.read_env('DB_NAME', str)
db_user = envsh.read_env('DB_USER', str)
db_password = envsh.read_env('DB_PASSWORD', str)
db_host = envsh.read_env('DB_HOST', str)
db_port = envsh.read_env('DB_PORT', int)

if not all([db_name, db_user, db_password, db_host, db_port]):
raise ValueError("Database configuration is not set in environment variables.")
Expand Down
15 changes: 7 additions & 8 deletions logicway/database/fetch_data_and_convert_to_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@
import json
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
from dotenv import load_dotenv
import envsh

envsh.load(search_paths=["../.."])

load_dotenv()

db_name = os.getenv('DB_NAME')
db_user = os.getenv('DB_USER')
db_password = os.getenv('DB_PASSWORD')
db_host = os.getenv('DB_HOST')
db_port = os.getenv('DB_PORT')
db_name = envsh.read_env('DB_NAME', str)
db_user = envsh.read_env('DB_USER', str)
db_password = envsh.read_env('DB_PASSWORD', str)
db_host = envsh.read_env('DB_HOST', str)
db_port = envsh.read_env('DB_PORT', int)

engine = create_engine(f"postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")

Expand Down
17 changes: 9 additions & 8 deletions logicway/database/load_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
from models import Base, Agency, Calendar, Routes, Shapes, Stops, StopTimes, Trips
from tqdm import tqdm
from datetime import datetime
from dotenv import load_dotenv

load_dotenv()
db_name = os.getenv('DB_NAME')
db_user = os.getenv('DB_USER')
db_password = os.getenv('DB_PASSWORD')
db_host = os.getenv('DB_HOST')
db_port = os.getenv('DB_PORT')
import envsh

envsh.load(search_paths=["../.."])

db_name = envsh.read_env('DB_NAME', str)
db_user = envsh.read_env('DB_USER', str)
db_password = envsh.read_env('DB_PASSWORD', str)
db_host = envsh.read_env('DB_HOST', str)
db_port = envsh.read_env('DB_PORT', int)

DATABASE_URL = f'postgresql+psycopg2://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}'
engine = create_engine(DATABASE_URL)
Expand Down
16 changes: 9 additions & 7 deletions logicway/database/tests/AJAX_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,21 @@
import django
from logicway.database.database import SessionLocal
from django.test import Client
from dotenv import load_dotenv
import envsh
from logicway.database.models import Stops, Routes

load_dotenv()
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logicway.logicway.settings')
envsh.load(search_paths=["../../.."])
os.environ['DJANGO_SETTINGS_MODULE'] = 'logicway.logicway.settings.dev'
django.setup()

host = envsh.read_env('LOGICWAY_URL', str)

@pytest.fixture
def client():
return Client()

def test_get_stops_api(client):
url = '/api/stops/'
url = f'{host}/api/stops/'
response = client.get(url)

assert response.status_code == 200, f"Expected status code 200, got {response.status_code}"
Expand All @@ -41,14 +43,14 @@ def test_get_stop_api(client):
if not part or part == '':
#print(f"Skipping part with empty name: {part}")
continue
url = f'http://127.0.0.1:8000/api/stop/{part}/'
url = f'{host}/api/stop/{part}/'
response = client.get(url)

#print(url)
assert response.status_code == 200, f"Expected status code 200, got {response.status_code}"
assert len(response.content) > 0, "Response content is empty"
else:
url = f'http://127.0.0.1:8000/api/stop/{stop_name}/'
url = f'{host}/api/stop/{stop_name}/'
response = client.get(url)

#print(url)
Expand Down Expand Up @@ -86,7 +88,7 @@ def get_route_data(url):
direction_to_test = direction

for dir_index in direction_to_test:
url = f'http://127.0.0.1:8000/api/route/{route_id}/{dir_index}/'
url = f'{host}/api/route/{route_id}/{dir_index}/'
#print(f"Requesting URL: {url}")
get_route_data(url)

Expand Down
43 changes: 39 additions & 4 deletions logicway/database/tests/models_database_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
import datetime
import os
import django
from dotenv import load_dotenv
import envsh
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from logicway.database.models import Base, Agency, Calendar, Routes, Shapes, Stops, StopTimes, Trips
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logicway.logicway.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logicway.logicway.settings.dev')
django.setup()

load_dotenv()
envsh.load(search_paths=["../../.."])

DATABASE_URL = (
f"postgresql://{settings.DATABASES['default']['USER']}:"
Expand Down Expand Up @@ -137,12 +137,47 @@ def test_stop_times_model(db_session):


def test_trips_model(db_session):
agency = Agency(
agency_id="A1",
agency_name="Test Agency",
agency_url="http://test.com",
agency_timezone="UTC"
)
db_session.add(agency)

route = Routes(
route_id="R1",
agency_id="A1",
route_short_name="101",
route_long_name="Downtown",
route_type=1
)
db_session.add(route)

calendar = Calendar(
service_id="S1",
monday=True,
tuesday=True,
wednesday=True,
thursday=True,
friday=True,
saturday=False,
sunday=False,
start_date="2023-01-01",
end_date="2023-12-31"
)
db_session.add(calendar)
db_session.commit()

trip = Trips(
trip_id="Trip1",
route_id="R1",
service_id="S1",
trip_headsign="Northbound",
direction_id=1
direction_id=1,
shape_id=1,
wheelchair_accessible=1,
brigade=1,
)
db_session.add(trip)
db_session.commit()
Expand Down
19 changes: 9 additions & 10 deletions logicway/logicway/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,23 @@
"""
import sys
from pathlib import Path
import envsh
import os
from dotenv import load_dotenv
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
load_dotenv()
envsh.load(search_paths=["../../.."])

# 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 = os.getenv('SECRET_KEY')
SECRET_KEY = envsh.read_env('SECRET_KEY', str)

ALLOWED_HOSTS = [
'localhost',
'127.0.0.1',
'0.0.0.0',
'logicway',
'192.168.49.2',
'logicway'
]

# Application definition
Expand Down Expand Up @@ -93,11 +92,11 @@
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': os.getenv('DB_PORT'),
'NAME': envsh.read_env('DB_NAME', str),
'USER': envsh.read_env('DB_USER', str),
'PASSWORD': envsh.read_env('DB_PASSWORD', str),
'HOST': envsh.read_env('DB_HOST', str),
'PORT': envsh.read_env('DB_PORT', str),
}
}

Expand Down
19 changes: 7 additions & 12 deletions logicway/logicway/settings/prod.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,10 @@

DEBUG = False

if ALLOWED_HOSTS:
ALLOWED_HOSTS.append('.taile241c6.ts.net')
else:
ALLOWED_HOSTS = ['.taile241c6.ts.net']

CORS_ALLOWED_ORIGINS = [
"http://localhost:3000",
"http://127.0.0.1:3000",
"http://logicway.taile241c6.ts.net:3000",
"http://logicway-k8s.taile241c6.ts.net:3000",
"http://192.168.49.2:30000",
]
ALLOWED_HOSTS = [
'localhost',
'127.0.0.1',
'0.0.0.0',
'logicway',
'.taile241c6.ts.net'
]
6 changes: 3 additions & 3 deletions logicway/map/views.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from django.shortcuts import render
import os
from dotenv import load_dotenv
import envsh

load_dotenv()
ROUTE_ENGINE_URL = os.getenv('ROUTE_ENGINE_URL')
envsh.load(search_paths=["../.."])
ROUTE_ENGINE_URL = envsh.read_env('ROUTE_ENGINE_URL', str)

def map_with_stops_view(request):
return render(request, 'map/map.html',{
Expand Down
7 changes: 3 additions & 4 deletions logicway/routing/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from .simple_greedy_search import SimpleGreedySearch
import requests
import logging
from dotenv import load_dotenv
import envsh
import os

ALGORITHMS = {
Expand All @@ -12,10 +12,10 @@

logger = logging.getLogger(__name__)

load_dotenv()
envsh.load(search_paths=["../.."])

def proxy_route_engine(request: HttpRequest, path: str):
PROXY_TARGET_URL = f"{os.getenv('ROUTE_ENGINE_URL')}/{path.lstrip('/')}"
PROXY_TARGET_URL = f"{envsh.read_env('ROUTE_ENGINE_URL', str)}/{path.lstrip('/')}"
params = request.GET.copy()

headers_to_target = {}
Expand Down Expand Up @@ -75,7 +75,6 @@ def proxy_route_engine(request: HttpRequest, path: str):

def get_transit_route(request, algorithm):
try:
# Получаем параметры из запроса
start_lat = float(request.GET.get('start_lat'))
start_lon = float(request.GET.get('start_lon'))
end_lat = float(request.GET.get('end_lat'))
Expand Down
Loading