Esempio n. 1
0
    def _load_parameters(cls, masteruri, params, clear_params):
        """
    Load parameters onto the parameter server
    """
        import roslaunch
        import roslaunch.launch
        import xmlrpclib
        param_server = xmlrpclib.ServerProxy(masteruri)
        p = None
        try:
            # multi-call style xmlrpc
            param_server_multi = xmlrpclib.MultiCall(param_server)

            # clear specified parameter namespaces
            # #2468 unify clear params to prevent error
            for p in clear_params:
                param_server_multi.deleteParam(rospy.get_name(), p)
            r = param_server_multi()
            #      for code, msg, _ in r:
            #        if code != 1:
            #          raise StartException("Failed to clear parameter: %s"%(msg))

            # multi-call objects are not reusable
            param_server_multi = xmlrpclib.MultiCall(param_server)
            for p in params.itervalues():
                # suppressing this as it causes too much spam
                #printlog("setting parameter [%s]"%p.key)
                param_server_multi.setParam(rospy.get_name(), p.key, p.value)
            r = param_server_multi()
            for code, msg, _ in r:
                if code != 1:
                    raise StartException("Failed to set parameter: %s" % (msg))
        except roslaunch.core.RLException, e:
            raise StartException(e)
Esempio n. 2
0
def _load_parameters(masteruri, params, clear_params):
    """
    Load parameters onto the parameter server
    """
    param_server = xmlrpcclient.ServerProxy(masteruri)
    p = None
    abs_paths = list()  # tuples of (parameter name, old value, new value)
    not_found_packages = list()  # packages names
    param_errors = []
    try:
        socket.setdefaulttimeout(6 + len(clear_params))
        # multi-call style xmlrpc
        param_server_multi = xmlrpcclient.MultiCall(param_server)

        # clear specified parameter namespaces
        # #2468 unify clear params to prevent error
        for p in clear_params:
            param_server_multi.deleteParam(rospy.get_name(), p)
        r = param_server_multi()
        for code, msg, _ in r:
            if code != 1 and not msg.find("is not set"):
                rospy.logwarn("Failed to clear parameter: %s", msg)


#          raise StartException("Failed to clear parameter: %s"%(msg))

# multi-call objects are not reusable
        socket.setdefaulttimeout(6 + len(params))
        param_server_multi = xmlrpcclient.MultiCall(param_server)
        for pkey, pval in params.items():
            value = pval
            # resolve path elements
            if isstring(value) and (value.startswith('$')):
                value = interpret_path(value)
                rospy.logdebug("interpret parameter '%s' to '%s'" %
                               (value, pval))
            # add parameter to the multicall
            param_server_multi.setParam(rospy.get_name(), pkey, value)
            test_ret = _test_value(pkey, value)
            if test_ret:
                param_errors.extend(test_ret)
        r = param_server_multi()
        for code, msg, _ in r:
            if code != 1:
                raise exceptions.StartException("Failed to set parameter: %s" %
                                                (msg))
    except roslaunch.core.RLException as e:
        raise exceptions.StartException(e)
    except rospkg.ResourceNotFound as rnf:
        raise exceptions.StartException(
            "Failed to set parameter. ResourceNotFound: %s" % (rnf))
    except Exception as e:
        raise exceptions.StartException(
            "Failed to set parameter. ROS Parameter Server "
            "reports: %s\n\n%s" % (e, '\n'.join(param_errors)))
    finally:
        socket.setdefaulttimeout(None)
    return abs_paths, not_found_packages
