Skip to content

Commit

Permalink
Merge pull request #64 from ElemarJR/average_ticket
Browse files Browse the repository at this point in the history
Major backend files structure change.
  • Loading branch information
dopic authored Dec 9, 2024
2 parents c02fd63 + 8d21821 commit 656a7f1
Show file tree
Hide file tree
Showing 104 changed files with 382 additions and 222 deletions.
41 changes: 30 additions & 11 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
FROM python:3.12-slim
FROM python:3.11-slim

WORKDIR /code
WORKDIR /app

COPY ./requirements.txt /code/requirements.txt
RUN apt-get update && apt-get install -y \
gcc \
python3-dev \
&& rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir --upgrade -r ./requirements.txt
COPY api/requirements.txt ./api/
COPY shared/requirements.txt ./shared/
COPY utils/requirements.txt ./utils/
COPY models/requirements.txt ./models/

COPY . .
COPY ./src/api/schema.graphql ./api/schema.graphql
COPY ./src/api/schema/common.graphql ./api/schema/common.graphql
COPY ./src/api/domain/schema.graphql ./api/domain/schema.graphql
COPY ./src/api/datasets/schema.graphql ./api/datasets/schema.graphql
COPY ./src/api/analytics/schema.graphql ./api/analytics/schema.graphql
COPY api ./api
COPY shared ./shared
COPY utils ./utils
COPY models ./models

RUN pip install --no-cache-dir -r api/requirements.txt \
&& pip install --no-cache-dir -r shared/requirements.txt \
&& pip install --no-cache-dir -r utils/requirements.txt \
&& pip install --no-cache-dir -r models/requirements.txt

RUN pip install -e ./shared \
&& pip install -e ./utils \
&& pip install -e ./models \
&& pip install -e ./api

ENV PYTHONPATH=/app
ENV FLASK_APP=/app/api/src/app.py

EXPOSE 5001

CMD ["python", "src/app.py"]
WORKDIR /app/api/src

CMD ["python", "app.py"]

RUN mkdir /.cache && chmod 777 /.cache
20 changes: 20 additions & 0 deletions backend/api/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
requests
Flask
Flask-CORS
flask_httpauth
ariadne
elasticsearch

google-auth
pytest
pytest-cov
pytest-mock
pytest-parametrize

pydantic
pytz
bokeh
python-dotenv
validators
pandas
jwt
13 changes: 13 additions & 0 deletions backend/api/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from setuptools import setup, find_namespace_packages

setup(
name="omni-api",
version="0.1",
packages=find_namespace_packages(where="src"),
package_dir={"": "src"},
install_requires=[
"omni-shared",
"omni-utils",
"omni-models"
],
)
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from models.analytics import compute_approved_vs_actual
from omni_models.analytics import compute_approved_vs_actual

def resolve_approved_vs_actual(_, info, start, end):
return compute_approved_vs_actual(start, end)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from models.analytics.forecast import compute_forecast
from omni_models.analytics.forecast import compute_forecast

def resolve_forecast(_, info, date_of_interest = None, filters = None):
return compute_forecast(date_of_interest, filters)
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from datetime import datetime
import models.analytics.performance_analysis
from models.analytics.performance_analysis import PerformanceAnalysis, TotalsPreContracted, TotalsRegular
import omni_models.analytics.performance_analysis
from omni_models.analytics.performance_analysis import PerformanceAnalysis, TotalsPreContracted, TotalsRegular

def resolve_performance_analysis(_, info, date_of_interest: str | datetime):
return models.analytics.performance_analysis.compute_performance_analysis(date_of_interest)
return omni_models.analytics.performance_analysis.compute_performance_analysis(date_of_interest)

