1   
   2   
   3   
   4   
   5   
   6   
   7   
   8   
   9   
  10   
  11   
  12   
  13   
  14   
  15   
  16  """Interface documentation. 
  17   
  18  Define the interfaces that are implemented by various buildbot classes. 
  19  """ 
  20   
  21   
  22   
  23   
  24  from zope.interface import Interface, Attribute 
  25   
  26   
  35   
  36   
  39   
  42   
  44      """ 
  45      Service which feeds Change objects to the changemaster. When files or 
  46      directories are changed in version control, this object should represent 
  47      the changes as a change dictionary and call:: 
  48   
  49        self.master.addChange(who=.., rev=.., ..) 
  50   
  51      See 'Writing Change Sources' in the manual for more information. 
  52      """ 
  53      master = Attribute('master', 
  54              'Pointer to BuildMaster, automatically set when started.') 
  55   
  57          """Return a string which briefly describes this source.""" 
    58   
  60      """ 
  61      @cvar branch: branch from which source was drawn 
  62      @type branch: string or None 
  63   
  64      @cvar revision: revision of the source, or None to use CHANGES 
  65      @type revision: varies depending on VC 
  66   
  67      @cvar patch: patch applied to the source, or None if no patch 
  68      @type patch: None or tuple (level diff) 
  69   
  70      @cvar changes: the source step should check out the latest revision 
  71                     in the given changes 
  72      @type changes: tuple of L{buildbot.changes.changes.Change} instances, 
  73                     all of which are on the same branch 
  74   
  75      @cvar project: project this source code represents 
  76      @type project: string 
  77   
  78      @cvar repository: repository from which source was drawn 
  79      @type repository: string 
  80      """ 
  81   
  83          """ 
  84          Can this SourceStamp be merged with OTHER? 
  85          """ 
   86   
  88          """Generate a SourceStamp for the merger of me and all the other 
  89          SourceStamps. This is called by a Build when it starts, to figure 
  90          out what its sourceStamp should be.""" 
   91   
  93          """Get a new SourceStamp object reflecting the actual revision found 
  94          by a Source step.""" 
   95   
  97          """Returns a list of strings to describe the stamp. These are 
  98          intended to be displayed in a narrow column. If more space is 
  99          available, the caller should join them together with spaces before 
 100          presenting them to the user.""" 
   101   
 103      """I know how to send email, and can be used by other parts of the 
 104      Buildbot to contact developers.""" 
 105      pass 
  106   
 109          """Turn a User-name string into a valid email address. Either return 
 110          a string (with an @ in it), None (to indicate that the user cannot 
 111          be reached by email), or a Deferred which will fire with the same.""" 
   112   
 114      """I am an object, obtainable from the buildmaster, which can provide 
 115      status information.""" 
 116   
 118          """Return the name of the project that this Buildbot is working 
 119          for.""" 
  121          """Return the URL of this Buildbot's project.""" 
  123          """Return the URL of the top-most Buildbot status page, or None if 
 124          this Buildbot does not provide a web status page.""" 
  126          """Return the URL of a page which provides information on 'thing', 
 127          which should be an object that implements one of the status 
 128          interfaces defined in L{buildbot.interfaces}. Returns None if no 
 129          suitable page is available (or if no Waterfall is running).""" 
  130   
 132          """Return a list of IChangeSource objects.""" 
  133   
 135          """Return an IChange object.""" 
  136   
 138          """Return a list of ISchedulerStatus objects for all 
 139          currently-registered Schedulers.""" 
  140   
 142          """Return a list of the names of all current Builders.""" 
  144          """Return the IBuilderStatus object for a given named Builder. Raises 
 145          KeyError if there is no Builder by that name.""" 
  146   
 148          """Return a list of buildslave names, suitable for passing to 
 149          getSlave().""" 
  151          """Return the ISlaveStatus object for a given named buildslave.""" 
  152   
 154          """ 
 155          Return a list of un-completed build sets. 
 156   
 157          @returns: list of L{IBuildSetStatus} implementations, via Deferred. 
 158          """ 
  159   
 160 -    def generateFinishedBuilds(builders=[], branches=[], 
 161                                 num_builds=None, finished_before=None, 
 162                                 max_search=200): 
  163          """Return a generator that will produce IBuildStatus objects each 
 164          time you invoke its .next() method, starting with the most recent 
 165          finished build and working backwards. 
 166   
 167          @param builders: this is a list of Builder names, and the generator 
 168                           will only produce builds that ran on the given 
 169                           Builders. If the list is empty, produce builds from 
 170                           all Builders. 
 171   
 172          @param branches: this is a list of branch names, and the generator 
 173                           will only produce builds that used the given 
 174                           branches. If the list is empty, produce builds from 
 175                           all branches. 
 176   
 177          @param num_builds: the generator will stop after providing this many 
 178                             builds. The default of None means to produce as 
 179                             many builds as possible. 
 180   
 181          @type finished_before: int: a timestamp, seconds since the epoch 
 182          @param finished_before: if provided, do not produce any builds that 
 183                                  finished after the given timestamp. 
 184   
 185          @type max_search: int 
 186          @param max_search: this method may have to examine a lot of builds 
 187                             to find some that match the search parameters, 
 188                             especially if there aren't any matching builds. 
 189                             This argument imposes a hard limit on the number 
 190                             of builds that will be examined within any given 
 191                             Builder. 
 192          """ 
  193   
 195          """Register an IStatusReceiver to receive new status events. The 
 196          receiver will immediately be sent a set of 'builderAdded' messages 
 197          for all current builders. It will receive further 'builderAdded' and 
 198          'builderRemoved' messages as the config file is reloaded and builders 
 199          come and go. It will also receive 'buildsetSubmitted' messages for 
 200          all outstanding BuildSets (and each new BuildSet that gets 
 201          submitted). No additional messages will be sent unless the receiver 
 202          asks for them by calling .subscribe on the IBuilderStatus objects 
 203          which accompany the addedBuilder message.""" 
  204   
 206          """Unregister an IStatusReceiver. No further status messgaes will be 
 207          delivered.""" 
   208   
 210      """I represent a set of Builds, each run on a separate Builder but all 
 211      using the same source tree.""" 
 212   
 216          """Return the BuildSet's ID string, if any. The 'try' feature uses a 
 217          random string as a BuildSetID to relate submitted jobs with the 
 218          resulting BuildSet.""" 
  224          """Return a list of the names of all Builders on which this set will 
 225          do builds. 
 226           
 227          @returns: list of names via Deferred""" 
  231          """Return a Deferred that fires (with this IBuildSetStatus object) 
 232          when the outcome of the BuildSet is known, i.e., upon the first 
 233          failure, or after all builds complete successfully.""" 
  235          """Return a Deferred that fires (with this IBuildSetStatus object) 
 236          when all builds have finished.""" 
  238          """Return SUCCESS/FAILURE, or None if the buildset is not finished 
 239          yet""" 
   240   
 241   
 243      """I represent a request to build a particular set of source code on a 
 244      particular Builder. These requests may be merged by the time they are 
 245      finally turned into a Build.""" 
 246   
 248          """ 
 249          Get a SourceStamp object which can be used to re-create the source tree 
 250          that this build used.  This method will return an absolute SourceStamp 
 251          if possible, and its results may change as the build progresses. 
 252          Specifically, a "HEAD" build may later be more accurately specified by 
 253          an absolute SourceStamp with the specific revision information. 
 254   
 255          This method will return None if the source information is no longer 
 256          available. 
 257   
 258          @returns: SourceStamp via Deferred 
 259          """ 
  260   
 262          """Return a list of IBuildStatus objects for each Build that has been 
 263          started in an attempt to satify this BuildRequest.""" 
  264   
 266          """Register a callable that will be invoked (with a single 
 267          IBuildStatus object) for each Build that is created to satisfy this 
 268          request. There may be multiple Builds created in an attempt to handle 
 269          the request: they may be interrupted by the user or abandoned due to 
 270          a lost slave. The last Build (the one which actually gets to run to 
 271          completion) is said to 'satisfy' the BuildRequest. The observer will 
 272          be called once for each of these Builds, both old and new.""" 
  274          """Unregister the callable that was registered with subscribe().""" 
  276          """Return the time when this request was submitted.  Returns a 
 277          Deferred.""" 
   278   
 279   
 282          """Return the name of the build slave.""" 
  283   
 285          """Return a string with the slave admin's contact data.""" 
  286   
 288          """Return a string with the slave host info.""" 
  289   
 291          """Return True if the slave is currently online, False if not.""" 
  292   
 294          """Return a timestamp (seconds since epoch) indicating when the most 
 295          recent message was received from the buildslave.""" 
   296   
 299          """Return the name of this Scheduler (a string).""" 
  300   
 302          """Return an IBuildSet for all BuildSets that are pending. These 
 303          BuildSets are waiting for their tree-stable-timers to expire.""" 
   304           
 305   
 306   
 309          """Return the name of this Builder (a string).""" 
  310   
 312          """Return the category of this builder (a string).""" 
  313   
 315           
 316          """Return a tuple (state, builds) for this Builder. 'state' is the 
 317          so-called 'big-status', indicating overall status (as opposed to 
 318          which step is currently running). It is a string, one of 'offline', 
 319          'idle', or 'building'. 'builds' is a list of IBuildStatus objects 
 320          (possibly empty) representing the currently active builds.""" 
  321   
 323          """Return a list of ISlaveStatus objects for the buildslaves that are 
 324          used by this builder.""" 
  325   
 327          """ 
 328          Get a L{IBuildRequestStatus} implementations for all unclaimed build 
 329          requests. 
 330   
 331          @returns: list of objects via Deferred 
 332          """ 
  333   
 335          """Return a list containing an IBuildStatus object for each build 
 336          currently in progress.""" 
  337           
 338           
 339           
 340   
 342          """Return the IBuildStatus object representing the last finished 
 343          build, which may be None if the builder has not yet finished any 
 344          builds.""" 
  345   
 347          """Return an IBuildStatus object for a historical build. Each build 
 348          is numbered (starting at 0 when the Builder is first added), 
 349          getBuild(n) will retrieve the Nth such build. getBuild(-n) will 
 350          retrieve a recent build, with -1 being the most recent build 
 351          started. If the Builder is idle, this will be the same as 
 352          getLastFinishedBuild(). If the Builder is active, it will be an 
 353          unfinished build. This method will return None if the build is no 
 354          longer available. Older builds are likely to have less information 
 355          stored: Logs are the first to go, then Steps.""" 
  356   
 358          """Return an IStatusEvent object for a recent Event. Builders 
 359          connecting and disconnecting are events, as are ping attempts. 
 360          getEvent(-1) will return the most recent event. Events are numbered, 
 361          but it probably doesn't make sense to ever do getEvent(+n).""" 
  362   
 363 -    def generateFinishedBuilds(branches=[], 
 364                                 num_builds=None, 
 365                                 max_buildnum=None, finished_before=None, 
 366                                 max_search=200, 
 367                                 ): 
  368          """Return a generator that will produce IBuildStatus objects each 
 369          time you invoke its .next() method, starting with the most recent 
 370          finished build, then the previous build, and so on back to the oldest 
 371          build available. 
 372   
 373          @param branches: this is a list of branch names, and the generator 
 374                           will only produce builds that involve the given 
 375                           branches. If the list is empty, the generator will 
 376                           produce all builds regardless of what branch they 
 377                           used. 
 378   
 379          @param num_builds: if provided, the generator will stop after 
 380                             providing this many builds. The default of None 
 381                             means to produce as many builds as possible. 
 382   
 383          @param max_buildnum: if provided, the generator will start by 
 384                               providing the build with this number, or the 
 385                               highest-numbered preceding build (i.e. the 
 386                               generator will not produce any build numbered 
 387                               *higher* than max_buildnum). The default of None 
 388                               means to start with the most recent finished 
 389                               build. -1 means the same as None. -2 means to 
 390                               start with the next-most-recent completed build, 
 391                               etc. 
 392   
 393          @type finished_before: int: a timestamp, seconds since the epoch 
 394          @param finished_before: if provided, do not produce any builds that 
 395                                  finished after the given timestamp. 
 396   
 397          @type max_search: int 
 398          @param max_search: this method may have to examine a lot of builds 
 399                             to find some that match the search parameters, 
 400                             especially if there aren't any matching builds. 
 401                             This argument imposes a hard limit on the number 
 402                             of builds that will be examined. 
 403          """ 
  404   
 406          """Register an IStatusReceiver to receive new status events. The 
 407          receiver will be given builderChangedState, buildStarted, and 
 408          buildFinished messages.""" 
  409   
 411          """Unregister an IStatusReceiver. No further status messgaes will be 
 412          delivered.""" 
   413   
 415 -    def eventGenerator(branches=[], categories=[], committers=[], minTime=0): 
  416          """This function creates a generator which will yield all of this 
 417          object's status events, starting with the most recent and progressing 
 418          backwards in time. These events provide the IStatusEvent interface. 
 419          At the moment they are all instances of buildbot.status.builder.Event 
 420          or buildbot.status.builder.BuildStepStatus . 
 421   
 422          @param branches: a list of branch names. The generator should only 
 423          return events that are associated with these branches. If the list is 
 424          empty, events for all branches should be returned (i.e. an empty list 
 425          means 'accept all' rather than 'accept none'). 
 426   
 427          @param categories: a list of category names.  The generator 
 428          should only return events that are categorized within the 
 429          given category.  If the list is empty, events for all 
 430          categories should be returned. 
 431   
 432          @param comitters: a list of committers.  The generator should only 
 433          return events caused by one of the listed committers. If the list is 
 434          empty or None, events from every committers should be returned. 
 435   
 436          @param minTime: a timestamp. Do not generate events occuring prior to 
 437          this timestamp. 
 438          """ 
   439   
 441      """I represent the status of a single Build/BuildRequest. It could be 
 442      in-progress or finished.""" 
 443   
 445          """ 
 446          Return the BuilderStatus that owns this build. 
 447   
 448          @rtype: implementor of L{IBuilderStatus} 
 449          """ 
  450   
 452          """Return a boolean. True means the build has finished, False means 
 453          it is still running.""" 
  454   
 456          """Return a Deferred that will fire when the build finishes. If the 
 457          build has already finished, this deferred will fire right away. The 
 458          callback is given this IBuildStatus instance as an argument.""" 
  459   
 461          """Return the value of the build property with the given name. Raises 
 462          KeyError if there is no such property on this build.""" 
  463   
 465          """Return a string that indicates why the build was run. 'changes', 
 466          'forced', and 'periodic' are the most likely values. 'try' will be 
 467          added in the future.""" 
  468   
 470          """Return a SourceStamp object which can be used to re-create 
 471          the source tree that this build used. 
 472   
 473          This method will return None if the source information is no longer 
 474          available.""" 
  475           
 476           
 477   
 479          """Return a list of Change objects which represent which source 
 480          changes went into the build.""" 
  481   
 483          """Return a list of Users who are to blame for the changes that went 
 484          into this build. If anything breaks (at least anything that wasn't 
 485          already broken), blame them. Specifically, this is the set of users 
 486          who were responsible for the Changes that went into this build. Each 
 487          User is a string, corresponding to their name as known by the VC 
 488          repository.""" 
  489   
 491          """Return a list of Users who will want to know about the results of 
 492          this build. This is a superset of getResponsibleUsers(): it adds 
 493          people who are interested in this build but who did not actually 
 494          make the Changes that went into it (build sheriffs, code-domain 
 495          owners).""" 
  496   
 498          """Within each builder, each Build has a number. Return it.""" 
  499   
 501          """Convenience method. Returns None if the previous build is 
 502          unavailable.""" 
  503   
 505          """Return a list of IBuildStepStatus objects. For invariant builds 
 506          (those which always use the same set of Steps), this should always 
 507          return the complete list, however some of the steps may not have 
 508          started yet (step.getTimes()[0] will be None). For variant builds, 
 509          this may not be complete (asking again later may give you more of 
 510          them).""" 
  511   
 513          """Returns a tuple of (start, end). 'start' and 'end' are the times 
 514          (seconds since the epoch) when the Build started and finished. If 
 515          the build is still running, 'end' will be None.""" 
  516   
 517       
 518       
 519   
 521          """Returns the number of seconds from now in which the build is 
 522          expected to finish, or None if we can't make a guess. This guess will 
 523          be refined over time.""" 
  524   
 526          """Return an IBuildStepStatus object representing the currently 
 527          active step.""" 
  528   
 529       
 530       
 531   
 533          """Return the name of the buildslave which handled this build.""" 
  534   
 536          """Returns a list of strings to describe the build. These are 
 537          intended to be displayed in a narrow column. If more space is 
 538          available, the caller should join them together with spaces before 
 539          presenting them to the user.""" 
  540   
 542          """Return a constant describing the results of the build: one of the 
 543          constants in buildbot.status.builder: SUCCESS, WARNINGS, 
 544          FAILURE, SKIPPED or EXCEPTION.""" 
  545   
 547          """Return a list of logs that describe the build as a whole. Some 
 548          steps will contribute their logs, while others are are less important 
 549          and will only be accessible through the IBuildStepStatus objects. 
 550          Each log is an object which implements the IStatusLog interface.""" 
  551   
 553          """Return a dictionary that maps test-name tuples to ITestResult 
 554          objects. This may return an empty or partially-filled dictionary 
 555          until the build has completed.""" 
  556   
 557       
 558   
 559 -    def subscribe(receiver, updateInterval=None): 
  560          """Register an IStatusReceiver to receive new status events. The 
 561          receiver will be given stepStarted and stepFinished messages. If 
 562          'updateInterval' is non-None, buildETAUpdate messages will be sent 
 563          every 'updateInterval' seconds.""" 
  564   
 566          """Unregister an IStatusReceiver. No further status messgaes will be 
 567          delivered.""" 
   568   
 570      """I describe the results of a single unit test.""" 
 571   
 573          """Returns a tuple of strings which make up the test name. Tests may 
 574          be arranged in a hierarchy, so looking for common prefixes may be 
 575          useful.""" 
  576   
 578          """Returns a constant describing the results of the test: SUCCESS, 
 579          WARNINGS, FAILURE.""" 
  580   
 582          """Returns a list of short strings which describe the results of the 
 583          test in slightly more detail. Suggested components include 
 584          'failure', 'error', 'passed', 'timeout'.""" 
  585   
 587           
 588           
 589          """Returns a dictionary of test logs. The keys are strings like 
 590          'stdout', 'log', 'exceptions'. The values are strings.""" 
   591   
 592   
 594      """I hold status for a single BuildStep.""" 
 595   
 597          """Returns a short string with the name of this step. This string 
 598          may have spaces in it.""" 
  599   
 601          """Returns the IBuildStatus object which contains this step.""" 
  602   
 604          """Returns a tuple of (start, end). 'start' and 'end' are the times 
 605          (seconds since the epoch) when the Step started and finished. If the 
 606          step has not yet started, 'start' will be None. If the step is still 
 607          running, 'end' will be None.""" 
  608   
 610          """Returns a list of tuples (name, current, target). Each tuple 
 611          describes a single axis along which the step's progress can be 
 612          measured. 'name' is a string which describes the axis itself, like 
 613          'filesCompiled' or 'tests run' or 'bytes of output'. 'current' is a 
 614          number with the progress made so far, while 'target' is the value 
 615          that we expect (based upon past experience) to get to when the build 
 616          is finished. 
 617   
 618          'current' will change over time until the step is finished. It is 
 619          'None' until the step starts. When the build is finished, 'current' 
 620          may or may not equal 'target' (which is merely the expectation based 
 621          upon previous builds).""" 
  622   
 624          """Returns a dictionary of URLs. Each key is a link name (a short 
 625          string, like 'results' or 'coverage'), and each value is a URL. These 
 626          links will be displayed along with the LogFiles. 
 627          """ 
  628   
 630          """Returns a list of IStatusLog objects. If the step has not yet 
 631          finished, this list may be incomplete (asking again later may give 
 632          you more of them).""" 
  633   
 634   
 636          """Return a boolean. True means the step has finished, False means it 
 637          is still running.""" 
  638   
 640          """Return a Deferred that will fire when the step finishes. If the 
 641          step has already finished, this deferred will fire right away. The 
 642          callback is given this IBuildStepStatus instance as an argument.""" 
  643   
 644       
 645       
 646   
 648          """Returns the number of seconds from now in which the step is 
 649          expected to finish, or None if we can't make a guess. This guess will 
 650          be refined over time.""" 
  651   
 652       
 653       
 654   
 656          """Returns a list of strings which describe the step. These are 
 657          intended to be displayed in a narrow column. If more space is 
 658          available, the caller should join them together with spaces before 
 659          presenting them to the user.""" 
  660   
 662          """Return a tuple describing the results of the step: (result, 
 663          strings). 'result' is one of the constants in 
 664          buildbot.status.builder: SUCCESS, WARNINGS, FAILURE, or SKIPPED. 
 665          'strings' is an optional list of strings that the step wants to 
 666          append to the overall build's results. These strings are usually 
 667          more terse than the ones returned by getText(): in particular, 
 668          successful Steps do not usually contribute any text to the overall 
 669          build.""" 
  670   
 671       
 672   
 674          """Register an IStatusReceiver to receive new status events. The 
 675          receiver will be given logStarted and logFinished messages. It will 
 676          also be given a ETAUpdate message every 'updateInterval' seconds.""" 
  677   
 679          """Unregister an IStatusReceiver. No further status messgaes will be 
 680          delivered.""" 
   681   
 683      """I represent a Builder Event, something non-Build related that can 
 684      happen to a Builder.""" 
 685   
 687          """Returns a tuple of (start, end) like IBuildStepStatus, but end==0 
 688          indicates that this is a 'point event', which has no duration. 
 689          SlaveConnect/Disconnect are point events. Ping is not: it starts 
 690          when requested and ends when the response (positive or negative) is 
 691          returned""" 
  692   
 694          """Returns a list of strings which describe the event. These are 
 695          intended to be displayed in a narrow column. If more space is 
 696          available, the caller should join them together with spaces before 
 697          presenting them to the user.""" 
   698   
 699   
 700  LOG_CHANNEL_STDOUT = 0 
 701  LOG_CHANNEL_STDERR = 1 
 702  LOG_CHANNEL_HEADER = 2 
 703   
 705      """I represent a single Log, which is a growing list of text items that 
 706      contains some kind of output for a single BuildStep. I might be finished, 
 707      in which case this list has stopped growing. 
 708   
 709      Each Log has a name, usually something boring like 'log' or 'output'. 
 710      These names are not guaranteed to be unique, however they are usually 
 711      chosen to be useful within the scope of a single step (i.e. the Compile 
 712      step might produce both 'log' and 'warnings'). The name may also have 
 713      spaces. If you want something more globally meaningful, at least within a 
 714      given Build, try:: 
 715   
 716        '%s.%s' % (log.getStep.getName(), log.getName()) 
 717   
 718      The Log can be presented as plain text, or it can be accessed as a list 
 719      of items, each of which has a channel indicator (header, stdout, stderr) 
 720      and a text chunk. An HTML display might represent the interleaved 
 721      channels with different styles, while a straight download-the-text 
 722      interface would just want to retrieve a big string. 
 723   
 724      The 'header' channel is used by ShellCommands to prepend a note about 
 725      which command is about to be run ('running command FOO in directory 
 726      DIR'), and append another note giving the exit code of the process. 
 727   
 728      Logs can be streaming: if the Log has not yet finished, you can 
 729      subscribe to receive new chunks as they are added. 
 730   
 731      A ShellCommand will have a Log associated with it that gathers stdout 
 732      and stderr. Logs may also be created by parsing command output or 
 733      through other synthetic means (grepping for all the warnings in a 
 734      compile log, or listing all the test cases that are going to be run). 
 735      Such synthetic Logs are usually finished as soon as they are created.""" 
 736   
 737   
 739          """Returns a short string with the name of this log, probably 'log'. 
 740          """ 
  741   
 743          """Returns the IBuildStepStatus which owns this log.""" 
  744           
 745   
 747          """Return a boolean. True means the log has finished and is closed, 
 748          False means it is still open and new chunks may be added to it.""" 
  749   
 751          """Return a Deferred that will fire when the log is closed. If the 
 752          log has already finished, this deferred will fire right away. The 
 753          callback is given this IStatusLog instance as an argument.""" 
  754   
 756          """Register an IStatusReceiver to receive chunks (with logChunk) as 
 757          data is added to the Log. If you use this, you will also want to use 
 758          waitUntilFinished to find out when the listener can be retired. 
 759          Subscribing to a closed Log is a no-op. 
 760   
 761          If 'catchup' is True, the receiver will immediately be sent a series 
 762          of logChunk messages to bring it up to date with the partially-filled 
 763          log. This allows a status client to join a Log already in progress 
 764          without missing any data. If the Log has already finished, it is too 
 765          late to catch up: just do getText() instead. 
 766   
 767          If the Log is very large, the receiver will be called many times with 
 768          a lot of data. There is no way to throttle this data. If the receiver 
 769          is planning on sending the data on to somewhere else, over a narrow 
 770          connection, you can get a throttleable subscription by using 
 771          C{subscribeConsumer} instead.""" 
  772   
 774          """Remove a receiver previously registered with subscribe(). Attempts 
 775          to remove a receiver which was not previously registered is a no-op. 
 776          """ 
  777   
 779          """Register an L{IStatusLogConsumer} to receive all chunks of the 
 780          logfile, including all the old entries and any that will arrive in 
 781          the future. The consumer will first have their C{registerProducer} 
 782          method invoked with a reference to an object that can be told 
 783          C{pauseProducing}, C{resumeProducing}, and C{stopProducing}. Then the 
 784          consumer's C{writeChunk} method will be called repeatedly with each 
 785          (channel, text) tuple in the log, starting with the very first. The 
 786          consumer will be notified with C{finish} when the log has been 
 787          exhausted (which can only happen when the log is finished). Note that 
 788          a small amount of data could be written via C{writeChunk} even after 
 789          C{pauseProducing} has been called. 
 790   
 791          To unsubscribe the consumer, use C{producer.stopProducing}.""" 
  792   
 793       
 794       
 795       
 796       
 797       
 798   
 800          """Returns True if the LogFile still has contents available. Returns 
 801          False for logs that have been pruned. Clients should test this before 
 802          offering to show the contents of any log.""" 
  803   
 805          """Return one big string with the contents of the Log. This merges 
 806          all non-header chunks together.""" 
  807   
 809          """Read lines from one channel of the logfile. This returns an 
 810          iterator that will provide single lines of text (including the 
 811          trailing newline). 
 812          """ 
  813   
 815          """Return one big string with the contents of the Log. This merges 
 816          all chunks (including headers) together.""" 
  817   
 819          """Generate a list of (channel, text) tuples. 'channel' is a number, 
 820          0 for stdout, 1 for stderr, 2 for header. (note that stderr is merged 
 821          into stdout if PTYs are in use).""" 
   822   
 824      """I am an object which can be passed to IStatusLog.subscribeConsumer(). 
 825      I represent a target for writing the contents of an IStatusLog. This 
 826      differs from a regular IStatusReceiver in that it can pause the producer. 
 827      This makes it more suitable for use in streaming data over network 
 828      sockets, such as an HTTP request. Note that the consumer can only pause 
 829      the producer until it has caught up with all the old data. After that 
 830      point, C{pauseProducing} is ignored and all new output from the log is 
 831      sent directoy to the consumer.""" 
 832   
 834          """A producer is being hooked up to this consumer. The consumer only 
 835          has to handle a single producer. It should send .pauseProducing and 
 836          .resumeProducing messages to the producer when it wants to stop or 
 837          resume the flow of data. 'streaming' will be set to True because the 
 838          producer is always a PushProducer. 
 839          """ 
  840   
 842          """The previously-registered producer has been removed. No further 
 843          pauseProducing or resumeProducing calls should be made. The consumer 
 844          should delete its reference to the Producer so it can be released.""" 
  845   
 847          """A chunk (i.e. a tuple of (channel, text)) is being written to the 
 848          consumer.""" 
  849   
 851          """The log has finished sending chunks to the consumer.""" 
   852   
 854      """I am an object which can receive build status updates. I may be 
 855      subscribed to an IStatus, an IBuilderStatus, or an IBuildStatus.""" 
 856   
 858          """A new BuildSet has been submitted to the buildmaster. 
 859   
 860          @type buildset: implementor of L{IBuildSetStatus} 
 861          """ 
  862   
 864          """A new BuildRequest has been submitted to the buildmaster. 
 865   
 866          @type request: implementor of L{IBuildRequestStatus} 
 867          """ 
  868   
 870          """A BuildRequest has been cancelled on the given Builder. 
 871   
 872          @type builder: L{buildbot.status.builder.BuilderStatus} 
 873          @type request: implementor of L{IBuildRequestStatus} 
 874          """ 
  875   
 877          """ 
 878          A new Builder has just been added. This method may return an 
 879          IStatusReceiver (probably 'self') which will be subscribed to receive 
 880          builderChangedState and buildStarted/Finished events. 
 881   
 882          @type  builderName: string 
 883          @type  builder:     L{buildbot.status.builder.BuilderStatus} 
 884          @rtype: implementor of L{IStatusReceiver} 
 885          """ 
  886   
 888          """Builder 'builderName' has changed state. The possible values for 
 889          'state' are 'offline', 'idle', and 'building'.""" 
  890   
 892          """Builder 'builderName' has just started a build. The build is an 
 893          object which implements IBuildStatus, and can be queried for more 
 894          information. 
 895   
 896          This method may return an IStatusReceiver (it could even return 
 897          'self'). If it does so, stepStarted and stepFinished methods will be 
 898          invoked on the object for the steps of this one build. This is a 
 899          convenient way to subscribe to all build steps without missing any. 
 900          This receiver will automatically be unsubscribed when the build 
 901          finishes. 
 902   
 903          It can also return a tuple of (IStatusReceiver, interval), in which 
 904          case buildETAUpdate messages are sent ever 'interval' seconds, in 
 905          addition to the stepStarted and stepFinished messages.""" 
  906   
 908          """This is a periodic update on the progress this Build has made 
 909          towards completion.""" 
  910   
 912          """A new Change was added to the ChangeMaster.  By the time this event 
 913          is received, all schedulers have already received the change.""" 
  914   
 916          """A step has just started. 'step' is the IBuildStepStatus which 
 917          represents the step: it can be queried for more information. 
 918   
 919          This method may return an IStatusReceiver (it could even return 
 920          'self'). If it does so, logStarted and logFinished methods will be 
 921          invoked on the object for logs created by this one step. This 
 922          receiver will be automatically unsubscribed when the step finishes. 
 923   
 924          Alternatively, the method may return a tuple of an IStatusReceiver 
 925          and an integer named 'updateInterval'. In addition to 
 926          logStarted/logFinished messages, it will also receive stepETAUpdate 
 927          messages about every updateInterval seconds.""" 
  928   
 929 -    def stepTextChanged(build, step, text): 
  930          """The text for a step has been updated. 
 931   
 932          This is called when calling setText() on the step status, and 
 933          hands in the text list.""" 
  934   
 935 -    def stepText2Changed(build, step, text2): 
  936          """The text2 for a step has been updated. 
 937   
 938          This is called when calling setText2() on the step status, and 
 939          hands in text2 list.""" 
  940   
 942          """This is a periodic update on the progress this Step has made 
 943          towards completion. It gets an ETA (in seconds from the present) of 
 944          when the step ought to be complete, and a list of expectation tuples 
 945          (as returned by IBuildStepStatus.getExpectations) with more detailed 
 946          information.""" 
  947   
 949          """A new Log has been started, probably because a step has just 
 950          started running a shell command. 'log' is the IStatusLog object 
 951          which can be queried for more information. 
 952   
 953          This method may return an IStatusReceiver (such as 'self'), in which 
 954          case the target's logChunk method will be invoked as text is added to 
 955          the logfile. This receiver will automatically be unsubsribed when the 
 956          log finishes.""" 
  957   
 958 -    def logChunk(build, step, log, channel, text): 
  959          """Some text has been added to this log. 'channel' is one of 
 960          LOG_CHANNEL_STDOUT, LOG_CHANNEL_STDERR, or LOG_CHANNEL_HEADER, as 
 961          defined in IStatusLog.getChunks.""" 
  962   
 964          """A Log has been closed.""" 
  965   
 967          """A step has just finished. 'results' is the result tuple described 
 968          in IBuildStepStatus.getResults.""" 
  969   
 971          """ 
 972          A build has just finished. 'results' is the result tuple described 
 973          in L{IBuildStatus.getResults}. 
 974   
 975          @type  builderName: string 
 976          @type  build:       L{buildbot.status.build.BuildStatus} 
 977          @type  results:     tuple 
 978          """ 
  979   
 981          """The Builder has been removed.""" 
  982   
 984          """The slave has connected.""" 
  985   
 987          """The slave has disconnected.""" 
   988   
 991          """Add a change to the change queue, for analysis by schedulers.""" 
  992   
 994          """Retrieve the IBuilderControl object for the given Builder.""" 
   995   
 998          """Create a BuildRequest, which will eventually cause a build of the 
 999          given SourceStamp to be run on this builder. This returns a 
1000          BuildRequestStatus object via a Deferred, which can be used to keep 
1001          track of the builds that are performed.""" 
 1002   
