~linaro-validation/lava-dashboard-tool/trunk

« back to all changes in this revision

Viewing changes to launch_control_tool/commands.py

  • Committer: Zygmunt Krynicki
  • Date: 2011-05-18 14:16:48 UTC
  • mfrom: (140.1.2 fix-server-version-checks)
  • Revision ID: zygmunt.krynicki@linaro.org-20110518141648-9fca3n00xw0id0uf
Merge fixes for version checks

Show diffs side-by-side

added added

removed removed

Lines of Context:
312
312
        return urlparse.urlunsplit(
313
313
            (parts.scheme, parts.netloc, parts.path.rstrip("/") + "/xml-rpc/", "", ""))
314
314
 
 
315
    @staticmethod
 
316
    def _strict_server_version(version):
 
317
        """
 
318
        Calculate strict server version (as defined by
 
319
        distutils.version.StrictVersion). This works by discarding .candidate
 
320
        and .dev release-levels.
 
321
        >>> XMLRPCCommand._strict_server_version("0.4.0.candidate.5")
 
322
        '0.4.0'
 
323
        >>> XMLRPCCommand._strict_server_version("0.4.0.dev.126")
 
324
        '0.4.0'
 
325
        >>> XMLRPCCommand._strict_server_version("0.4.0.alpha.1")
 
326
        '0.4.0a1'
 
327
        >>> XMLRPCCommand._strict_server_version("0.4.0.beta.2")
 
328
        '0.4.0b2'
 
329
        """
 
330
        try:
 
331
            major, minor, micro, releaselevel, serial = version.split(".") 
 
332
        except ValueError:
 
333
            raise ValueError(
 
334
                ("version %r does not follow pattern "
 
335
                 "'major.minor.micro.releaselevel.serial'") % version)
 
336
        if releaselevel in ["dev", "candidate", "final"]:
 
337
            return "%s.%s.%s" % (major, minor, micro)
 
338
        elif releaselevel == "alpha":
 
339
            return "%s.%s.%sa%s" % (major, minor, micro, serial)
 
340
        elif releaselevel == "beta":
 
341
            return "%s.%s.%sb%s" % (major, minor, micro, serial)
 
342
        else:
 
343
            raise ValueError(
 
344
                ("releaselevel %r is not one of 'final', 'alpha', 'beta', "
 
345
                 "'candidate' or 'final'") % releaselevel)
 
346
 
315
347
    def _check_server_version(self, server_obj, required_version):
316
348
        """
317
349
        Check that server object has is at least required_version.
318
 
        which must be a tuple of integer (major, minor, micro).
319
350
 
320
351
        This method may raise InsufficientServerVersion.
321
352
        """
322
353
        from distutils.version import StrictVersion, LooseVersion
323
354
        # For backwards compatibility the server reports
324
355
        # major.minor.micro.releaselevel.serial which is not PEP-386 compliant
325
 
        server_version = LooseVersion(server_obj.version())
326
 
        required_version = LooseVersion(required_version)
 
356
        server_version = StrictVersion(
 
357
            self._strict_server_version(server_obj.version()))
 
358
        required_version = StrictVersion(required_version)
327
359
        if server_version < required_version:
328
360
            raise InsufficientServerVersion(server_version, required_version)
329
361
 
651
683
            help="Name of the bundle stream (description)")
652
684
 
653
685
    def invoke_remote(self):
654
 
        self._check_server_version(self.server, "0.3.0.candidate.9")
 
686
        self._check_server_version(self.server, "0.3")
655
687
        pathname = self.server.make_stream(self.args.pathname, self.args.name)
656
688
        print "Bundle stream {pathname} created".format(pathname=pathname)
657
689
 
699
731
                            help="Directory to backup from")
700
732
 
701
733
    def invoke_remote(self):
702
 
        self._check_server_version(self.server, "0.3.0.candidate.9")
 
734
        self._check_server_version(self.server, "0.3")
703
735
        for stream_pathname_quoted in os.listdir(self.args.BACKUP_DIR):
704
736
            filesystem_stream_pathname = os.path.join(self.args.BACKUP_DIR, stream_pathname_quoted)
705
737
            if not os.path.isdir(filesystem_stream_pathname):
771
803
        return "%s GB" % filesize_number_format(num_bytes / (1024 * 1024 * 1024))
772
804
 
773
805
    def invoke_remote(self):
774
 
        self._check_server_version(self.server, "0.3.0.candidate.9")
 
806
        self._check_server_version(self.server, "0.3")
775
807
        print "Checking local and remote streams"
776
808
        remote = self.remote_server.streams()
777
809
        if self.args.STREAM:
829
861
        caption="Data Views")
830
862
 
831
863
    def invoke_remote(self):
832
 
        self._check_server_version(self.server, "0.4.0.dev")
 
864
        self._check_server_version(self.server, "0.4")
833
865
        self.renderer.render(self.server.data_views())
834
866
        print
835
867
        print "Tip: to invoke a data view try `lc-tool query-data-view`"
850
882
        Probe the server for information about data views
851
883
        """
852
884
        with self.safety_net():
853
 
            self._check_server_version(self.server, "0.4.0.dev")
 
885
            self._check_server_version(self.server, "0.4")
854
886
            return self.server.data_views()
855
887
 
856
888
    def reparse_arguments(self, parser, raw_args):
888
920
    def invoke_remote(self):
889
921
        if self.data_views is None:
890
922
            return -1
891
 
        self._check_server_version(self.server, "0.4.0.dev")
 
923
        self._check_server_version(self.server, "0.4")
892
924
        # Build a collection of arguments for data view
893
925
        data_view_args = {}
894
926
        for argument in self.args.data_view["arguments"]: