예제 #1
0
파일: api.py 프로젝트: panickervinod/mazer
    def lookup_content_by_name(self,
                               user_name,
                               repo_name,
                               content_name,
                               content_type=None,
                               notify=True):
        self.log.debug('user_name=%s', user_name)
        self.log.debug('repo_name=%s', repo_name)
        self.log.debug('content_name=%s', content_name)
        self.log.debug('content_type=%s', content_type)
        self.log.debug('notify=%s', notify)

        content_name = urlquote(content_name)
        repo_name = urlquote(repo_name)

        if notify:
            self.log.info(
                "- downloading content '%s', type '%s',repo_name '%s'  owned by %s",
                content_name, content_type, repo_name, user_name)

        url = '%s/content/?owner__username=%s&name=%s' % (
            self.baseurl, user_name, content_name)
        data = self.__call_galaxy(url)
        if len(data["results"]) != 0:
            return data["results"][0]
        return None
    def create_client_protocol_mapper(self, realm_name, client, mapper):
        id = client['id']
        cmd_name = ("create protocol-mapper '{mapper_name}' for client {id} "
                    "in realm '{realm}'".format(mapper_name=mapper['name'],
                                                id=client['clientId'],
                                                realm=realm_name))
        url = POST_CLIENT_PROTOCOL_MAPPER_TEMPLATE.format(
            server=self.server, realm=urlquote(realm_name), id=urlquote(id))

        logger.debug("%s on server %s", cmd_name, self.server)

        response = self.session.post(url, json=mapper)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if response.status_code != requests.codes.created:
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, response.text)
    def create_client_protocol_mapper(self, realm_name, client, mapper):
        obj_id = client['id']
        cmd_name = ('create protocol-mapper "{mapper_name}" for clientid {clientid} '
                    'in realm "{realm}"'.format(
                        mapper_name=mapper['name'],
                        clientid=client['clientId'],
                        realm=realm_name))
        url = URL_CLIENT_PROTOCOL_MAPPER_MODEL.format(
            server=self.server,
            realm=urlquote(realm_name),
            id=urlquote(obj_id))

        self._log_rest_request(cmd_name, url, mapper)
        response = self.session.post(url, json=mapper)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if response.status_code != requests.codes.created: # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
    def create_client_protocol_mapper(self, realm_name, client, mapper):
        obj_id = client['id']
        cmd_name = (
            'create protocol-mapper "{mapper_name}" for clientid {clientid} '
            'in realm "{realm}"'.format(mapper_name=mapper['name'],
                                        clientid=client['clientId'],
                                        realm=realm_name))
        url = URL_CLIENT_PROTOCOL_MAPPER_MODEL.format(
            server=self.server,
            realm=urlquote(realm_name),
            id=urlquote(obj_id))

        self._log_rest_request(cmd_name, url, mapper)
        response = self.session.post(url, json=mapper)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if response.status_code != requests.codes.created:  # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
    def update_client(self, realm_name, client):
        id = client['id']
        cmd_name = "update client {id} in realm '{realm}'".format(
            id=client['clientId'], realm=realm_name)
        url = CLIENT_REPRESENTATION_TEMPLATE.format(server=self.server,
                                                    realm=urlquote(realm_name),
                                                    id=urlquote(id))

        logger.debug("%s on server %s", cmd_name, self.server)

        response = self.session.put(url, json=client)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if response.status_code != requests.codes.no_content:
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, response.text)
예제 #6
0
 def lookup_repo_by_name(self, namespace, name):
     namespace = urlquote(namespace)
     name = urlquote(name)
     url = '%s/repositories/?name=%s&provider_namespace__namespace__name=%s' % (self.baseurl, name, namespace)
     data = self.__call_galaxy(url, http_method='GET')
     if data["results"]:
         return data["results"][0]
     return {}
예제 #7
0
    def get_collection_detail(self, namespace, name):
        namespace = urlquote(namespace)
        name = urlquote(name)
        url = "%s%s" % (self.base_api_url,
                        '/v2/collections/{namespace}/{name}'.format(
                            namespace=namespace, name=name))

        data = self.__call_galaxy(url, http_method='GET')
        return data
예제 #8
0
    def get_collection_detail(self, namespace, name):
        namespace = urlquote(namespace)
        name = urlquote(name)
        url = "%s%s" % (self.base_api_url,
                        '/v2/collections/{namespace}/{name}'.format(
                            namespace=namespace, name=name))

        data = self.get_object(href=url)
        return data
예제 #9
0
    def get_collection_version_list(self, namespace, name):
        namespace = urlquote(namespace)
        name = urlquote(name)
        # TODO: in theory, this url isn't fixed, but based on the 'versions' field of CollectionDetail
        url = "%s%s" % (self.base_api_url,
                        '/v2/collections/{namespace}/{name}/versions/'.format(
                            namespace=namespace, name=name))

        data = self._get_paginated_list(url)
        return data