Esempio n. 3
0
    def _load_parameters(cls, masteruri, params, clear_params, user, pw,
                         auto_pw_request):
        """
    Load parameters onto the parameter server
    """
        import roslaunch
        import roslaunch.launch
        param_server = xmlrpclib.ServerProxy(masteruri)
        p = None
        abs_paths = list()  # tuples of (parameter name, old value, new value)
        not_found_packages = list()  # packages names
        try:
            socket.setdefaulttimeout(6 + len(clear_params))
            # multi-call style xmlrpc
            param_server_multi = xmlrpclib.MultiCall(param_server)

            # clear specified parameter namespaces
            # #2468 unify clear params to prevent error
            for p in clear_params:
                param_server_multi.deleteParam(rospy.get_name(), p)
            r = param_server_multi()
            for code, msg, _ in r:
                if code != 1 and not msg.find("is not set"):
                    rospy.logwarn("Failed to clear parameter: %s", msg)
#          raise StartException("Failed to clear parameter: %s"%(msg))

# multi-call objects are not reusable
            socket.setdefaulttimeout(6 + len(params))
            param_server_multi = xmlrpclib.MultiCall(param_server)
            for p in params.itervalues():
                # suppressing this as it causes too much spam
                value, is_abs_path, found, package = cls._resolve_abs_paths(
                    p.value,
                    nm.nameres().address(masteruri), user, pw, auto_pw_request)
                if is_abs_path:
                    abs_paths.append((p.key, p.value, value))
                    if not found and package:
                        not_found_packages.append(package)
                if p.value is None:
                    rospy.logwarn("The parameter '%s' is invalid: '%s'" %
                                  (p.key, p.value))
                    #raise StartException("The parameter '%s' is invalid: '%s'"%(p.key, p.value))
                else:
                    param_server_multi.setParam(
                        rospy.get_name(), p.key,
                        value if is_abs_path else p.value)
            r = param_server_multi()
            for code, msg, _ in r:
                if code != 1:
                    raise StartException("Failed to set parameter: %s" % (msg))
        except roslaunch.core.RLException, e:
            raise StartException(e)
Esempio n. 4
0
def package_releases(packages):
    mcall = xmlrpclib.MultiCall(client)
    called_packages = deque()
    for package in packages:
        mcall.package_releases(package, True)
        called_packages.append(package)
        if len(called_packages) == 100:
            result = mcall()
            mcall = xmlrpclib.MultiCall(client)
            for releases in result:
                yield called_packages.popleft(), releases
    result = mcall()
    for releases in result:
        yield called_packages.popleft(), releases
Esempio n. 5
0
 def _unreg_on_finish(self):
     with self.__lock_info:
         self.__unregistered = True
         try:
             rospy.logdebug("    SyncThread[%s] clear all registrations", self.name)
             socket.setdefaulttimeout(5)
             own_master = xmlrpcclient.ServerProxy(self.masteruri_local)
             own_master_multi = xmlrpcclient.MultiCall(own_master)
             # end routine if the master was removed
             for topic, _topictype, node, uri in self.__subscriber:
                 rospy.logdebug("    SyncThread[%s]   unsibscribe %s [%s]" % (self.name, topic, node))
                 own_master_multi.unregisterSubscriber(node, topic, uri)
                 # TODO: unregister a remote subscriber while local publisher is still there
                 # Note: the connection between running components after unregistration is stil there!
             for topic, _topictype, node, uri in self.__publisher:
                 rospy.logdebug("    SyncThread[%s]   unadvertise %s [%s]" % (self.name, topic, node))
                 own_master_multi.unregisterPublisher(node, topic, uri)
             for service, serviceuri, node, uri in self.__services:
                 rospy.logdebug("    SyncThread[%s]   unregister service %s [%s]" % (self.name, service, node))
                 own_master_multi.unregisterService(node, service, serviceuri)
             rospy.logdebug("    SyncThread[%s] execute a MultiCall", self.name)
             _ = own_master_multi()
             rospy.logdebug("    SyncThread[%s] finished", self.name)
         except:
             rospy.logerr("SyncThread[%s] ERROR while ending: %s", self.name, traceback.format_exc())
         socket.setdefaulttimeout(None)
