Skip to content

Commit

Permalink
✨ feat: add support for feature flags
Browse files Browse the repository at this point in the history
  • Loading branch information
megasanjay committed Dec 20, 2023
1 parent 396502a commit 388b97a
Show file tree
Hide file tree
Showing 28 changed files with 162 additions and 48 deletions.
4 changes: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ FAIRHUB_DATABASE_URL="postgresql://admin:root@localhost:5432/fairhub_local"
FAIRHUB_SECRET="AddAny32+CharacterCountWordHereAsYourSecret"

FAIRHUB_AZURE_READ_SAS_TOKEN=
FAIRHUB_AZURE_STORAGE_ACCOUNT_NAME=
FAIRHUB_AZURE_STORAGE_ACCOUNT_NAME=

FAIRHUB_GROWTHBOOK_CLIENT_KEY=
2 changes: 1 addition & 1 deletion apis/contributor.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from collections import OrderedDict
from typing import Any, Dict, List, Union

from flask import g, request, Response
from flask import Response, g, request
from flask_restx import Namespace, Resource, fields

import model
Expand Down
2 changes: 1 addition & 1 deletion apis/dataset.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Namespace, Resource, fields

import model
Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_alternate_identifier.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API endpoints for dataset alternate identifier"""
from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_contributor.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API for dataset contributor metadata"""
from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_date.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""APIs for dataset date metadata"""
from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_description.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_funder.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API endpoints for dataset funder"""
from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_related_item.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API for dataset related item"""
from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_rights.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_subject.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/dataset_metadata/dataset_title.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API for dataset title metadata"""
from typing import Any, Union

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""APIs for study operations""" ""
from typing import Any, Union

from flask import g, request, Response
from flask import Response, g, request
from flask_restx import Namespace, Resource, fields, reqparse
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_arm.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study arm metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_available_ipd.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study available ipd metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_contact.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import typing

from email_validator import EmailNotValidError, validate_email
from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import FormatChecker, ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_identification.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study identification metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_intervention.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study intervention metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_link.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study link metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_location.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study location metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_overall_official.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study overall official metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
2 changes: 1 addition & 1 deletion apis/study_metadata/study_reference.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""API routes for study reference metadata"""
import typing

from flask import request, Response
from flask import Response, request
from flask_restx import Resource, fields
from jsonschema import ValidationError, validate

Expand Down
21 changes: 18 additions & 3 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
from datetime import timezone

import jwt
from flask import Flask, request
from flask import Flask, g, request
from flask_bcrypt import Bcrypt
from flask_cors import CORS
from growthbook import GrowthBook
from sqlalchemy import MetaData
from waitress import serve

Expand Down Expand Up @@ -123,12 +124,27 @@ def on_before_request(): # pylint: disable = inconsistent-return-statements

try:
authentication()

authorization()

# create growthbook instance
g.gb = GrowthBook(
api_host="https://cdn.growthbook.io",
client_key=config.FAIRHUB_GROWTHBOOK_CLIENT_KEY,
)

# load feature flags
g.gb.load_features()

except UnauthenticatedException:
return "Authentication is required", 401

@app.after_request
def on_after_request(resp):
# destroy growthbook instance
if hasattr(g, "gb"):
g.gb.destroy()

public_routes = [
"/auth",
"/docs",
Expand All @@ -140,8 +156,7 @@ def on_after_request(resp):
for route in public_routes:
if request.path.startswith(route):
return resp
# print("after request")
# print(request.cookies.get("token"))

if "token" not in request.cookies:
return resp

Expand Down
2 changes: 2 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ def get_env(key):

FAIRHUB_AZURE_READ_SAS_TOKEN = get_env("FAIRHUB_AZURE_READ_SAS_TOKEN")
FAIRHUB_AZURE_STORAGE_ACCOUNT_NAME = get_env("FAIRHUB_AZURE_STORAGE_ACCOUNT_NAME")

FAIRHUB_GROWTHBOOK_CLIENT_KEY = get_env("FAIRHUB_GROWTHBOOK_CLIENT_KEY")
Loading

0 comments on commit 388b97a

Please sign in to comment.