1003 -    def rebuildBuild(buildStatus, reason="<rebuild, no reason given>"): 
 1004          """Rebuild something we've already built before. This submits a 
1005          BuildRequest to our Builder using the same SourceStamp as the earlier 
1006          build. This has no effect (but may eventually raise an exception) if 
1007          this Build has not yet finished.""" 
 1008   
1010          """ 
1011          Get a list of L{IBuildRequestControl} objects for this Builder. 
1012          Each one corresponds to an unclaimed build request. 
1013   
1014          @returns: list of objects via Deferred 
1015          """ 
 1016   
1018          """Attempt to return an IBuildControl object for the given build. 
1019          Returns None if no such object is available. This will only work for 
1020          the build that is currently in progress: once the build finishes, 
1021          there is nothing to control anymore.""" 
 1022   
1024          """Attempt to contact the slave and see if it is still alive. This 
1025          returns a Deferred which fires with either True (the slave is still 
1026          alive) or False (the slave did not respond). As a side effect, adds an 
1027          event to this builder's column in the waterfall display containing the 
1028          results of the ping. Note that this may not fail for a long time, it is 
1029          implemented in terms of the timeout on the underlying TCP connection.""" 
  1030           
1031           
1032           
1033   
1036          """Register a callable that will be invoked (with a single 
1037          IBuildControl object) for each Build that is created to satisfy this 
1038          request. There may be multiple Builds created in an attempt to handle 
1039          the request: they may be interrupted by the user or abandoned due to 
1040          a lost slave. The last Build (the one which actually gets to run to 
1041          completion) is said to 'satisfy' the BuildRequest. The observer will 
1042          be called once for each of these Builds, both old and new.""" 
 1044          """Unregister the callable that was registered with subscribe().""" 
 1046          """Remove the build from the pending queue. Has no effect if the 
1047          build has already been started.""" 
  1048   