예제 #10
0
파일: api.py 프로젝트: alikins/mazer_old
    def lookup_content_repo_by_name(self, namespace, name):
        namespace = urlquote(namespace)
        name = urlquote(name)

        url = '%s/content/?repository__name=%s&namespace__name=%s' % (
            self.baseurl, name, namespace)
        data = self.__call_galaxy(url)
        if len(data["results"]) != 0:
            return data["results"][0]
        return None
예제 #11
0
파일: api.py 프로젝트: panickervinod/mazer
 def lookup_repo_by_name(self, namespace, name):
     self.log.debug('user_name=%s', namespace)
     self.log.debug('name=%s', name)
     namespace = urlquote(namespace)
     name = urlquote(name)
     url = '%s/repositories/?name=%s&provider_namespace__namespace__name=%s' % (
         self.baseurl, name, namespace)
     data = self.__call_galaxy(url)
     if len(data["results"]) != 0:
         return data["results"][0]
     return None
예제 #12
0
    def process_job_folder(self, folder, folder_path):
        folder_path += '/job/%s' % urlquote(folder['name'])
        data = self.get_data(self.python_api_url(folder_path),
                             tree='jobs[name,color]')
        result = []

        for job in data.get('jobs', []):
            if 'color' not in job.keys():
                result += self.process_job_folder(job, folder_path)
            else:
                job['url'] = '%s/job/%s' % (folder_path, urlquote(job['name']))
                result.append(job)

        return result
예제 #13
0
    def process_job_folder(self, folder, folder_path):
        folder_path += '/job/%s' % urlquote(folder['name'])
        data = self.get_data(self.python_api_url(folder_path),
                             tree='jobs[name,color]')
        result = []

        for job in data.get('jobs', []):
            if 'color' not in job.keys():
                result += self.process_job_folder(job, folder_path)
            else:
                job['url'] = '%s/job/%s' % (folder_path, urlquote(job['name']))
                result.append(job)

        return result
예제 #14
0
파일: utils.py 프로젝트: WurstWorks/datalad
def get_local_file_url(fname):
    """Return OS specific URL pointing to a local file

    Parameters
    ----------
    fname : string
        Full filename
    """
    if on_windows:
        fname_rep = fname.replace("\\", "/")
        furl = "file:///%s" % urlquote(fname_rep)
        lgr.debug("Replaced '\\' in file's url: %s" % furl)
    else:
        furl = "file://%s" % urlquote(fname)
    return furl
예제 #15
0
파일: utils.py 프로젝트: glalteva/datalad
def get_local_file_url(fname):
    """Return OS specific URL pointing to a local file

    Parameters
    ----------
    fname : string
        Full filename
    """
    if on_windows:
        fname_rep = fname.replace('\\', '/')
        furl = "file:///%s" % urlquote(fname_rep)
        lgr.debug("Replaced '\\' in file\'s url: %s" % furl)
    else:
        furl = "file://%s" % urlquote(fname)
    return furl
예제 #16
0
파일: toolshed.py 프로젝트: davebx/toolshed
    def show(self, trans, **kwd):
        """
        GET /api/tool_shed/contents

        Display a list of categories in the selected toolshed.

        :param tool_shed_url: the url of the toolshed to get categories from
        """
        tool_shed_url = urlunquote(kwd.get('tool_shed_url', ''))
        tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry(
            trans.app, tool_shed_url)
        url = util.build_url(tool_shed_url, pathspec=['api', 'categories'])
        categories = []
        try:
            for category in json.loads(util.url_get(url)):
                api_url = web.url_for(controller='api/tool_shed',
                                      action='category',
                                      tool_shed_url=urlquote(tool_shed_url),
                                      category_id=category['id'],
                                      qualified=True)
                category['url'] = api_url
                categories.append(category)
        except Exception:
            raise exceptions.ObjectNotFound("Tool Shed %s is not responding." %
                                            tool_shed_url)
        return categories
예제 #17
0
파일: node.py 프로젝트: jerrysf/jenkinsapi
    def toggle_temporarily_offline(self, message="requested from jenkinsapi"):
        """
        Switches state of connected node (online/offline) and
        set 'temporarilyOffline' property (True/False)
        Calling the same method again will bring node status back.
        :param message: optional string can be used to explain why you
            are taking this node offline
        """
        initial_state = self.is_temporarily_offline()
        url = self.baseurl + \
            "/toggleOffline?offlineMessage=" + urlquote(message)
        try:
            html_result = self.jenkins.requester.get_and_confirm_status(url)
        except PostRequired:
            html_result = self.jenkins.requester.post_and_confirm_status(
                url,
                data={})

        self.poll()
        log.debug(html_result)
        state = self.is_temporarily_offline()
        if initial_state == state:
            raise AssertionError(
                "The node state has not changed: temporarilyOffline = %s" %
                state)
