コード例 #1
0
ファイル: request.py プロジェクト: 4383/WebForge
class Action:
    """
    Class Recherche
    Classe de controle de la vue "Recherche"
    """

    def __init__(self):
        """
        Constructeur du controleur de la vue "Recherche"
        A à sa charge la gestion des événements sur la vue "vue.Recherche"
        """
        self.param = Parametre()
        self.recherche = Recherche()
        self.header = Header()

    def search(self, q):
        """
        Prepare elements for request and play it
        """
        self.param = urlencode(self.param.myParam.get())
        self.recherche = urlparse(self.recherche.my_recherche.get())
        url = "%s%s%s" % (
            self.recherche[1],
            self.recherche[2],
            self.recherche[3]
        )
        ok, response, timer = self._requester()
        if not ok:
            self.error = Error()
            self.error.add_param(
                GT_('Erreur'),
                GT_('Url injoignable : %s\n%s') % (url, response)
            )
        else:
            self.result = Result()
            self.result.unset()
            # Request information (url, execution time)
            self.result.add_param(
                GT_('http://%s en %d.%06d secondes') % (
                    url,
                    timer.seconds,
                    timer.microseconds
                ),
                '%s : %s' % (response.status, response.reason)
            )
            # Request information (url, execution time)
            self.result.add_param(
                GT_('Entetes'),
                response.getheaders()
            )
            version = 1.0
            if response.version == 11:
                version = 1.1

            self.result.add_param(
                GT_('Version du protocole'),
                GT_('HTTP/%s' % version)
            )
        q.task_done()

    def _requester(self):
        """
        Execute request and return result
        """
        try:
            methode = 'POST'
            if not self.param:
                methode = 'GET'
            debut = datetime.now()
            connection = httplib.HTTPConnection(self.recherche[1])
            connection.request(
                methode,
                '%s/%s' % (self.recherche[2], self.recherche[3]),
                self.param,
                self.header.my_header.get()
            )
            response = connection.getresponse()
            connection.close()
            timer = datetime.now() - debut
            return True, response, timer
        except socket.gaierror:
            return False, GT_("Socket erreur"), None
        except http.client.InvalidURL:
            return False, GT_("Url non valide"), None