core part of API
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
app = Flask("test_flaskon")

Helper Functions

open_json[source]

open_json(path:Path)

open_file[source]

open_file(path:Path)

mkdir[source]

mkdir(path:Path)

clean_up_string[source]

clean_up_string(x)

error_printer[source]

error_printer(e:Exception)

time_str[source]

time_str()

Directory management

class Directories[source]

Directories()

Flaskonf coref components

class FlaskonfAPI[source]

FlaskonfAPI(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None) :: Flask

create an flask app

app = FlaskonAPI("alpha_api")

assign address for directories full of json

app.build_on_config( confs_dir="../tests/confs/", examples_dir="../tests/examples/" )

create an api blueprint

with such blueprint, we can have an api for each configuration file

@app.conf_route("/guide/") def build_city_guide(conf_file: str, conf: Dict): logging.info(f"{conf}") def guide_api(data: Dict): user = data["user"] return {"city_data": conf, "user": user} return guide_api

run api

app.run('0.0.0.0', port=1234)

app = FlaskonfAPI("test_flaskonf")

Configuration directory

!ls ../tests/confs/
la.json       shanghai.json

Example directory

!ls ../tests/examples/guide_shanghai
eg_201229_180805.json eg_201229_182134.json print_all.json
eg_201229_181208.json eg_210506_125048.json
!cat ../tests/examples/guide_shanghai/print_all.json
{
    "user":"admin"
}
app.build_on_config(confs_dir="../tests/confs/",examples_dir="../tests/examples/" )

No build option

set nobuild=False you can build APIs with configuration in batch

@app.conf_route("/guide2/", nobuild=True)
def guide_api(inputs: Dict):
    data = inputs['data']
    conf = data["conf"]
    user = data["user"]
    return {"city_data2": conf, "user": user}

With Build

If you want to load huge things to memory according to configuration, eg. load different transfromers with configuration

@app.conf_route("/guide/")
def build_city_guide(conf_file: str, conf: Dict):
    logging.info(f"{conf}")
    # doing other things for building API here
    # like load huge model into memory with configuration
    def guide_api(inputs: Dict):
        data = inputs['data']
        user = data["user"]
        return {"city_data": conf, "user": user}
    return guide_api
app.build_flaskonf()
INFO:root:run config	la.json on route	/guide2/la/
INFO:root:run config	shanghai.json on route	/guide2/shanghai/
INFO:root:{'name': 'Los Angeles', 'country': 'United States', 'sites': ['universal studio', 'griffith observatory', 'union station']}
INFO:root:run config	la.json on route	/guide/la/
INFO:root:{'name': 'Shanghai', 'country': 'China', 'sites': ['french concession', 'xin tiandi', 'disney resort']}
INFO:root:run config	shanghai.json on route	/guide/shanghai/
app.run(host="0.0.0.0",port=9727)