예제 #18
0
파일: node.py 프로젝트: cc12703/jenkinsapi
    def set_num_executors(self, value):
        """
        Sets number of executors for node

        Warning! Setting number of executors on master node will erase all
        other settings
        """
        set_value = value if isinstance(value, str) else str(value)

        if self.name == 'master':
            # master node doesn't have config.xml, so we're going to submit
            # form here
            data = 'json=%s' % urlquote(
                json.dumps({
                    "numExecutors": set_value,
                    "nodeProperties": {
                        "stapler-class-bag": "true"
                    }
                })
            )

            url = self.baseurl + '/configSubmit'
            self.jenkins.requester.post_and_confirm_status(url, data=data)
        else:
            self.set_config_element('numExecutors', set_value)

        self.poll()
    def get_client_by_id(self, realm_name, id):
        cmd_name = "get client id {id} in realm '{realm}'".format(
            id=id, realm=realm_name)
        url = GET_CLIENTS_URL_TEMPLATE.format(server=self.server,
                                              realm=urlquote(realm_name))

        params = {'clientID': id}

        logger.debug("%s on server %s", cmd_name, self.server)
        response = self.session.get(url, params=params)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if (not response_json or response.status_code != requests.codes.ok):
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, json_pretty(response.text))

        return response_json
예제 #20
0
파일: api.py 프로젝트: alikins/mazer_old
    def lookup_role_by_name(self, role_name, notify=True):
        """
        Find a role by name.
        """
        role_name = urlquote(role_name)

        try:
            parts = role_name.split(".")
            user_name = ".".join(parts[0:-1])
            role_name = parts[-1]
            if notify:
                self.log.info("- downloading role '%s', owned by %s",
                              role_name, user_name)
        except Exception as e:
            self.log.exception(e)
            raise exceptions.GalaxyClientError(
                "Invalid role name (%s). Specify role as format: username.rolename"
                % role_name)

        url = '%s/roles/?owner__username=%s&name=%s' % (self.baseurl,
                                                        user_name, role_name)
        data = self.__call_galaxy(url)
        if len(data["results"]) != 0:
            return data["results"][0]
        return None
예제 #21
0
파일: api.py 프로젝트: panickervinod/mazer
    def search_content(self, search, **kwargs):
        self.log.debug('search=%s', search)
        self.log.debug('kwargs=%s', kwargs)

        search_url = self.baseurl + '/search/content/?'

        if search:
            search_url += '&autocomplete=' + urlquote(search)

        tags = kwargs.get('tags', None)
        platforms = kwargs.get('platforms', None)
        page_size = kwargs.get('page_size', None)
        author = kwargs.get('author', None)

        if tags and isinstance(tags, six.string_types):
            tags = tags.split(',')

            # TODO: the autocomplete search seems pretty vague...
            #       maybe except a wildcard or option for exact match?
            # searchs=' + '+'.join(tags)
            search_url += '&tags_autocomplete=' + '+'.join(tags)

        if platforms and isinstance(platforms, six.string_types):
            platforms = platforms.split(',')
            search_url += '&platforms_autocomplete=' + '+'.join(platforms)

        if page_size:
            search_url += '&page_size=%s' % page_size

        if author:
            search_url += '&username_autocomplete=%s' % author

        data = self.__call_galaxy(search_url, method='GET')
        return data
예제 #22
0
def enable_raven():
    try:
        from raven import Client
    except ImportError:
        logging.exception('Failed to import raven!')
        return False

    from raven.transport.threaded_requests import ThreadedRequestsHTTPTransport
    from raven.handlers.logging import SentryHandler

    if hasattr(sys, 'frozen'):
        if sys.platform == 'darwin':
            cacert_path = os.path.join(sys._MEIPASS, '..', 'Resources', 'certifi', 'cacert.pem')
        else:
            cacert_path = os.path.join(sys._MEIPASS, 'certifi', 'cacert.pem')

        from six.moves.urllib.parse import quote as urlquote
        center.SENTRY_DSN += '&ca_certs=' + urlquote(cacert_path)

    center.raven = Client(
        center.SENTRY_DSN,
        release=center.VERSION,
        environment='debug' if center.DEBUG else 'production',
        transport=ThreadedRequestsHTTPTransport
    )
    center.raven.tags_context({
        'os': sys.platform
    })
    center.raven_handler = SentryHandler(center.raven, level=logging.ERROR)
    logging.getLogger().addHandler(center.raven_handler)

    return True