Esempio n. 6
0
    def wrapped_func(self, command):
        # Dummy function, so that the string appears in a .po file
        _ = lambda x: x

        self.token = None
        self.multicall = xmlrpclib.MultiCall(self.connection)
        jid = command.jid
        if type(jid) is not list:
            jid = [jid]

        try:
            try:
                self.get_auth_token(command.jid)
                if self.token:
                    self.multicall.applyAuthToken(self.token)

                function(self, command)
                self.commands_out.put_nowait(command)

            except xmlrpclib.Fault, fault:
                msg = _("Your request has failed. The reason is:\n%(error)s")
                self.log.error(str(fault))
                self.report_error(jid, msg, {'error': fault.faultString})
            except xmlrpclib.Error, err:
                msg = _("A serious error occurred while processing your request:\n%(error)s")
                self.log.error(str(err))
                self.report_error(jid, msg, {'error': str(err)})
Esempio n. 7
0
def release_data(packages):
    mcall = xmlrpclib.MultiCall(client)
    i = 0
    for package, releases in package_releases(packages):
        for version in releases:
            mcall.release_urls(package, version)
            mcall.release_data(package, version)
            i += 1
            if i % 50 == 49:
                result = mcall()
                mcall = xmlrpclib.MultiCall(client)
                for urls, data in by_two(result):
                    yield urls, data
    result = mcall()
    for urls, data in by_two(result):
        yield urls, data
Esempio n. 8
0
 def get_multi(self):
     """
     @return: multicall XMLRPC proxy for communicating with master
     @rtype: xmlrpclib.MultiCall
     """
     import xmlrpclib
     return xmlrpclib.MultiCall(self.get())
Esempio n. 9
0
def registerais(registeredais):
   print registeredais

   multicall = xmlrpclib.MultiCall(getxmlrpcproxy())
   for i in xrange( unitsync.GetSkirmishAICount() ):
      shortname = ''
      version = ''
      for j in xrange( unitsync.GetSkirmishAIInfoCount(i) ):
         if unitsync.GetInfoKey(j) == "shortName":
            shortname = unitsync.GetInfoValue(j)
         if unitsync.GetInfoKey(j) == "version":
            version = unitsync.GetInfoValue(j)
         
      if shortname != '' and version != '':
         if registeredais.count( [ shortname, version ] ) == 0:
            print "registering ai " + shortname + " version " + version + " ..."
            multicall.registersupportedai( config.botrunnername, config.sharedsecret, shortname, version )
   results = multicall()
   successcount = 0
   total = 0
   for result in results:
      total = total + 1
      if result[0]:
         successcount = successcount + 1
   if total > 0:
      print str(successcount) + " successes out of " + str(total)
Esempio n. 10
0
    def test(self):
        try:
            import xmlrpclib
        except ImportError:
            import xmlrpc.client as xmlrpclib

        emailid = BMConfigParser().get('bitmessagesettings', 'apiusername')
        password = BMConfigParser().get('bitmessagesettings', 'apipassword')
        uri = 'http://%s:%s@%s:%d/' % (emailid, password, self.interface, self.port)

        ret = False
        try:
            api = xmlrpclib.ServerProxy(uri)
            print('api: %s' % api)
            response = api.system.listMethods()
            if response:
                print('Methods = %s' % response)
            print('MultiCall...')
            multi = xmlrpclib.MultiCall(api)
            multi.add(1, 2)
            multi.add(2, 3)
            for response in multi():
                print(response)
            ret = True
        except TypeError as err:  # unsupported XML-RPC protocol
            print('XML-RPC not initialed correctly. {%s}\n' % str(err))
        except xmlrpclib.Fault as err:
            print('API returns Fault error. {%s}\n' % str(err))
        except Exception as err:  # /httplib.BadStatusLine: connection close immediatly
            print('Unexpected error. {%s}\n' % sys.exc_info()[0])

        if ret is False:
            logger.exception(err)

        return ret
Esempio n. 11
0
    def call(self):
        """Execute added multicall calls

        @return: the results (post-processed), in the order they were added
        @rtype: tuple
        """
        m = xmlrpclib.MultiCall(self.rt_obj._get_conn())
        for call in self.calls:
            method, args = call
            rpc_call = getattr(method, "rpc_call")
            getattr(m, rpc_call)(*args)

        results = m()
        results = tuple(results)
        results_processed = []

        for r, c in zip(results, self.calls):
            method = c[0]  # Method instance
            result = process_result(method, r)
            results_processed.append(result)
            # assign result to class_obj
            exists = hasattr(self.class_obj, method.varname)
            if not exists or not inspect.ismethod(getattr(self.class_obj, method.varname)):
                setattr(self.class_obj, method.varname, result)

        return(tuple(results_processed))
Esempio n. 12
0
    def _multicall(self):
        '''This returns kind of a mash-up of the Bugzilla object and the
        xmlrpclib.MultiCall object. Methods you call on this object will be
        added to the MultiCall queue, but they will return None. When you're
        ready, call the run() method and all the methods in the queue will be
        run and the results of each will be returned in a list. So, for example:

        mc = bz._multicall()
        mc._getbug(1)
        mc._getbug(1337)
        mc._query({'component':'glibc','product':'Fedora','version':'devel'})
        (bug1, bug1337, queryresult) = mc.run()

        Note that you should only use the raw xmlrpc calls (mostly the methods
        starting with an underscore). Normal getbug(), for example, tries to
        return a _Bug object, but with the multicall object it'll end up empty
        and, therefore, useless.

        Further note that run() returns a list of raw xmlrpc results; you'll
        need to wrap the output in Bug objects yourself if you're doing that
        kind of thing. For example, Bugzilla.getbugs() could be implemented:

        mc = self._multicall()
        for id in idlist:
            mc._getbug(id)
        rawlist = mc.run()
        return [_Bug(self,dict=b) for b in rawlist]
        '''
        mc = copy.copy(self)
        mc._proxy = xmlrpclib.MultiCall(self._proxy)
        def run(): return mc._proxy().results
        mc.run = run
        return mc
Esempio n. 13
0
def convert_wiki(source, dest, dest_project_id):
    if overwrite and (method == 'direct'):
        dest.clear_wiki_attachments(dest_project_id)

    exclude_authors = [a.strip() for a in config.get('wiki', 'exclude_authors').split(',')]
    target_directory = config.get('wiki', 'target-directory')
    server = xmlrpclib.MultiCall(source)
    for name in source.wiki.getAllPages():
        info = source.wiki.getPageInfo(name)
        if (info['author'] not in exclude_authors):
            page = source.wiki.getPage(name)
            print("Page %s:%s" % (name, info))
            if (name == 'WikiStart'):
                name = 'home'
            converted = trac2down.convert(page, os.path.dirname('/wikis/%s' % name))
            if method == 'direct':
                for attachment in source.wiki.listAttachments(name):
                    print(attachment)
                    binary_attachment = source.wiki.getAttachment(attachment).data
                    try:
                        attachment_path = dest.create_wiki_attachment(dest_project_id, users_map[info['author']], convert_xmlrpc_datetime(info['lastModified']), attachment, binary_attachment)
                    except KeyError:
                        attachment_path = dest.create_wiki_attachment(dest_project_id, default_user, convert_xmlrpc_datetime(info['lastModified']), attachment, binary_attachment)
                    attachment_name = attachment.split('/')[-1]
                    converted = converted.replace(r'](%s)' % attachment_name, r'](%s)' % os.path.relpath(attachment_path, '/namespace/project/wiki/page'))
            trac2down.save_file(converted, name, info['version'], info['lastModified'], info['author'], target_directory)
