Skip to content

Commit

Permalink
use 'i:xx' for identifiers and 'n:xxx' for numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
djmitche committed Mar 12, 2013
1 parent ac57132 commit 17859e6
Show file tree
Hide file tree
Showing 12 changed files with 72 additions and 51 deletions.
6 changes: 3 additions & 3 deletions master/buildbot/data/builders.py
Expand Up @@ -19,8 +19,8 @@
class BuilderEndpoint(base.Endpoint):

pathPatterns = """
/builder/i:builderid
/master/i:masterid/builder/i:builderid
/builder/n:builderid
/master/n:masterid/builder/n:builderid
"""

@defer.inlineCallbacks
Expand All @@ -45,7 +45,7 @@ class BuildersEndpoint(base.Endpoint):
rootLinkName = 'builders'
pathPatterns = """
/builder
/master/i:masterid/builder
/master/n:masterid/builder
"""

@defer.inlineCallbacks
Expand Down
8 changes: 4 additions & 4 deletions master/buildbot/data/builds.py
Expand Up @@ -45,8 +45,8 @@ def db2data(self, dbdict):
class BuildEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = """
/build/i:buildid
/builder/i:builderid/build/i:number
/build/n:buildid
/builder/n:builderid/build/n:number
"""

@defer.inlineCallbacks
Expand All @@ -65,8 +65,8 @@ class BuildsEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = """
/build
/builder/i:builderid/build
/buildrequest/i:buildrequestid/build
/builder/n:builderid/build
/buildrequest/n:buildrequestid/build
"""
rootLinkName = 'builds'

Expand Down
2 changes: 1 addition & 1 deletion master/buildbot/data/buildsets.py
Expand Up @@ -50,7 +50,7 @@ def getSs(ssid):
class BuildsetEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = """
/buildset/i:bsid
/buildset/n:bsid
"""

def get(self, options, kwargs):
Expand Down
2 changes: 1 addition & 1 deletion master/buildbot/data/changes.py
Expand Up @@ -39,7 +39,7 @@ def _fixChange(self, change):
class ChangeEndpoint(FixerMixin, base.Endpoint):

pathPatterns = """
/change/i:changeid
/change/n:changeid
"""

def get(self, options, kwargs):
Expand Down
34 changes: 17 additions & 17 deletions master/buildbot/data/logs.py
Expand Up @@ -35,12 +35,12 @@ def db2data(self, dbdict):
class LogEndpoint(EndpointMixin, base.BuildNestingMixin, base.Endpoint):

pathPatterns = """
/log/i:logid
/step/i:stepid/log/s:log_name
/build/i:buildid/step/s:step_name/log/s:log_name
/build/i:buildid/step/number/i:step_number/log/s:log_name
/builder/i:builderid/build/i:build_number/step/s:step_name/log/s:log_name
/builder/i:builderid/build/i:build_number/step/number/i:step_number/log/s:log_name
/log/n:logid
/step/n:stepid/log/i:log_name
/build/n:buildid/step/i:step_name/log/i:log_name
/build/n:buildid/step/number/n:step_number/log/i:log_name
/builder/n:builderid/build/n:build_number/step/i:step_name/log/i:log_name
/builder/n:builderid/build/n:build_number/step/number/n:step_number/log/i:log_name
"""

@defer.inlineCallbacks
Expand All @@ -64,12 +64,12 @@ def get(self, options, kwargs):
class LogContentEndpoint(EndpointMixin, base.BuildNestingMixin, base.Endpoint):

pathPatterns = """
/log/i:logid/content
/step/i:stepid/log/s:log_name/content
/build/i:buildid/step/s:step_name/log/s:log_name/content
/build/i:buildid/step/number/i:step_number/log/s:log_name/content
/builder/i:builderid/build/i:build_number/step/s:step_name/log/s:log_name/content
/builder/i:builderid/build/i:build_number/step/number/i:step_number/log/s:log_name/content
/log/n:logid/content
/step/n:stepid/log/i:log_name/content
/build/n:buildid/step/i:step_name/log/i:log_name/content
/build/n:buildid/step/number/n:step_number/log/i:log_name/content
/builder/n:builderid/build/n:build_number/step/i:step_name/log/i:log_name/content
/builder/n:builderid/build/n:build_number/step/number/n:step_number/log/i:log_name/content
"""

