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

Reply via email to