Esempio n. 14
0
def collect_users(source):

    get_all_tickets = xmlrpclib.MultiCall(source)

    for ticket in source.ticket.query("max=0&order=id"):
        get_all_tickets.ticket.get(ticket)

    ticket_index = 0

    for src_ticket in get_all_tickets():
        src_ticket_id = src_ticket[0]
        src_ticket_data = src_ticket[3]

        print("ticket id: %s" % src_ticket_id)
        print("ticket index: %s" % ticket_index)
        print("owner: %s" % src_ticket_data['owner'])
        print("reporter: %s" % src_ticket_data['reporter'])
        ticket_owners.add(src_ticket_data['owner'])
        ticket_reporters.add(src_ticket_data['reporter'])

        changelog = source.ticket.changeLog(src_ticket_id)
        for change in changelog:
            change_type = change[2]
            if (change_type == "comment") and change[4] != '':
                print "ticket message poster: ", change[1]
                ticket_message_posters.add(change[1])

        ticket_index += 1
Esempio n. 15
0
 def get_pages(self, **kwargs):
     options = {
         "include_revno": True,
         "include_deleted": True,
         "exclude_non_writable": kwargs["exclude_non_writable"],
         "include_underlay": False,
         "prefix": self.prefix,
         "pagelist": self.pagelist,
         "mark_deleted": True
     }
     if self.token:
         m = xmlrpclib.MultiCall(self.connection)
         m.applyAuthToken(self.token)
         m.getAllPagesEx(options)
         tokres, pages = m()
     else:
         pages = self.connection.getAllPagesEx(options)
     rpages = []
     for name, revno in pages:
         normalised_name = normalise_pagename(name, self.prefix)
         if normalised_name is None:
             continue
         if abs(revno) != 99999999:  # I love sane in-band signalling
             remote_rev = abs(revno)
             remote_deleted = revno < 0
             rpages.append(
                 SyncPage(normalised_name,
                          remote_rev=remote_rev,
                          remote_name=name,
                          remote_deleted=remote_deleted))
     return rpages
Esempio n. 16
0
 def run(self):
     '''
     '''
     if self._masteruri:
         result = dict()
         for p in self._params:
             result[p] = None
         try:
             name = rospy.get_name()
             master = xmlrpclib.ServerProxy(self._masteruri)
             param_server_multi = xmlrpclib.MultiCall(master)
             for p in self._params:
                 param_server_multi.getParam(name, p)
             r = param_server_multi()
             for index, (code, msg, value) in enumerate(r):
                 result[self._params[index]] = (code, msg, value)
             self.parameter_values_signal.emit(self._masteruri, 1, '',
                                               result)
         except Exception:
             import traceback
             #        err_msg = "Error while retrieve parameter values from %s: %s"%(self._masteruri, traceback.format_exc(1))
             #        rospy.logwarn(err_msg)
             #        lines = traceback.format_exc(1).splitlines()
             self.parameter_values_signal.emit(self._masteruri, -1,
                                               traceback.format_exc(1),
                                               result)
Esempio n. 17
0
 def run(self):
     '''
     '''
     if self._masteruri:
         result = dict()
         names = self._params.keys()
         for p in names:
             result[p] = None
         try:
             name = rospy.get_name()
             master = xmlrpclib.ServerProxy(self._masteruri)
             param_server_multi = xmlrpclib.MultiCall(master)
             for p, v in self._params.items():
                 param_server_multi.setParam(name, p, v)
             r = param_server_multi()
             for index, (code, msg, value) in enumerate(r):
                 result[names[index]] = (code, msg, value)
             self.result_signal.emit(self._masteruri, 1, '', result)
         except Exception:
             import traceback
             err_msg = "Error while deliver parameter values to %s: %s" % (
                 self._masteruri, traceback.format_exc(1))
             rospy.logwarn(err_msg)
             #        lines = traceback.format_exc(1).splitlines()
             self.result_signal.emit(self._masteruri, -1, err_msg, result)
Esempio n. 18
0
    def get(self, tid):
        try:
            tid = int(tid)
            mc = xmlrpclib.MultiCall(trac.server)
            mc.ticket.get(tid)
            mc.ticket.changeLog(tid)
            mc.ticket.listAttachments(tid)
            mc.ticket.getActions(tid)
            ticket, changelog, attachments, actions = [c for c in mc()]
            self.current = {
                'id': tid,
                '_ts': ticket[3].get('_ts'),
                'summary': ticket[3]['summary'],
                'description': ticket[3]['description'],
            }
            self.get_actions(actions=actions)
            self.attachments = [a[0] for a in attachments]
        except (TypeError, ValueError):
            return 'Please select a ticket'
        except Exception as e:
            return 'An error occured:\n\t{0}'.format(e)

        sticket = ['= Ticket #{0} ='.format(tid), '']
        for f in self.fields:
            if f['name'] == 'description':
                continue
            if f['type'] == 'time':
                v = get_time(ticket[3][f['name']], True)
            else:
                v = ticket[3].get(f['name'], '')
            sticket.append(u' * {0:>{2}}: {1}'.format(f['label'], v,
                                                      self.max_label_width))

        sticket.extend([
            '', '= Description =', '', ticket[3]['description'], '',
            '= Changelog ='
        ])

        ctime = [None, None]
        for change in changelog:
            if not change[4] or change[2].startswith('_'):
                continue

            my_time = get_time(change[0], True)
            nctime = [my_time, change[1]]
            if ctime != nctime:
                sticket.extend(['', u'== {0} ({1}) =='.format(*nctime), ''])
                ctime = nctime
            if change[2] == 'comment':
                sticket.append(change[4])
            elif change[2] in ('summary', 'description'):
                sticket.append('{0} changed'.format(change[2]))
            else:
                changes = (self.get_label(change[2]), change[3], change[4])
                csf = u' * {0}: {1} > {2}' if change[3] else u' * {0}: {2}'
                sticket.append(csf.format(*changes))

        sticket.extend(['', '== Action ==', ''])
        sticket.extend([' - {0}'.format(action[0]) for action in actions])
        return u'\n'.join(sticket)
Esempio n. 19
0
 def _unreg_on_finish(self):
     with self.__lock_info:
         self.__unregistered = True
         try:
             rospy.logdebug("    SyncThread[%s] clear all registrations",
                            self.name)
             socket.setdefaulttimeout(5)
             own_master = xmlrpclib.ServerProxy(self.masteruri_local)
             own_master_multi = xmlrpclib.MultiCall(own_master)
             # end routine if the master was removed
             for topic, node, uri in self.__subscriber:
                 own_master_multi.unregisterSubscriber(node, topic, uri)
             for topic, node, uri in self.__publisher:
                 own_master_multi.unregisterPublisher(node, topic, uri)
             for service, serviceuri, node, uri in self.__services:
                 own_master_multi.unregisterService(node, service,
                                                    serviceuri)
             rospy.logdebug("    SyncThread[%s] execute a MultiCall",
                            self.name)
             _ = own_master_multi()
             rospy.logdebug("    SyncThread[%s] finished", self.name)
         except:
             rospy.logerr("SyncThread[%s] ERROR while ending: %s",
                          self.name, traceback.format_exc())
         socket.setdefaulttimeout(None)
Esempio n. 20
0
    def update(self, info_hash, fields):
        multi_call = xmlrpclib.MultiCall(self._server)

        for key, val in fields.iteritems():
            method_name = 'd.%s.set' % key
            getattr(multi_call, method_name)(info_hash, str(val))

        return multi_call()[0]
 def run(self):
     print("Starting On " + self.stressWorker)
     server = xmlrpclib.ServerProxy("http://" + self.stressWorker + ":8001")
     multi = xmlrpclib.MultiCall(server)
     multi.do_run(self.cpuStress, self.memStress, self.killTimeout)
     multi.do_kill(self.killTimeout)
     for response in multi():
         print(str(response))