예제 #23
0
    def category(self, trans, **kwd):
        """
        GET /api/tool_shed/category

        Display a list of repositories in the selected category.

        :param tool_shed_url: the url of the toolshed to get repositories from
        :param category_id: the category to get repositories from
        """
        tool_shed_url = urlunquote(kwd.get('tool_shed_url', ''))
        category_id = kwd.get('category_id', '')
        params = dict(installable=True)
        tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry(trans.app, tool_shed_url)
        url = util.build_url(tool_shed_url, pathspec=['api', 'categories', category_id, 'repositories'], params=params)
        repositories = []
        return_json = json.loads(util.url_get(url))
        for repository in return_json['repositories']:
            api_url = web.url_for(controller='api/tool_shed',
                                  action='repository',
                                  tool_shed_url=urlquote(tool_shed_url),
                                  repository_id=repository['id'],
                                  qualified=True)
            repository['url'] = api_url
            repositories.append(repository)
        return_json['repositories'] = repositories
        return return_json
예제 #24
0
 def get_node_url(self, nodename=""):
     """Return the url for nodes"""
     url = urlparse.urljoin(
         self.base_server_url(),
         'computer/%s' %
         urlquote(nodename))
     return url
    def get_client_descriptor(self, realm_name, metadata):
        cmd_name = "get client descriptor realm '{realm}'".format(
            realm=realm_name)
        url = CLIENT_DESCRIPTOR_URL_TEMPLATE.format(server=self.server,
                                                    realm=urlquote(realm_name))

        logger.debug("%s on server %s", cmd_name, self.server)

        headers = {'Content-Type': 'application/xml;charset=utf-8'}

        response = self.session.post(url, headers=headers, data=metadata)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if (not response_json or response.status_code != requests.codes.ok):
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, json_pretty(response.text))

        return response_json
예제 #26
0
 def get_node_url(self, nodename=""):
     """Return the url for nodes"""
     url = urlparse.urljoin(
         self.base_server_url(),
         'computer/%s' %
         urlquote(nodename))
     return url
    def create_client_from_descriptor(self, realm_name, descriptor):
        cmd_name = "create client from descriptor "
        "'{client_id}'in realm '{realm}'".format(
            client_id=descriptor['clientId'], realm=realm_name)
        url = CREATE_CLIENT_URL_TEMPLATE.format(server=self.server,
                                                realm=urlquote(realm_name))

        logger.debug("%s on server %s", cmd_name, self.server)

        response = self.session.post(url, json=descriptor)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if response.status_code != requests.codes.created:
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, response.text)
예제 #28
0
파일: node.py 프로젝트: cc12703/jenkinsapi
    def toggle_temporarily_offline(self, message="requested from jenkinsapi"):
        """
        Switches state of connected node (online/offline) and
        set 'temporarilyOffline' property (True/False)
        Calling the same method again will bring node status back.
        :param message: optional string can be used to explain why you
            are taking this node offline
        """
        initial_state = self.is_temporarily_offline()
        url = self.baseurl + \
            "/toggleOffline?offlineMessage=" + urlquote(message)
        try:
            html_result = self.jenkins.requester.get_and_confirm_status(url)
        except PostRequired:
            html_result = self.jenkins.requester.post_and_confirm_status(
                url,
                data={})

        self.poll()
        log.debug(html_result)
        state = self.is_temporarily_offline()
        if initial_state == state:
            raise AssertionError(
                "The node state has not changed: temporarilyOffline = %s" %
                state)
    def register_client(self, initial_access_token, realm_name, metadata):
        cmd_name = "register_client realm '{realm}'".format(realm=realm_name)
        url = SAML2_CLIENT_REGISTRATION_TEMPLATE.format(
            server=self.server, realm=urlquote(realm_name))

        logger.debug("%s on server %s", cmd_name, self.server)

        headers = {'Content-Type': 'application/xml;charset=utf-8'}

        if initial_access_token:
            headers['Authorization'] = 'Bearer {token}'.format(
                token=initial_access_token)

        response = self.session.post(url, headers=headers, data=metadata)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if (not response_json
                or response.status_code != requests.codes.created):
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, json_pretty(response.text))

        return response_json  # ClientRepresentation
예제 #30
0
파일: node.py 프로젝트: lechat/jenkinsapi
    def set_num_executors(self, value):
        """
        Sets number of executors for node

        Warning! Setting number of executors on master node will erase all
        other settings
        """
        set_value = value if isinstance(value, str) else str(value)

        if self.name == 'master':
            # master node doesn't have config.xml, so we're going to submit
            # form here
            data = 'json=%s' % urlquote(
                json.dumps({
                    "numExecutors": set_value,
                    "nodeProperties": {
                        "stapler-class-bag": "true"
                    }
                })
            )

            url = self.baseurl + '/configSubmit'
            self.jenkins.requester.post_and_confirm_status(url, data=data)
        else:
            self.set_config_element('numExecutors', set_value)

        self.poll()