1051          """Return an IBuildStatus object for the Build that I control.""" 
 1053          """Halt the build. This has no effect if the build has already 
1054          finished.""" 
  1055   
1057      """This is the internal interface to a LogFile, used by the BuildStep to 
1058      write data into the log. 
1059      """ 
1067          """The process that is feeding the log file has finished, and no 
1068          further data will be added. This closes the logfile.""" 
  1069   
1071      """Objects which provide this interface can be used in a BuildStep to 
1072      watch the output of a LogFile and parse it incrementally. 
1073      """ 
1074   
1075       
1080   
1081       
1082 -    def logChunk(build, step, log, channel, text): 
  1084   
1088   
1090      """A build slave that is not always running, but can run when requested. 
1091      """ 
1092      substantiated = Attribute('Substantiated', 
1093                                'Whether the latent build slave is currently ' 
1094                                'substantiated with a real instance.') 
1095   
1097          """Request that the slave substantiate with a real instance. 
1098   
1099          Returns a deferred that will callback when a real instance has 
1100          attached.""" 
 1101   
1102       
1103   
1105          """Inform the latent build slave that a build has started. 
1106   
1107          @param sb: a L{LatentSlaveBuilder}.  The sb is the one for whom the 
1108          build finished. 
1109          """ 
 1110   
1112          """Inform the latent build slave that a build has finished. 
1113   
1114          @param sb: a L{LatentSlaveBuilder}.  The sb is the one for whom the 
1115          build finished. 
1116          """ 
  1117   
1119      """An object that can be interpolated with properties from a build. 
1120      """ 
1121   
1123          """Return the interpolation with the given properties 
1124   
1125          @param iprops: the L{IProperties} provider supplying the properties. 
1126          """ 
  1128      """ 
1129      An object providing access to build properties 
1130      """ 
1131   
1133          """Get the named property, returning the default if the property does 
1134          not exist. 
1135   
1136          @param name: property name 
1137          @type name: string 
1138   
1139          @param default: default value (default: @code{None}) 
1140   
1141          @returns: property value 
1142          """ 
 1143   
1145          """Return true if the named property exists. 
1146   
1147          @param name: property name 
1148          @type name: string 
1149          @returns: boolean 
1150          """ 
 1151   
1153          """Deprecated name for L{hasProperty}.""" 
 1154   
1156          """Set the given property, overwriting any existing value.  The source 
1157          describes the source of the value for human interpretation. 
1158   
1159          @param name: property name 
1160          @type name: string 
1161   
1162          @param value: property value 
1163          @type value: JSON-able value 
1164   
1165          @param source: property source 
1166          @type source: string 
1167   
1168          @param runtime: (optional) whether this property was set during the 
1169          build's runtime: usually left at its default value 
1170          @type runtime: boolean 
1171          """ 
 1172   
1174          """Get the L{buildbot.process.properties.Properties} instance storing 
1175          these properties.  Note that the interface for this class is not 
1176          stable, so where possible the other methods of this interface should be 
1177          used. 
1178   
1179          @returns: L{buildbot.process.properties.Properties} instance 
1180          """ 
 1181   
1183          """Get the L{buildbot.process.build.Build} instance for the current 
1184          build.  Note that this object is not available after the build is 
1185          complete, at which point this method will return None. 
1186   
1187          Try to avoid using this method, as the API of L{Build} instances is not 
1188          well-defined. 
1189   
1190          @returns L{buildbot.process.build.Build} instance 
1191          """ 
 1192   
1194          """Render @code{value} as an L{IRenderable}.  This essentially coerces 
1195          @code{value} to an L{IRenderable} and calls its @L{getRenderingFor} 
1196          method. 
1197   
1198          @name value: value to render 
1199          @returns: rendered value 
1200          """ 
  1201