Esempio n. 22
0
 def query_tickets(self, query):
     """ Queries a server for tickets matching the query string """
     multicall = xmlrpc.MultiCall(self.proxy)
     try:
         ticket_ids = self.proxy.ticket.query(query)
     except xmlrpc.Fault, e:
         raise CallFailed, "Code %s: %s" % (e.faultCode,
                                            e.faultString)
Esempio n. 23
0
def getToc(proxy):
    mc = xmlrpclib.MultiCall(proxy)
    auth_token = proxy.getAuthToken(name, password)
    mc.applyAuthToken(auth_token)
    mc.getAllPages()
    result = mc()

    return result[0], result[1]
Esempio n. 24
0
def run_client(host, port):
    proxy = xmlrpclib.ServerProxy("http://%s:%s/" % (host, port))
    multicall = xmlrpclib.MultiCall(proxy)
    multicall.add(7, 3)
    multicall.subtract(7, 3)
    multicall.multiply(7, 3)
    multicall.divide(7, 3)
    result = multicall()
    print "7+3:%d, 7-3:%d, 7*3:%d, 7/3:%d" % tuple(result)
Esempio n. 25
0
	def update(self):
		"""Retrieve the latest data about a file."""
		m = xmlrpclib.MultiCall(self.server)
		m.f.get_path(self['hash'], self['index'])
		m.f.get_priority(self['hash'], self['index'])

		results = m()

		self['name'] = results[0]
		self['priority'] = results[1]
Esempio n. 26
0
def run_client(host, port):
    # client code
    proxy = xmlrpclib.ServerProxy("http://%s:%s/" % (host, port))
    multicall = xmlrpclib.MultiCall(proxy)
    multicall.add(10, 5)
    multicall.subtract(10, 5)
    multicall.multiply(10, 5)
    multicall.divide(10, 5)
    result = multicall()
    print "10+5=%d, 10-5=%d, 10*5=%d, 10/5=%d" % tuple(result)
Esempio n. 27
0
def convert_wiki(source, dest):
    exclude_authors = ['trac']

    if not os.path.isdir(wiki_export_dir):
        os.makedirs(wiki_export_dir)

    xmlrpclib.MultiCall(source)
    for pagename in source.wiki.getAllPages():
        info = source.wiki.getPageInfo(pagename)
        if info['author'] in exclude_authors:
            continue

        page = source.wiki.getPage(pagename)
        print "Migrate Wikipage", pagename
        if pagename == 'WikiStart':
            pagename = 'Home'
        converted = trac2markdown(page, os.path.dirname('/wiki/%s' % pagename))

        attachments = []
        for attachment in source.wiki.listAttachments(
                pagename if pagename != 'Home' else 'WikiStart'):
            print "  Attachment", attachment
            attachmentname = os.path.basename(attachment)
            attachmentdata = source.wiki.getAttachment(attachment).data

            dirname = os.path.join(wiki_export_dir, pagename)
            if not os.path.isdir(dirname):
                os.makedirs(dirname)
            # write attachment data to binary file
            open(os.path.join(dirname, attachmentname),
                 'wb').write(attachmentdata)
            attachmenturl = pagename + '/' + attachmentname

            converted = re.sub(
                r'\[attachment:%s\s([^\[\]]+)\]' % re.escape(attachmentname),
                r'[\1](%s)' % attachmenturl, converted)

            attachments.append((attachmentname, attachmenturl))

        # add a list of attachments
        if len(attachments) > 0:
            converted += '\n---\n\nAttachments:\n'
            for (name, url) in attachments:
                converted += ' * [' + name + '](' + url + ')\n'

        # TODO we could use the GitHub API to write into the Wiki repository of the GitHub project
        try:
            open(os.path.join(wiki_export_dir, pagename + '.md'),
                 'w').write(converted)
        except UnicodeEncodeError as e:
            print 'EXCEPTION:', e
            print '  Context:', e.object[e.start - 20:e.end + 20]
            print '  Retrying with UTF-8 encoding'
            codecs.open(os.path.join(wiki_export_dir, pagename + '.md'), 'w',
                        'utf-8').write(converted)