@defer.inlineCallbacks
Expand Down Expand Up @@ -114,11 +114,11 @@ def get(self, options, kwargs):
class LogsEndpoint(EndpointMixin, base.BuildNestingMixin, base.Endpoint):

pathPatterns = """
/step/i:stepid/log
/build/i:buildid/step/s:step_name/log
/build/i:buildid/step/number/i:step_number/log
/builder/i:builderid/build/i:build_number/step/s:step_name/log
/builder/i:builderid/build/i:build_number/step/number/i:step_number/log
/step/n:stepid/log
/build/n:buildid/step/i:step_name/log
/build/n:buildid/step/number/n:step_number/log
/builder/n:builderid/build/n:build_number/step/i:step_name/log
/builder/n:builderid/build/n:build_number/step/number/n:step_number/log
"""

@defer.inlineCallbacks
Expand Down
6 changes: 3 additions & 3 deletions master/buildbot/data/masters.py
Expand Up @@ -31,8 +31,8 @@ def _db2data(master):
class MasterEndpoint(base.Endpoint):

pathPatterns = """
/master/i:masterid
/builder/i:builderid/master/i:masterid
/master/n:masterid
/builder/n:builderid/master/n:masterid
"""

@defer.inlineCallbacks
Expand All @@ -53,7 +53,7 @@ class MastersEndpoint(base.GetParamsCheckMixin, base.Endpoint):

pathPatterns = """
/master
/builder/i:builderid/master
/builder/n:builderid/master
"""
rootLinkName = 'masters'

Expand Down
6 changes: 3 additions & 3 deletions master/buildbot/data/schedulers.py
Expand Up @@ -36,8 +36,8 @@ def db2data(self, dbdict):
class SchedulerEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = """
/scheduler/i:schedulerid
/master/i:masterid/scheduler/i:schedulerid
/scheduler/n:schedulerid
/master/n:masterid/scheduler/n:schedulerid
"""

@defer.inlineCallbacks
Expand All @@ -55,7 +55,7 @@ class SchedulersEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = """
/scheduler
/master/i:masterid/scheduler
/master/n:masterid/scheduler
"""
rootLinkName = 'schedulers'

Expand Down
2 changes: 1 addition & 1 deletion master/buildbot/data/sourcestamps.py
Expand Up @@ -43,7 +43,7 @@ def _db2data(ss):
class SourceStampEndpoint(base.Endpoint):

pathPatterns = """
/sourcestamp/i:ssid
/sourcestamp/n:ssid
"""

@defer.inlineCallbacks
Expand Down
14 changes: 7 additions & 7 deletions master/buildbot/data/steps.py
Expand Up @@ -40,11 +40,11 @@ def db2data(self, dbdict):
class StepEndpoint(Db2DataMixin, base.BuildNestingMixin, base.Endpoint):

pathPatterns = """
/step/i:stepid
/build/i:buildid/step/s:name
/build/i:buildid/step/number/i:step_number
/builder/i:builderid/build/i:build_number/step/s:name
/builder/i:builderid/build/i:build_number/step/number/i:step_number
/step/n:stepid
/build/n:buildid/step/i:name
/build/n:buildid/step/number/n:step_number
/builder/n:builderid/build/n:build_number/step/i:name
/builder/n:builderid/build/n:build_number/step/number/n:step_number
"""

@defer.inlineCallbacks
Expand All @@ -68,8 +68,8 @@ def get(self, options, kwargs):
class StepsEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = """
/build/i:buildid/step
/builder/i:builderid/build/i:build_number/step
/build/n:buildid/step
/builder/n:builderid/build/n:build_number/step
"""

