Skip to content

Commit

Permalink
Merge branch 'master' into use_classes_for_queries_and_filters
Browse files Browse the repository at this point in the history
  • Loading branch information
keiranjprice101 committed Aug 8, 2019
2 parents 3728d89 + 22bfd1e commit 70844ce
Show file tree
Hide file tree
Showing 46 changed files with 6,016 additions and 25 deletions.
27 changes: 12 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,7 @@ The required python libraries:
- [requests](https://2.python-requests.org/en/master/)

## Setup and running the API
The database connection needs to be set up first, currently it is set in `common/constants.py`

```python
class Constants:
DATABASE_URL = "mysql+pymysql://root:rootpw@localhost:13306/icatdb"
```
The database connection needs to be set up first. This is set in config.json


To run the API from the command line, the enviroment variable `FLASK_APP` should be set to `src/main.py`. Once this is
Expand Down Expand Up @@ -83,15 +78,17 @@ This is illustrated below.
│ ├── swagger
│ │ └── openapi.yaml
│ └── main.py
└── test
├── resources
│ ├── entities
│ │ └──test_<entity>.py
│ └── non_entities
│ └── test_<non_entity>.py
└── test_base
├── constants.py
└── rest_test.py
├── test
│ ├── resources
│ │ ├── entities
│ │ │ └──test_<entity>.py
│ │ └── non_entities
│ │ └── test_<non_entity>.py
│ └── test_base
│ ├── constants.py
│ └── rest_test.py
├── logs.log
└── config.json
`````
#### Main:
The main entry point is in `/src/main.py`. This is where each endpoint route is defined and its
Expand Down
36 changes: 36 additions & 0 deletions common/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import json
import sys


class Config(object):

def __init__(self):
with open("../config.json") as target:
self.config = json.load(target)
target.close()

def get_db_url(self):
try:
return self.config["DB_URL"]
except:
sys.exit("Missing config value, DB_URL")

def get_log_level(self):
try:
return self.config["log_level"]
except:
sys.exit("Missing config value, log_level")

def is_debug_mode(self):
try:
return self.config["debug_mode"]
except:
sys.exit("Missing config value, debug_mode")

def is_generate_swagger(self):
try:
return self.config["generate_swagger"]
except:
sys.exit("Missing config value, generate_swagger")

config = Config()
5 changes: 4 additions & 1 deletion common/constants.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
from common.config import config


class Constants:
DATABASE_URL = "mysql+pymysql://root:rootpw@localhost:13306/icatdb"
DATABASE_URL = config.get_db_url()
6 changes: 3 additions & 3 deletions common/logger_setup.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging.config

from common.config import config

log_level = "DEBUG"
LOG_FILE_NAME = "../logs.log"
Expand All @@ -9,15 +9,15 @@
"format": "[%(asctime)s] {%(module)s:%(filename)s:%(funcName)s:%(lineno)d} %(levelname)s -%(message)s ",
}},
"handlers": {"default": {
"level": "DEBUG",
"level": config.get_log_level(),
"formatter": "default",
"class": "logging.handlers.RotatingFileHandler",
"filename": LOG_FILE_NAME,
"maxBytes": 5000000,
"backupCount": 10
}},
"root": {
"level": log_level,
"level": config.get_log_level(),
"handlers": ["default"]
}
}
Expand Down
10 changes: 10 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"DB_URL": "mysql+pymysql://root:rootpw@localhost:13306/icatdb",
"log_level": "WARN",
"debug_mode": false,
"generate_swagger": false
}




10 changes: 10 additions & 0 deletions config.json.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"DB_URL": "mysql+pymysql://root:rootpw@localhost:13306/icatdb",
"log_level": "WARN",
"debug_mode": false,
"generate_swagger": false
}




13 changes: 7 additions & 6 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from flask import Flask
from flask_restful import Api

from common.config import config
from common.logger_setup import setup_logger
from src.resources.entities.dataset_type_endpoints import *
from src.resources.entities.applications_endpoints import *
from src.resources.entities.datacollection_datafiles_endpoints import *
from src.resources.entities.datacollection_datasets_endpoints import *
Expand All @@ -11,6 +11,7 @@
from src.resources.entities.datafile_formats_endpoints import *
from src.resources.entities.datafile_parameters_endpoints import *
from src.resources.entities.datafiles_endpoints import *
from src.resources.entities.dataset_type_endpoints import *
from src.resources.entities.datasets_endpoints import *
from src.resources.entities.facilities_endpoints import *
from src.resources.entities.facility_cycles_endpoints import *
Expand All @@ -34,18 +35,19 @@
from src.resources.entities.sample_parameters_endpoints import *
from src.resources.entities.sample_types_endpoints import *
from src.resources.entities.samples_endpoints import *
from src.resources.non_entities.sessions_endpoints import *
from src.resources.entities.shifts_endpoints import *
from src.resources.entities.studies_endpoints import *
from src.resources.entities.study_investigations_endpoints import *
from src.resources.entities.user_groups_endpoints import *
from src.resources.entities.users_endpoints import *
from src.resources.non_entities.sessions_endpoints import *
from src.swagger.swagger_generator import swagger_gen

swagger_gen.write_swagger_spec()

app = Flask(__name__)
api = Api(app)


setup_logger()

api.add_resource(Applications, "/applications")
Expand All @@ -68,7 +70,7 @@
api.add_resource(DataCollectionParametersWithID, "/datacollectionparameters/<string:id>")
api.add_resource(DataCollectionParametersCount, "/datacollectionparameters/count")
api.add_resource(DataCollectionParametersFindOne, "/datacollectionparameters/findOne")
api.add_resource(Datafiles,"/datafiles")
api.add_resource(Datafiles, "/datafiles")
api.add_resource(DatafilesWithID, "/datafiles/<string:id>")
api.add_resource(DatafilesFindOne, "/datafiles/findOne")
api.add_resource(DatafilesCount, "/datafiles/count")
Expand Down Expand Up @@ -198,6 +200,5 @@
api.add_resource(UserGroupsCount, "/usergroups/count")
api.add_resource(UserGroupsFindOne, "/usergroups/findOne")


if __name__ == "__main__":
app.run(debug=True)
app.run(debug=config.is_debug_mode())
2 changes: 2 additions & 0 deletions src/resources/entities/applications_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
from common.database_helpers import get_row_by_id, delete_row_by_id, update_row_from_id, get_rows_by_filter, \
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class Applications(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datacollection_datafiles_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATACOLLECTIONDATAFILE
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DataCollectionDatafiles(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datacollection_datasets_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATACOLLECTIONDATASET
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DataCollectionDatasets(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datacollection_parameters_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATACOLLECTIONPARAMETER
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DataCollectionParameters(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datacollections_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATACOLLECTION
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DataCollections(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datafile_formats_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATAFILEFORMAT
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DatafileFormats(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datafile_parameters_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATAFILEPARAMETER
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DatafileParameters(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datafiles_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATAFILE
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class Datafiles(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/dataset_type_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATASETTYPE
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class DatasetTypes(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/datasets_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import DATASET
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class Datasets(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/facilities_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import FACILITY
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class Facilities(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/facility_cycles_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import FACILITYCYCLE
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class FacilityCycles(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/groupings_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import GROUPING
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class Groupings(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/instrument_scientists_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import INSTRUMENTSCIENTIST
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class InstrumentScientists(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/instruments_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import INSTRUMENT
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class Instruments(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/investigation_groups_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import INVESTIGATIONGROUP
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class InvestigationGroups(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/investigation_instruments_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import INVESTIGATIONINSTRUMENT
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class InvestigationInstruments(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/investigation_parameters_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import INVESTIGATIONPARAMETER
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class InvestigationParameters(Resource):
@requires_session_id
@queries_records
Expand Down
2 changes: 2 additions & 0 deletions src/resources/entities/investigation_types_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
get_filtered_row_count, get_first_filtered_row, create_row_from_json, patch_entities
from common.helpers import requires_session_id, queries_records, get_filters_from_query_string
from common.models.db_models import INVESTIGATIONTYPE
from src.swagger.swagger_generator import swagger_gen


@swagger_gen.resource_wrapper()
class InvestigationTypes(Resource):
@requires_session_id
@queries_records
Expand Down
Loading

0 comments on commit 70844ce

Please sign in to comment.