def resolve_performance_analysis_pivoted(performance_analysis: PerformanceAnalysis, info):
return {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from datetime import datetime, date
from models.analytics.revenue_tracking import compute_revenue_tracking
from omni_models.analytics.revenue_tracking import compute_revenue_tracking

def resolve_revenue_tracking(
root, info,
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from models.analytics import compute_timeliness_review
from omni_models.analytics import compute_timeliness_review

def resolve_timeliness_review(_, info, date_of_interest, filters=None):
return compute_timeliness_review(date_of_interest, filters)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from models.analytics import week_review
from omni_models.analytics import week_review

def resolve_week_review(_, info, date_of_interest, filters=None):
return week_review.compute_week_review(date_of_interest, filters)
Expand Down
20 changes: 14 additions & 6 deletions backend/src/app.py → backend/api/src/app.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
import sys
from pathlib import Path

sys.path.append(Path(__file__).parent.parent.parent)

from flask import Flask, request, jsonify
from flask_cors import CORS
from ariadne import load_schema_from_path, make_executable_schema, graphql_sync, snake_case_fallback_resolvers
Expand All @@ -6,17 +11,20 @@
from google.oauth2 import id_token
from google.auth.transport import requests
from functools import wraps
from settings import auth_settings
from settings import graphql_settings

from api.queries import query_types, type_defs
from api.mutations import mutation
from omni_shared.settings import auth_settings
from omni_shared.settings import graphql_settings


import logging
import argparse
import sys
from api.execution_stats import ExecutionStatsExtension

import globals
from queries import query_types, type_defs
from mutations import mutation
from execution_stats import ExecutionStatsExtension

from omni_shared import globals


def verify_token(token):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from .datasets_set import resolve_this_week
from .datasets import resolve_datasets
from .ontology import resolve_ontology

def setup_query_for_datasets(query: QueryType):
query.set_field("timesheet", resolve_timesheet)
query.set_field("thisWeek", resolve_this_week)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import globals
from omni_shared import globals


def resolve_datasets(_, info, kind: str = None):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .timesheets import resolve_timesheet

from api.utils.fields import get_selections_from_info
from utils.fields import get_selections_from_info

from typing import Any, Dict, List
from graphql import GraphQLResolveInfo
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import pandas as pd
from typing import Dict, Any, List
from api.utils.fields import get_requested_fields_from
from utils.fields import get_requested_fields_from

import globals
from omni_shared import globals


def summarize(df: pd.DataFrame) -> Dict[str, Any]:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import pandas as pd
from typing import Dict, Any, List, Union
from api.utils.fields import get_requested_fields_from
from utils.fields import get_requested_fields_from

import globals
from omni_shared import globals


def summarize(df: pd.DataFrame) -> Dict[str, Any]:
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

from graphql import GraphQLResolveInfo

from api.utils.fields import build_fields_map, get_requested_fields_from, get_selections_from_info
from models.helpers.slug import slugify
from utils.fields import build_fields_map, get_requested_fields_from, get_selections_from_info
from omni_utils.helpers.slug import slugify

import globals
from omni_shared import globals


def summarize(df: pd.DataFrame) -> Dict[str, Any]:
Expand Down Expand Up @@ -152,7 +152,7 @@ def summarize_by_group(df: pd.DataFrame, group_column: str, name_key: str = "nam
summary['by_week'] = summarize_by_week(group_df, map['byWeek']) if map and 'byWeek' in map else None

if group_column == 'CaseTitle' and 'caseDetails' in map:
from api.domain.cases import build_case_dictionary
from domain.cases import build_case_dictionary

details_obj = globals.omni_models.cases.get_by_title(group_value)
if details_obj:
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from api.datasets.timesheets import compute_timesheet
from api.domain.cases import compute_cases
from api.domain.active_deals import compute_active_deals
from datasets.timesheets import compute_timesheet

from api.utils.fields import build_fields_map
from domain.cases import compute_cases
from domain.active_deals import compute_active_deals
from utils.fields import build_fields_map

from models.analytics.forecast import compute_forecast
from models.domain import WorkerKind
import globals
from omni_models.analytics.forecast import compute_forecast
from omni_models.domain import WorkerKind
from omni_shared import globals


def resolve_account_managers(_, info):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import globals
from omni_shared import globals


def resolve_active_deals(_, info, account_manager_slug=None, account_manager_name=None):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from api.utils.fields import build_fields_map
from api.datasets.timesheets import compute_timesheet
from models.analytics.forecast import compute_forecast
import globals
from utils.fields import build_fields_map
from datasets.timesheets import compute_timesheet
from omni_models.analytics.forecast import compute_forecast
from omni_shared import globals


def resolve_cases(_, info, only_actives: bool = False):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from api.datasets.timesheets import compute_timesheet
from api.utils.fields import build_fields_map
from models.analytics.forecast import compute_forecast
import globals
from datasets.timesheets import compute_timesheet
from utils.fields import build_fields_map
from omni_models.analytics.forecast import compute_forecast
from omni_shared import globals

from ariadne import ObjectType

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from datetime import datetime
from api.datasets.timesheets import compute_timesheet
from api.domain.cases import compute_cases
from api.utils.fields import build_fields_map
from models.analytics.timeliness_review import compute_timeliness_review
from models.domain import WorkerKind
import globals
from datasets.timesheets import compute_timesheet
from domain.cases import compute_cases
from utils.fields import build_fields_map
from omni_models.analytics.timeliness_review import compute_timeliness_review
from omni_models.domain import WorkerKind

from omni_shared import globals

def resolve_consultants_and_engineers(_, info):
all_workers = sorted(globals.omni_models.workers.get_all().values(), key=lambda worker: worker.name)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import globals
from omni_shared import globals


def resolve_offers(_, info):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import globals
from omni_shared import globals


def resolve_projects(_, info):
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from api.datasets.timesheets import compute_timesheet
from models.analytics.forecast import compute_forecast
import globals
from api.utils.fields import build_fields_map, get_requested_fields_from
from datasets.timesheets import compute_timesheet
from omni_models.analytics.forecast import compute_forecast
from omni_shared import globals
from utils.fields import build_fields_map, get_requested_fields_from

def _add_client(original):
result = dict(original)
Expand Down Expand Up @@ -49,11 +49,13 @@ def resolve_sponsor_timesheet(sponsor, info, slug, filters=None):
def resolve_sponsor_forecast(sponsor, info, date_of_interest=None, filters=None):
if filters is None:
filters = []

sponsor_name = sponsor["name"] if isinstance(sponsor, dict) else sponsor.name

sponsor_filters = [
{
'field': 'Sponsor',
'selected_values': [sponsor["name"]]
'selected_values': [sponsor_name]
}
] + filters

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from models.domain import WorkerKind
import globals
from omni_models.domain import WorkerKind
from omni_shared import globals


def resolve_user(_, info, email=None, slug=None):
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from datetime import datetime
import globals
from omni_shared import globals


class Inconsistency:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from ariadne import MutationType
import globals
from omni_shared import globals

mutation = MutationType()

Expand Down
21 changes: 12 additions & 9 deletions backend/src/api/queries.py → backend/api/src/queries.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
from ariadne import QueryType, gql
from pathlib import Path

from api.domain import setup_query_for_domain
from api.datasets import setup_query_for_datasets
from api.analytics import setup_query_for_analytics
from api.inconsistencies import resolve_inconsistencies
from domain import setup_query_for_domain
from datasets import setup_query_for_datasets
from analytics import setup_query_for_analytics
from inconsistencies import resolve_inconsistencies


BASE_DIR = Path(__file__).parent

def load_schema():
schema_files = [
"api/schema/common.graphql",
"api/domain/schema.graphql",
"api/datasets/schema.graphql",
"api/analytics/schema.graphql",
"api/schema.graphql",
BASE_DIR / "schema/common.graphql",
BASE_DIR / "domain/schema.graphql",
BASE_DIR / "datasets/schema.graphql",
BASE_DIR / "analytics/schema.graphql",
BASE_DIR / "schema.graphql",
]
schemas = []
for file in schema_files:
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 656a7f1

Please sign in to comment.