예제 #31
0
    def get_file_url(self,
                     archive_file=None,
                     archive_key=None,
                     file=None,
                     size=None):
        """Given archive (file or a key) and a file -- compose URL for access

        Examples:
        ---------

        dl+archive:SHA256E-s176--69...3e.tar.gz/1/d2/2d#size=123
            when size of file within archive was known to be 123
        dl+archive:SHA256E-s176--69...3e.tar.gz/1/d2/2d
            when size of file within archive was not provided

        Parameters
        ----------
        size: int, optional
          Size of the file.  If not provided, will simply be empty
        """
        assert (file is not None)
        if archive_file is not None:
            if archive_key is not None:
                raise ValueError(
                    "Provide archive_file or archive_key - not both")
            archive_key = self.repo.get_file_key(archive_file)
        assert (archive_key is not None)
        file_quoted = urlquote(file)
        attrs = {}  # looking forward for more
        if size is not None:
            attrs['size'] = size
        sattrs = '#%s' % ('&'.join("%s=%s" % x
                                   for x in attrs.items())) if attrs else ''
        return '%s%s/%s%s' % (self.URL_PREFIX, archive_key,
                              file_quoted.lstrip('/'), sattrs)
예제 #32
0
파일: api.py 프로젝트: alikins/mazer_old
    def search_roles(self, search, **kwargs):

        search_url = self.baseurl + '/search/roles/?'

        if search:
            search_url += '&autocomplete=' + urlquote(search)

        tags = kwargs.get('tags', None)
        platforms = kwargs.get('platforms', None)
        page_size = kwargs.get('page_size', None)
        author = kwargs.get('author', None)

        if tags and isinstance(tags, six.string_types):
            tags = tags.split(',')
            search_url += '&tags_autocomplete=' + '+'.join(tags)

        if platforms and isinstance(platforms, six.string_types):
            platforms = platforms.split(',')
            search_url += '&platforms_autocomplete=' + '+'.join(platforms)

        if page_size:
            search_url += '&page_size=%s' % page_size

        if author:
            search_url += '&username_autocomplete=%s' % author

        data = self.__call_galaxy(search_url)
        return data
    def get_initial_access_token(self, realm_name):
        cmd_name = "get initial access token for realm '{realm}'".format(
            realm=realm_name)
        url = GET_INITIAL_ACCESS_TOKEN_TEMPLATE.format(
            server=self.server, realm=urlquote(realm_name))

        logger.debug("%s on server %s", cmd_name, self.server)

        params = {
            "expiration": 60,  # seconds
            "count": 1
        }

        response = self.session.post(url, json=params)
        logger.debug("%s response code: %s %s", cmd_name, response.status_code,
                     response.reason)

        try:
            response_json = response.json()
        except ValueError as e:
            response_json = None

        if (not response_json or response.status_code != requests.codes.ok):
            logger.error("%s error: status=%s (%s) text=%s", cmd_name,
                         response.status_code, response.reason, response.text)
            raise RESTError(response.status_code, response.reason,
                            response_json, response.text, cmd_name)

        logger.debug("%s response = %s", cmd_name, json_pretty(response.text))

        return response_json  # ClientInitialAccessPresentation
예제 #34
0
    def _fields_to_pr(cls, fields):
        """Recompose back fields dict to ParseResult"""
        netloc = fields['username'] or ''
        if fields['password']:
            netloc += ':' + fields['password']
        if netloc:
            netloc += '@'
        netloc += fields['hostname']
        if fields['port']:
            if fields['hostname'].count(':') >= 2:
                # ipv6 -- need to enclose in []
                netloc = '[%s]:%s' % (netloc, fields['port'])
            else:
                netloc += ':%s' % fields['port']

        pr_fields = {
            f: fields[f]
            for f in cls._FIELDS
            if f not in ('hostname', 'password', 'username', 'port')
        }
        pr_fields['netloc'] = netloc
        pr_fields['params'] = ''
        # We need to quote the path
        pr_fields['path'] = urlquote(pr_fields['path'])
        # TODO: figure out what to do with query/fragment... one step at a time
        return ParseResult(**pr_fields)
예제 #35
0
파일: network.py 프로젝트: datalad/datalad
    def _fields_to_pr(cls, fields):
        """Recompose back fields dict to ParseResult"""
        netloc = fields['username'] or ''
        if fields['password']:
            netloc += ':' + fields['password']
        if netloc:
            netloc += '@'
        netloc += fields['hostname']
        if fields['port']:
            if fields['hostname'].count(':') >= 2:
                # ipv6 -- need to enclose in []
                netloc = '[%s]:%s' % (netloc, fields['port'])
            else:
                netloc += ':%s' % fields['port']

        pr_fields = {
            f: fields[f]
            for f in cls._FIELDS
            if f not in ('hostname', 'password', 'username', 'port')
        }
        pr_fields['netloc'] = netloc
        pr_fields['params'] = ''
        # We need to quote the path
        pr_fields['path'] = urlquote(pr_fields['path'])
        # TODO: figure out what to do with query/fragment... one step at a time
        return ParseResult(**pr_fields)
