Yuvipanda has submitted this change and it was merged. Change subject: labspuppetbackend: Use _ to denote empty ......................................................................
labspuppetbackend: Use _ to denote empty Empty URL segments are not generally supported, and _ is an invalid character in DNS! This makes it much easier to use from client libraries Change-Id: I40534bbf734bb414ecd20047fce5e82f5738e6ce --- M modules/labspuppetbackend/files/labspuppetbackend.py 1 file changed, 19 insertions(+), 1 deletion(-) Approvals: Andrew Bogott: Looks good to me, but someone else must approve Yuvipanda: Verified; Looks good to me, approved diff --git a/modules/labspuppetbackend/files/labspuppetbackend.py b/modules/labspuppetbackend/files/labspuppetbackend.py index edab32b..c55758d 100644 --- a/modules/labspuppetbackend/files/labspuppetbackend.py +++ b/modules/labspuppetbackend/files/labspuppetbackend.py @@ -9,6 +9,19 @@ app.config['PROPAGATE_EXCEPTIONS'] = True +def _preprocess_prefix(prefix): + """ + Preprocess prefixes to provide some convenience features + + - Take a single _ to mean empty. The empty prefix applies to all + instances in a project, and this makes it easier than trying + to have an empty url segment + """ + if prefix == '_': + return '' + return prefix + + @app.before_request def before_request(): g.db = pymysql.connect( @@ -29,6 +42,7 @@ @statsd.timer('get_roles') @app.route('/v1/<string:project>/prefix/<string:prefix>/roles', methods=['GET']) def get_roles(project, prefix): + prefix = _preprocess_prefix(prefix) cur = g.db.cursor() try: cur.execute(""" @@ -55,6 +69,7 @@ @statsd.timer('set_roles') @app.route('/v1/<string:project>/prefix/<string:prefix>/roles', methods=['POST']) def set_roles(project, prefix): + prefix = _preprocess_prefix(prefix) try: roles = yaml.safe_load(request.data) except yaml.YAMLError: @@ -109,6 +124,7 @@ @statsd.timer('get_hiera') @app.route('/v1/<string:project>/prefix/<string:prefix>/hiera', methods=['GET']) def get_hiera(project, prefix): + prefix = _preprocess_prefix(prefix) cur = g.db.cursor() try: cur.execute(""" @@ -135,6 +151,7 @@ @statsd.timer('set_hiera') @app.route('/v1/<string:project>/prefix/<string:prefix>/hiera', methods=['POST']) def set_hiera(project, prefix): + prefix = _preprocess_prefix(prefix) try: hiera = yaml.safe_load(request.data) except yaml.YAMLError: @@ -231,8 +248,9 @@ cur.execute(""" SELECT prefix FROM prefix WHERE project = %s """, (project, )) + # Do the inverse of _preprocess_prefix, so callers get a consistent view return Response( - yaml.safe_dump({'prefixes': [r[0] for r in cur.fetchall()]}), + yaml.safe_dump({'prefixes': ['_' if r[0] == '' else r[0] for r in cur.fetchall()]}), status=200, mimetype='application/x-yaml' ) -- To view, visit https://gerrit.wikimedia.org/r/310363 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I40534bbf734bb414ecd20047fce5e82f5738e6ce Gerrit-PatchSet: 2 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Yuvipanda <yuvipa...@wikimedia.org> Gerrit-Reviewer: Andrew Bogott <abog...@wikimedia.org> Gerrit-Reviewer: Volans <rcocci...@wikimedia.org> Gerrit-Reviewer: Yuvipanda <yuvipa...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits