Skip to content

Commit

Permalink
Use URI-like strings to specify paths
Browse files Browse the repository at this point in the history
  • Loading branch information
djmitche committed Mar 12, 2013
1 parent fdcbb09 commit ac57132
Show file tree
Hide file tree
Showing 15 changed files with 117 additions and 95 deletions.
3 changes: 1 addition & 2 deletions master/buildbot/data/base.py
Expand Up @@ -38,8 +38,7 @@ def produceEvent(self, msg, event):
self.master.mq.produce(routingKey, msg)

class Endpoint(object):
pathPattern = None
pathPatterns = []
pathPatterns = ""
rootLinkName = None

def __init__(self, master):
Expand Down
12 changes: 8 additions & 4 deletions master/buildbot/data/builders.py
Expand Up @@ -18,8 +18,10 @@

class BuilderEndpoint(base.Endpoint):

pathPatterns = [ ( 'builder', 'i:builderid' ),
( 'master', 'i:masterid', 'builder', 'i:builderid' ) ]
pathPatterns = """
/builder/i:builderid
/master/i:masterid/builder/i:builderid
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -41,8 +43,10 @@ def get(self, options, kwargs):
class BuildersEndpoint(base.Endpoint):

rootLinkName = 'builders'
pathPatterns = [ ( 'builder', ),
( 'master', 'i:masterid', 'builder' ) ]
pathPatterns = """
/builder
/master/i:masterid/builder
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand Down
18 changes: 9 additions & 9 deletions master/buildbot/data/builds.py
Expand Up @@ -44,10 +44,10 @@ def db2data(self, dbdict):

class BuildEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = [
( 'build', 'i:buildid' ),
( 'builder', 'i:builderid', 'build', 'i:number' ),
]
pathPatterns = """
/build/i:buildid
/builder/i:builderid/build/i:number
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -63,11 +63,11 @@ def get(self, options, kwargs):

class BuildsEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = [
( 'build', ),
( 'builder', 'i:builderid', 'build', ),
( 'buildrequest', 'i:buildrequestid', 'build', ),
]
pathPatterns = """
/build
/builder/i:builderid/build
/buildrequest/i:buildrequestid/build
"""
rootLinkName = 'builds'

@defer.inlineCallbacks
Expand Down
8 changes: 6 additions & 2 deletions master/buildbot/data/buildsets.py
Expand Up @@ -49,7 +49,9 @@ def getSs(ssid):

class BuildsetEndpoint(Db2DataMixin, base.Endpoint):

pathPattern = ( 'buildset', 'i:bsid' )
pathPatterns = """
/buildset/i:bsid
"""

def get(self, options, kwargs):
d = self.master.db.buildsets.getBuildset(kwargs['bsid'])
Expand All @@ -63,7 +65,9 @@ def startConsuming(self, callback, options, kwargs):

class BuildsetsEndpoint(Db2DataMixin, base.Endpoint):

pathPattern = ( 'buildset', )
pathPatterns = """
/buildset
"""
rootLinkName = 'buildset'

def get(self, options, kwargs):
Expand Down
8 changes: 6 additions & 2 deletions master/buildbot/data/changes.py
Expand Up @@ -38,7 +38,9 @@ def _fixChange(self, change):

class ChangeEndpoint(FixerMixin, base.Endpoint):

pathPattern = ( 'change', 'i:changeid' )
pathPatterns = """
/change/i:changeid
"""

def get(self, options, kwargs):
d = self.master.db.changes.getChange(kwargs['changeid'])
Expand All @@ -48,7 +50,9 @@ def get(self, options, kwargs):

class ChangesEndpoint(FixerMixin, base.GetParamsCheckMixin, base.Endpoint):

pathPattern = ( 'change', )
pathPatterns = """
/change
"""
rootLinkName = 'change'
maximumCount = 50

Expand Down
17 changes: 10 additions & 7 deletions master/buildbot/data/connector.py
Expand Up @@ -75,16 +75,19 @@ def _scanModule(self, mod, _noSetattr=False):
for ep in rtype.getEndpoints():
# don't use inherited values for these parameters
clsdict = ep.__class__.__dict__
pathPattern = clsdict.get('pathPattern')
pathPatterns = clsdict.get('pathPatterns', [])
patterns = [ pathPattern ] if pathPattern else []
patterns.extend(pathPatterns)
rootLinkName = clsdict.get('rootLinkName')
for pp in patterns:
pathPatterns = clsdict.get('pathPatterns', '')
pathPatterns = pathPatterns.split()
for pp in pathPatterns:
assert pp.startswith('/') and not pp.endswith('/'), \
"invalid pattern %r" % (pp,)
pathPatterns = [ tuple(pp.split('/')[1:])
for pp in pathPatterns ]
for pp in pathPatterns:
if pp is not None:
self.matcher[pp] = ep
rootLinkName = clsdict.get('rootLinkName')
if rootLinkName:
link = base.Link(patterns[0])
link = base.Link(pathPatterns[0])
self.rootLinks[rootLinkName] = link

def _setup(self):
Expand Down
56 changes: 23 additions & 33 deletions master/buildbot/data/logs.py
Expand Up @@ -34,17 +34,14 @@ 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' ),
]
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
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -66,19 +63,14 @@ 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' ),
]
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
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand Down Expand Up @@ -121,15 +113,13 @@ 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' ),
]
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
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand Down
12 changes: 8 additions & 4 deletions master/buildbot/data/masters.py
Expand Up @@ -30,8 +30,10 @@ def _db2data(master):

class MasterEndpoint(base.Endpoint):

pathPatterns = [ ( 'master', 'i:masterid' ),
( 'builder', 'i:builderid', 'master', 'i:masterid' ) ]
pathPatterns = """
/master/i:masterid
/builder/i:builderid/master/i:masterid
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -49,8 +51,10 @@ def get(self, options, kwargs):

class MastersEndpoint(base.GetParamsCheckMixin, base.Endpoint):

pathPatterns = [ ( 'master', ),
( 'builder', 'i:builderid', 'master', ) ]
pathPatterns = """
/master
/builder/i:builderid/master
"""
rootLinkName = 'masters'

@defer.inlineCallbacks
Expand Down
16 changes: 8 additions & 8 deletions master/buildbot/data/schedulers.py
Expand Up @@ -35,10 +35,10 @@ def db2data(self, dbdict):

class SchedulerEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = [
( 'scheduler', 'i:schedulerid' ),
( 'master', 'i:masterid', 'scheduler', 'i:schedulerid' ),
]
pathPatterns = """
/scheduler/i:schedulerid
/master/i:masterid/scheduler/i:schedulerid
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -53,10 +53,10 @@ def get(self, options, kwargs):

class SchedulersEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = [
( 'scheduler', ),
( 'master', 'i:masterid', 'scheduler', ),
]
pathPatterns = """
/scheduler
/master/i:masterid/scheduler
"""
rootLinkName = 'schedulers'

@defer.inlineCallbacks
Expand Down
8 changes: 6 additions & 2 deletions master/buildbot/data/sourcestamps.py
Expand Up @@ -42,7 +42,9 @@ def _db2data(ss):

class SourceStampEndpoint(base.Endpoint):

pathPatterns = [ ( 'sourcestamp', 'i:ssid' ) ]
pathPatterns = """
/sourcestamp/i:ssid
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -53,7 +55,9 @@ def get(self, options, kwargs):

class SourceStampsEndpoint(base.GetParamsCheckMixin, base.Endpoint):

pathPatterns = [ ( 'sourcestamp', ) ]
pathPatterns = """
/sourcestamp
"""
rootLinkName = 'sourcestamps'

@defer.inlineCallbacks
Expand Down
24 changes: 11 additions & 13 deletions master/buildbot/data/steps.py
Expand Up @@ -39,15 +39,13 @@ 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' ),
]
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
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand All @@ -69,10 +67,10 @@ def get(self, options, kwargs):

class StepsEndpoint(Db2DataMixin, base.Endpoint):

pathPatterns = [
( 'build', 'i:buildid', 'step' ),
( 'builder', 'i:builderid', 'build', 'i:build_number', 'step' ),
]
pathPatterns = """
/build/i:buildid/step
/builder/i:builderid/build/i:build_number/step
"""

@defer.inlineCallbacks
def get(self, options, kwargs):
Expand Down
4 changes: 3 additions & 1 deletion master/buildbot/data/testhooks.py
Expand Up @@ -23,7 +23,9 @@

class TestHooksEndpoint(base.ControlParamsCheckMixin,base.Endpoint):
rootLinkName = 'testhooks'
pathPatterns = [ ( 'testhooks',) ]
pathPatterns = """
/testhooks
"""
action_specs = dict(playScenario=dict(scenario=dict(re=re.compile("[a-z\.]+"),
type=str,
required=True)))
Expand Down
4 changes: 3 additions & 1 deletion master/buildbot/test/unit/test_data_base.py
Expand Up @@ -64,7 +64,9 @@ def test_produceEvent(self):
class Endpoint(endpoint.EndpointMixin, unittest.TestCase):

class MyEndpoint(base.Endpoint):
pathPattern = ( 'my', 'pattern' )
pathPatterns = """
/my/pattern
"""

endpointClass = MyEndpoint

Expand Down
11 changes: 7 additions & 4 deletions master/buildbot/test/unit/test_data_connector.py
Expand Up @@ -187,18 +187,21 @@ def check(gotten):
# classes discovered by test_scanModule, above

class TestsEndpoint(base.Endpoint):
pathPattern = ('test',)
pathPatterns = "/test"
rootLinkName = 'tests'

class TestsEndpointParentClass(base.Endpoint):
rootLinkName = 'shouldnt-see-this'

class TestsEndpointSubclass(TestsEndpointParentClass):
pathPattern = ('test', 'foo')
pathPatterns = "/test/foo"

class TestEndpoint(base.Endpoint):
pathPattern = ('test', 'i:testid')
pathPatterns = [ ('test', 'i:testid', 'p1'), ('test', 'i:testid', 'p2') ]
pathPatterns = """
/test/i:testid
/test/i:testid/p1
/test/i:testid/p2
"""

class TestResourceType(base.ResourceType):
type = 'test'
Expand Down

0 comments on commit ac57132

Please sign in to comment.