예제 #36
0
def get_community(state, restrict=False):
    request, response = state['request'], state['response']
    user = state['user']
    name = request.path['name']

    c = Community.from_name(name)
    if request.method in ('GET', 'HEAD'):
        if not c:
            response.redirect('/for/new?name=' + urlquote(name))
        if c.name != name:
            response.redirect('/for/' + c.name +
                              request.line.uri[5 + len(name):])
    elif not c:
        raise response.error(404)
    elif user.ANON:
        raise AuthRequired

    if restrict:
        if user.ANON:
            raise LoginRequired
        if user.id != c.creator and not user.is_admin:
            _ = state['_']
            raise response.error(
                403, _("You are not authorized to access this page."))

    return c
예제 #37
0
 def fetch_namespace(self, namespace):
     namespace = urlquote(namespace)
     url = '%s/namespaces/?name=%s' % (self.baseurl, namespace)
     data = self.__call_galaxy(url, http_method='GET')
     if data["results"]:
         return data["results"][0]
     return {}
예제 #38
0
def _sanitize_untrusted_url(response, url):
    if isinstance(url, bytes):
        url = url.decode('utf8', 'replace')
    if not url.startswith('/') or url.startswith('//'):
        url = '/?bad_redirect=' + urlquote(url)
    host = response.request.headers[b'Host'].decode('ascii')
    # ^ this is safe because we don't accept requests with unknown hosts
    return response.website.canonical_scheme + '://' + host + url
예제 #39
0
 def combine_single(url, add_on):
     url_parsed = list(urlparse(url))
     path = url_parsed[2]
     if path and not path.endswith("/"):
         path += "/"
     path += urlquote(str(add_on), safe="/:")
     url_parsed[2] = path
     return urlunparse(url_parsed)
예제 #40
0
파일: node.py 프로젝트: lechat/jenkinsapi
    def update_offline_reason(self, reason):
        """
        Update offline reason on a temporary offline clsuter
        """

        if self.is_temporarily_offline():
            url = self.baseurl + '/changeOfflineCause?offlineMessage=' + urlquote(reason)
            self.jenkins.requester.post_and_confirm_status(url, data={})
예제 #41
0
파일: network.py 프로젝트: datalad/datalad
    def as_git_url(self):
        """Dereference /// into original URLs which could be used by git for cloning

        Returns
        -------
        str
          URL string to reference the DataLadRI from its /// form
        """
        if self.remote:
            raise NotImplementedError("not supported ATM to reference additional remotes")
        return "{}{}".format(consts.DATASETS_TOPURL, urlquote(self.path))
예제 #42
0
def nolog_replace(string, nolog):
    """Replace occurences of strings given in `nolog` with XXXXXXXX"""
    for value in nolog:
        if not isinstance(value, six.string_types):
            continue

        quoted = urlquote(value)
        shquoted = shell_quote(value)
        for nolog_value in (shquoted, value, quoted):
            string = string.replace(nolog_value, 'XXXXXXXX')
    return string
예제 #43
0
파일: core.py 프로젝트: mozilla/PyFxA
 def sign_certificate(self, public_key, duration=DEFAULT_CERT_DURATION,
                      service=None):
     body = {
         "publicKey": public_key,
         "duration": duration,
     }
     url = "/certificate/sign"
     if service is not None:
         url += "?service=" + urlquote(service)
     resp = self.apiclient.post(url, body, auth=self._auth)
     return resp["cert"]
예제 #44
0
 def get_file_url(self, archive_file=None, archive_key=None, file=None):
     """Given archive (file or a key) and a file -- compose URL for access
     """
     assert file is not None
     if archive_file is not None:
         if archive_key is not None:
             raise ValueError("Provide archive_file or archive_key - not both")
         archive_key = self._get_file_key(archive_file)
     # todo (out, err) = annex('lookupkey a.tar.gz')
     assert archive_key is not None
     file_quoted = urlquote(file)
     return "%s%s/%s" % (self.url_prefix, archive_key, file_quoted.lstrip("/"))
    def delete_client_by_id(self, realm_name, obj_id):
        cmd_name = 'delete client id "{id}"in realm "{realm}"'.format(
            id=obj_id, realm=realm_name)
        url = URL_CLIENTS_ID.format(
            server=self.server,
            realm=urlquote(realm_name),
            id=urlquote(obj_id))

        self._log_rest_request(cmd_name, url)
        response = self.session.delete(url)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if response.status_code != requests.codes.no_content: # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