@defer.inlineCallbacks
Expand Down
8 changes: 4 additions & 4 deletions master/buildbot/test/unit/test_data_connector.py
Expand Up @@ -106,7 +106,7 @@ def patchFooPattern(self):
ep = cls(self.master)
ep.get = mock.Mock(name='MyEndpoint.get')
ep.get.return_value = defer.succeed(9999)
self.data.matcher[('foo', 'i:fooid', 'bar')] = ep
self.data.matcher[('foo', 'n:fooid', 'bar')] = ep
return ep

# tests
Expand Down Expand Up @@ -198,9 +198,9 @@ class TestsEndpointSubclass(TestsEndpointParentClass):

class TestEndpoint(base.Endpoint):
pathPatterns = """
/test/i:testid
/test/i:testid/p1
/test/i:testid/p2
/test/n:testid
/test/n:testid/p1
/test/n:testid/p2
"""

class TestResourceType(base.ResourceType):
Expand Down
23 changes: 19 additions & 4 deletions master/buildbot/test/unit/test_util_pathmatch.py
Expand Up @@ -45,15 +45,30 @@ def test_pattern_variables(self):
self.assertEqual(self.m[('A', 'a', 'B', 'b')],
('AB', dict(a='a', b='b')))

def test_pattern_variables_int(self):
self.m[('A', 'i:a', 'B', 'i:b')] = 'AB'
def test_pattern_variables_num(self):
self.m[('A', 'n:a', 'B', 'n:b')] = 'AB'
self.assertEqual(self.m[('A', '10', 'B', '-20')],
('AB', dict(a=10, b=-20)))

def test_pattern_variables_int_invalid(self):
self.m[('A', 'i:a')] = 'AB'
def test_pattern_variables_ident(self):
self.m[('A', 'i:a', 'B', 'i:b')] = 'AB'
self.assertEqual(self.m[('A', 'abc', 'B', 'x-z-B')],
('AB', dict(a='abc', b='x-z-B')))

def test_pattern_variables_num_invalid(self):
self.m[('A', 'n:a')] = 'AB'
self.assertRaises(KeyError, lambda : self.m[('A', '1x0')])

def test_pattern_variables_ident_invalid(self):
self.m[('A', 'i:a')] = 'AB'
self.assertRaises(KeyError, lambda : self.m[('A', '10')])

def test_pattern_variables_ident_num_distinguised(self):
self.m[('A', 'n:a')] = 'num'
self.m[('A', 'i:a')] = 'ident'
self.assertEqual(self.m[('A', '123')], ('num', dict(a=123)))
self.assertEqual(self.m[('A', 'abc')], ('ident', dict(a='abc')))

def test_prefix_matching(self):
self.m[('A', ':a')] = 'A'
self.m[('A', ':a', 'B', ':b')] = 'AB'
Expand Down
12 changes: 9 additions & 3 deletions master/buildbot/util/pathmatch.py
Expand Up @@ -15,6 +15,12 @@

import re

_ident_re = re.compile('^[a-zA-Z_-][a-zA-Z0-9_-]*$')
def ident(x):
if _ident_re.match(x):
return x
raise TypeError

class Matcher(object):

def __init__(self):
Expand All @@ -30,7 +36,7 @@ def __repr__(self):
return '<Matcher %r>' % (self._patterns,)

path_elt_re = re.compile('(.?):([a-z0-9]+)')
type_fns = dict(i=int)
type_fns = dict(n=int, i=ident)
def __getitem__(self, path):
if self._dirty:
self._compile()
Expand All @@ -45,12 +51,12 @@ def __getitem__(self, path):
if type_flag:
try:
type_fn = self.type_fns[type_flag]
except:
except Exception:
assert type_flag in self.type_fns, \
"no such type flag %s" % type_flag
try:
path_elt = type_fn(path_elt)
except:
except Exception:
break
kwargs[arg_name] = path_elt
else:
Expand Down

0 comments on commit 17859e6

Please sign in to comment.