Esempio n. 28
0
    def get_changelogs(self, tickets):
        """
        Queries the server for multiple changelogs

        Returns a dict of {ticket_id: log}
        """
        multicall = xmlrpc.MultiCall(self.proxy)
        for ticket in tickets:
            multicall.ticket.changeLog(ticket.id)
        ticket_ids = [ticket.id for ticket in tickets]
        logs = [log for log in multicall()]
        return dict(zip(ticket_ids, logs))
Esempio n. 29
0
def registercapabilities():
   multicall = xmlrpclib.MultiCall(getxmlrpcproxy())
   multicall.getsupportedmaps( config.botrunnername, config.sharedsecret )
   multicall.getsupportedmods( config.botrunnername, config.sharedsecret )
   multicall.getsupportedais( config.botrunnername, config.sharedsecret )
   resultsets = multicall()
   registeredmaps = resultsets[0]
   registeredmods = resultsets[1]
   registeredais = resultsets[2]
   registermaps(registeredmaps)
   registermods(registeredmods)
   registerais(registeredais)
    def migrate_tickets(self):
        print("Loading information from Trac…", file=sys.stderr)

        get_all_tickets = xmlrpclib.MultiCall(self.trac)

        for ticket in self.trac.ticket.query("max=0&order=id"):
            get_all_tickets.ticket.get(ticket)

        # Take the memory hit so we can rewrite ticket references:
        all_trac_tickets = list(get_all_tickets())
        all_trac_tickets.sort(key=lambda t: int(t[0]))

        print ("Creating GitHub tickets…", file=sys.stderr)
        for trac_id, time_created, time_changed, attributes in all_trac_tickets:
            title = "%s (Trac #%d)" % (attributes['summary'], trac_id)

            body = self.fix_wiki_syntax(attributes['description'])
            body += "\n\nMigrated from %s\n" % urljoin(self.trac_public_url, "/ticket/%d" % trac_id)
            text_attributes = {k: convert_value_for_json(v) for k, v in attributes.items()}
            body += "```json\n" + json.dumps(text_attributes, indent=4) + "\n```\n"

            milestone = self.get_gh_milestone(attributes['milestone'])
            assignee = self.get_github_username(attributes['owner'])

            labels = []
            # User does not exist in GitHub -> Add username as label
            if (assignee is GithubObject.NotSet and (attributes['owner'] and attributes['owner'].strip())):
                labels = self.get_mapped_labels('owner', attributes['owner'])

            for attr in ('type', 'component', 'resolution', 'priority', 'keywords'):
                labels += self.get_mapped_labels(attr, attributes.get(attr))

            for i, j in self.gh_issues.items():
                if i == title:
                    gh_issue = j
                    if (assignee is not GithubObject.NotSet and
                        (not gh_issue.assignee
                         or (gh_issue.assignee.login != assignee.login))):
                        gh_issue.edit(assignee=assignee)
                    break
            else:
                gh_issue = self.import_issue(title, assignee, body,
                                             milestone, labels,
                                             attributes, self.get_trac_comments(trac_id))
                print ("\tInitiated issue: %s (%s)" % (title, gh_issue), file=sys.stderr)
                self.gh_issues[title] = gh_issue

        print("Checking completion…", file=sys.stderr)

        for trac_id, time_created, time_changed, attributes in all_trac_tickets:
            gh_issue = self.github_repo.get_issue(trac_id)
            print("\t%s (%s)" % (gh_issue.title, gh_issue.html_url), file=sys.stderr)