예제 #46
0
 def index(self, trans, **kwd):
     """
     GET /api/tool_shed
     Interact with this galaxy instance's toolshed registry.
     """
     sheds = []
     for name, url in trans.app.tool_shed_registry.tool_sheds.items():
         # api_url = web.url_for( controller='api/tool_shed',
         #                        action='contents',
         #                        tool_shed_url=urlquote( url, '' ),
         #                        qualified=True )
         sheds.append(dict(name=name, url=urlquote(url, '')))
     return sheds
    def update_client(self, realm_name, client):
        obj_id = client['id']
        cmd_name = 'update client {clientid} in realm "{realm}"'.format(
            clientid=client['clientId'], realm=realm_name)
        url = URL_CLIENTS_ID.format(
            server=self.server, realm=urlquote(realm_name),
            id=urlquote(obj_id))

        self._log_rest_request(cmd_name, url, client)
        response = self.session.put(url, json=client)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if response.status_code != requests.codes.no_content: # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
    def get_realm_saml_metadata(self, realm_name):
        cmd_name = 'get metadata for realm "{realm}"'.format(realm=realm_name)
        url = URL_REALM_SAML_DESCRIPTOR.format(
            server=self.server, realm=urlquote(realm_name))

        self._log_rest_request(cmd_name, url)
        response = self.session.get(url)
        self._log_rest_response(cmd_name, response)

        if response.status_code != requests.codes.ok: # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response.text, False)
        return response.text
    def regenerate_client_secret_by_id(self, realm_name, obj_id):
        cmd_name = ('regenerate client secret for client "{id}" in realm "{realm}"'.
                    format(id=obj_id, realm=realm_name))
        url = URL_CLIENT_SECRET.format(
            server=self.server,
            realm=urlquote(realm_name),
            id=urlquote(obj_id))

        self._log_rest_request(cmd_name, url)
        response = self.session.post(url)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if (not response_json or
                response.status_code != requests.codes.ok): # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
예제 #50
0
def _parse_urls(page):
    lgr.debug("Parsing out urls")
    soup = BeautifulSoup(page, "html.parser")
    urls = []
    for link in soup.findAll('a'):
        href = link.get('href')
        if not href:
            # skip empties
            continue
        # we better bring it to canonical quoted form for consistency
        rec = urlsplit(href)
        path_quoted = urlquote(rec.path) if not is_url_quoted(rec.path) else rec.path
        href = urlunsplit((rec.scheme, rec.netloc, path_quoted,
                           rec.query, rec.fragment))
        urls.append((href, link.text, link))
    return urls
예제 #51
0
파일: network.py 프로젝트: datalad/datalad
def get_local_file_url(fname):
    """Return OS specific URL pointing to a local file

    Parameters
    ----------
    fname : string
        Filename.  If not absolute, abspath is used
    """
    fname = fname if isabs(fname) else abspath(fname)
    if on_windows:
        fname_rep = fname.replace('\\', '/')
        furl = "file:///%s" % urlquote(fname_rep)
        lgr.debug("Replaced '\\' in file\'s url: %s" % furl)
    else:
        # TODO:  need to fix for all the encoding etc
        furl = str(URL(scheme='file', path=fname))
    return furl
    def register_client(self, initial_access_token, realm_name,
                        client_data_format, client_data):
        cmd_name = ('register_client realm "{realm}" using client data format '
                    '"{client_data_format}"'.format(
                        realm=realm_name,
                        client_data_format=client_data_format))

        if client_data_format == 'default':
            template = URL_CLIENT_REGISTRATION_DEFAULT
            content_type = CONTENT_TYPE_JSON
        elif client_data_format == 'oidc':
            template = URL_CLIENT_REGISTRATION_OIDC
            content_type = CONTENT_TYPE_JSON
        elif client_data_format == 'saml2':
            template = URL_CLIENT_REGISTRATION_SAML2
            content_type = CONTENT_TYPE_XML
        else:
            raise ValueError('Unknown client data format: "%s"' %
                             client_data_format)

        url = template.format(
            server=self.server, realm=urlquote(realm_name))

        headers = {'Content-Type': content_type}

        if initial_access_token:
            headers['Authorization'] = 'Bearer {token}'.format(
                token=initial_access_token)

        self._log_rest_request(cmd_name, url, client_data)
        response = self.session.post(url, headers=headers,
                                     data=client_data)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if (not response_json or
                response.status_code != requests.codes.created): # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json    # ClientRepresentation
    def delete_realm(self, realm_name):
        cmd_name = 'delete realm "{realm}"'.format(realm=realm_name)
        url = URL_REALMS_REALM.format(
            server=self.server, realm=urlquote(realm_name))

        self._log_rest_request(cmd_name, url)
        response = self.session.delete(url)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if response.status_code != requests.codes.no_content: # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
    def _create_session(self, tls_verify):
        token_url = URL_OIDC_TOKEN.format(
            server=self.server, realm=urlquote(self.realm))
        refresh_url = token_url

        client = LegacyApplicationClient(client_id=self.client_id)
        session = OAuth2Session(client=client,
                                auto_refresh_url=refresh_url,
                                auto_refresh_kwargs={
                                    'client_id': self.client_id})

        session.verify = tls_verify
        token = session.fetch_token(token_url=token_url,
                                    username=self.username,
                                    password=self.password,
                                    client_id=self.client_id,
                                    verify=session.verify)

        return session
    def get_clients(self, realm_name):
        cmd_name = 'get clients in realm "{realm}"'.format(realm=realm_name)
        url = URL_CLIENTS.format(
            server=self.server, realm=urlquote(realm_name))

        self._log_rest_request(cmd_name, url)
        response = self.session.get(url)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if (not response_json or
                response.status_code != requests.codes.ok): # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)
        return response_json
예제 #56
0
def _dispatch_path_to_filesystem(website, request=None):
    """This wrapper function neutralizes some of Aspen's dispatch exceptions.

    - RedirectFromSlashless, always
    - NotFound, when it's due to an extra slash at the end of the path (i.e.
      dispatch `/foo/bar/` to `/foo/bar.spt`).
    """
    if request is None:
        return
    path = request.path
    qs = request.qs
    request_processor = website.request_processor
    try:
        return dispatch_path_to_filesystem(
            request_processor=request_processor, path=path, querystring=qs
        )
    except UnindexedDirectory:
        raise
    except NotFound:
        raw_path = getattr(path, 'raw', '')
        if len(raw_path) < 3 or raw_path[-1] != '/' or raw_path[-2] == '/':
            raise
        path = Path(raw_path[:-1])
        if '.' in path.parts[-1]:
            # Don't dispatch `/foo.html/` to a `/foo.html` file
            raise
        r = dispatch_path_to_filesystem(
            request_processor=request_processor, path=path, querystring=qs
        )
        r['path'] = request.line.uri.path = path
        request.canonical_path = raw_path
        return r
    except RedirectFromSlashless as exception:
        path = urlquote(exception.message.encode('utf8'), string.punctuation)
        path = request.line.uri.path = Path(path)
        request.canonical_path = path.raw
        r = dispatch_path_to_filesystem(
            request_processor=request_processor, path=path, querystring=qs
        )
        r['path'] = path
        return r
예제 #57
0
    def show(self, trans, **kwd):
        """
        GET /api/tool_shed/contents

        Display a list of categories in the selected toolshed.

        :param tool_shed_url: the url of the toolshed to get categories from
        """
        tool_shed_url = urlunquote(kwd.get('tool_shed_url', ''))
        tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry(trans.app, tool_shed_url)
        url = util.build_url(tool_shed_url, pathspec=['api', 'categories'])
        categories = []
        for category in json.loads(util.url_get(url)):
            api_url = web.url_for(controller='api/tool_shed',
                                  action='category',
                                  tool_shed_url=urlquote(tool_shed_url),
                                  category_id=category['id'],
                                  qualified=True)
            category['url'] = api_url
            categories.append(category)
        return categories
예제 #58
0
def encode_logstash_query(query, timeframe=864000):
    """Utility function for encoding logstash queries.

    This is used when generating url's for links in
    report pages.

    Input is a string representing the logstash query
    and an optional timeframe argument.

    """
    timeframe = str(timeframe) + 's'
    # We need to first json encode the query so that
    # things like " are properly escaped. But we dont
    # want the outer ""s that result from dumpsing the
    # string so we strip those off again. And finally
    # the whole thing gets quoted to escape spaces and
    # special characters. Note that kibana3 is braindead
    # and expects its parameters url quoted not parameter
    # encoded
    query = json.dumps(query)[1:-1]
    return 'query=' + urlquote(query) + "&from=" + timeframe
    def create_client_from_client_representation(self, realm_name, client_representation):
        cmd_name = ('create client from client representation in '
                    'realm "{realm}"'.format(realm=realm_name))
        url = URL_CLIENTS.format(
            server=self.server, realm=urlquote(realm_name))

        headers = {'Content-Type': CONTENT_TYPE_JSON}

        self._log_rest_request(cmd_name, url, client_representation)
        response = self.session.post(url, headers=headers,
                                     data=client_representation)
        self._log_rest_response(cmd_name, response)

        try:
            response_json = response.json()
        except ValueError:
            response_json = None

        if response.status_code != requests.codes.created: # pylint: disable=no-member
            raise RESTError(cmd_name, response)

        self._log_return_value(response_json)