示例#1
0
def ProcessRequest(fullPathList, queryParams, response):
    addresswebservices.console.clear()

    addresswebservices.console.addInfo(u"SERVICES_WEB_PATH: " +
                                       SERVICES_WEB_PATH)
    addresswebservices.console.addInfo(u"HTMLDATA_URL: " + HTMLDATA_URL)
    if addresswebservices.console.debugMode:
        import shared
        import config as configModule
        addresswebservices.console.addInfo(u"configModule.getHTMLDataURL(): " +
                                           configModule.getHTMLDataURL())
        addresswebservices.console.addInfo(u"shared.isCGIApplication(): " +
                                           str(shared.isCGIApplication))
        addresswebservices.console.addInfo(u"configModule.HTMLDATA_URL: " +
                                           configModule.HTMLDATA_URL)
        addresswebservices.console.addInfo(u"configModule.SERVER_HTTP: " +
                                           configModule.SERVER_HTTP)
        addresswebservices.console.addInfo(
            u"configModule.getPortSpecification(): " +
            configModule.getPortSpecification())

    pageBuilder = addresswebservices.ServicesHTMLPageBuilder()
    if fullPathList in [["/"], []]:
        response.htmlData = pageBuilder.getServicesHTMLPage(__file__, "", {})
        response.handled = True
    else:
        if fullPathList == []:
            servicePathInfo = "/"
        else:
            servicePathInfo = "/" + fullPathList[0]  # první rest parametr

        if DATA_ALIASES.has_key(servicePathInfo.lower()):
            fileName = DATA_ALIASES[servicePathInfo.lower()]() + "/".join(
                fullPathList[1:])
            response.htmlData = getFileContent(fileName)
            mimeFormat = fileNameToMimeFormat(fileName)
            if mimeFormat != None:
                response.mimeFormat = mimeFormat
                if mimeFormat == "text/plain":
                    response.htmlData = response.htmlData.replace("\r\n", "\n")
            response.handled = True
        elif servicePathInfo.lower().startswith(AUTOCOMPLETES_PATH):
            import jqueryautocomplete
            response = jqueryautocomplete.processRequest(
                "/".join(fullPathList[1:]), "", "", queryParams, response)
        elif servicePathInfo.lower().startswith(DATABASE_DETAILS_PATH):
            RUIANConnection._getDBDetails(fullPathList[1:], queryParams,
                                          response)
        else:
            pathInfos = fullPathList[1:]  # ostatní

            for service in addresswebservices.services:
                if (service.pathName == servicePathInfo) and (
                        service.processHandler != None):
                    #TODO Tohle by si asi měla dělat service sama
                    i = 0
                    for pathValue in pathInfos:
                        if i < len(service.restPathParams):
                            queryParams[service.restPathParams[i].pathName[
                                1:]] = pathValue  #přidání do slovníku, přepíše hodnotu se stejným klíčem
                        else:
                            # Too many parameters
                            addresswebservices.console.addMsg(
                                u"Nadbytečný REST parametr č." + str(i) + "-" +
                                pathValue)

                        i = i + 1
                    service.processHandler(queryParams, response)
                    break

            if not response.handled:
                if pathInfos != []:
                    addresswebservices.console.addMsg(u"Neznámá služba: " +
                                                      servicePathInfo)
                response.htmlData = pageBuilder.getServicesHTMLPage(
                    __file__, servicePathInfo, queryParams)
                response.handled = True

    return response
示例#2
0
    def getServicesHTMLPage(self, scriptName, pathInfo, queryParams):
        scriptName = os.path.basename(scriptName)
        self.dataListHTML = ""
        result = getPageTemplate().replace("#PAGETITLE#",
                                           u"Webové služby RÚIAN")
        servicesURL = "http://" + SERVER_HTTP + getPortSpecification(
        ) + "/" + SERVICES_WEB_PATH
        result = result.replace("<#SERVICES_URL>", servicesURL)

        result = result.replace("#HTMLDATA_URL#",
                                configmodule.getHTMLDataURL())
        result = result.replace("#VERSIONNUMBER#",
                                configmodule.config.issueNumber)
        result = result.replace("#SERVICES_URL_PATH#",
                                configmodule.getServicesPath())

        if configmodule.config.ruianVersionDate == "":
            versionDate = RUIANConnection.getRUIANVersionDate()
            configmodule.config.databaseIsOK = not versionDate.upper(
            ).startswith("ERROR:")
            if versionDate.upper().startswith("ERROR:"):
                versionDate = u"Nepřipojeno"
                ruianVersionCode = u"<b>!!! Data RÚIAN nejsou připojena !!!</b>"
                console.addMsg(
                    u"Data RÚIAN nejsou připojena, obraťte se na správce webového serveru."
                )
            else:
                ruianVersionCode = '<a href="%s/downloaded/Import.html">%s</a>' % (
                    servicesURL, versionDate)

            configmodule.config.ruianVersionDate = versionDate
            configmodule.config.ruianVersionCode = ruianVersionCode

        result = result.replace("#RUIANVERSIONDATE#",
                                configmodule.config.ruianVersionCode)

        queryParams = self.normalizeQueryParams(queryParams)

        tabCaptions = ""
        tabDivs = ""

        i = 1
        tabIndex = 0
        for service in services:
            tabCaptions += '<li><a href="#tabs-' + str(
                i) + '">' + service.caption + '</a></li>\n'
            tabDivs += '<div id="tabs-' + str(
                i) + '">   <h2>' + service.shortDesc + '</h2>\n'
            tabDivs += service.htmlDesc
            tabDivs += u'<p class = "enhancedGUI">Adresa služby:' + service.pathName + '</p>\n'
            formName = "form_" + str(i)
            urlSpanName = formName + "_urlSpan"
            onChangeProcCode = 'onChangeProc(' + formName + ', true)'
            displayResultProcCode = "runOrHookDisplayResult('" + formName + "', '" + service.pathName + "')"
            if service.pathName == pathInfo:
                tabIndex = i

            restPyURL = "http://" + SERVER_HTTP + getPortSpecification(
            ) + "/" + SERVICES_WEB_PATH + "/"
            tabDivs += u'<span name="' + urlSpanName + '" class = "enhancedGUI" id="' + urlSpanName + '" >' + "http://" + SERVER_HTTP + getPortSpecification(
            ) + "/" + SERVICES_WEB_PATH + "/" + service.pathName[
                1:] + "</span>\n"  #service.getServicePath() + "</span>\n"
            hasAddressTabs = service.pathName == "/CompileAddress" or service.pathName == "/Geocode"
            if hasAddressTabs:
                updateServiceSpanCode = ' onclick="updateServiceSpan(\'%s\')"' % formName
                tabDivs += u"""
                <br><br>
                <input type="radio" name= "radio%s" value="adresa"   id="%s_AddressRB" checked %s>Adresa
                <input type="radio" name= "radio%s" value="vstup" id="%s_AddressItemsRB" %s>Prvky adresy
                <input type="radio" name= "radio%s" value="id"  id="%s_RuianIdRB" %s>Identifikátor RÚIAN
                """ % (service.pathName, formName, updateServiceSpanCode,
                       service.pathName, formName, updateServiceSpanCode,
                       service.pathName, formName, updateServiceSpanCode)

            tabDivs += "<br><br>"
            tabDivs += "<table><tr valign=\"top\"><td>"
            tabDivs += '<form id="' + formName + '" name="' + formName + '" action="' + SERVICES_PATH + service.pathName + '" method="get" SearchForAddress="false">\n'

            # Parameters list
            tabDivs += '<div class="warning">\n'
            tabDivs += '<table id="' + formName + '_ParamsTable">\n'
            for param in service.restPathParams:
                tabDivs += self.tablePropertyRow(param, formName, u"REST",
                                                 queryParams, onChangeProcCode,
                                                 hasAddressTabs)

            for param in service.queryParams:
                tabDivs += self.tablePropertyRow(param, formName, u"Query",
                                                 queryParams, onChangeProcCode,
                                                 hasAddressTabs)

            tabDivs += '</table>\n'
            tabDivs += '</div>\n'

            tabDivs += '<br>'
            tabDivs += '<input style="float: right;" type="button" value="Nové zadání" onclick="clearInputs(\'%s\')">\n' % formName
            tabDivs += '<input style="float: right;" type="button" value="%s" onclick="%s">\n' % (
                service.sendButtonCaption, displayResultProcCode)
            tabDivs += '</form>\n'
            tabDivs += "</td>"
            tabDivs += '<td>'
            tabDivs += '<div id="%s_addressesDiv" class="AddressesDiv" title="Vyber adresu" isvisible="false" tabname="vstup"></div>' % formName

            tabDivs += getNoAddressAvailableHTML(formName)
            tabDivs += '<div id="%s_addressDiv" class="AddressDiv" isvisible="false" tabname="vstup"></div>' % formName
            tabDivs += '<textarea id=' + formName + '_textArea rows ="12" cols="50" class="RESULTTEXTAREA"></textarea></td>'
            tabDivs += "</tr></table>"

            tabDivs += "<a class = 'enhancedGUI' href='" + restPyURL + "testing" + service.pathName + ".html'>Výsledky testů</a>"
            url = configmodule.getHTMLDataURL() + service.pathName[1:] + ".png"
            tabDivs += '<p>\n<center><img width="80%" class="enhancedGUI" src="' + url + '"></center></p>\n'

            tabDivs += '</div>\n'
            i = i + 1

        if configmodule.config.databaseIsOK:
            separateStr = ""
            inStr = ""
        else:
            separateStr = "{ disabled: [1, 2, 3, 4, 5, 6] }"
            inStr = ", disabled: [1, 2, 3, 4, 5, 6]"

        if tabIndex == 0:
            newStr = separateStr
        else:
            newStr = '{ active: %s %s }' % (str(tabIndex), inStr)

        result = result.replace("#TABSOPTIONS#", newStr)

        result = result.replace(
            "#CONSOLELINES#", console.consoleLines + "\n" + console.infoLines)
        result = result.replace("#ISSUELINES#", getIssueHTML() + "\n")
        result = result.replace("<#TABCAPTIONS#/>", tabCaptions)
        result = result.replace("<#TABCAPTIONS#/>", tabCaptions)
        result = result.replace("<#TABDIVS#/>", tabDivs)
        result = result.replace("#USE_DATA_LISTS#",
                                str(USE_DATA_LISTS).lower())
        result = result.replace("#SCRIPT_NAME#", scriptName)
        result = result.replace(
            "#DISABLEGUISWITCH#",
            str(configmodule.config.disableGUISwitch).lower())

        result = result.replace("</body>", self.dataListHTML + "</body>")

        return result
示例#3
0
def ProcessRequest(fullPathList, queryParams, response):
    addresswebservices.console.clear()

    addresswebservices.console.addInfo(u"SERVICES_WEB_PATH: " + SERVICES_WEB_PATH)
    addresswebservices.console.addInfo(u"HTMLDATA_URL: " + HTMLDATA_URL)
    if addresswebservices.console.debugMode:
        import shared
        import config as configModule
        addresswebservices.console.addInfo(u"configModule.getHTMLDataURL(): " + configModule.getHTMLDataURL())
        addresswebservices.console.addInfo(u"shared.isCGIApplication(): " + str(shared.isCGIApplication))
        addresswebservices.console.addInfo(u"configModule.HTMLDATA_URL: " + configModule.HTMLDATA_URL)
        addresswebservices.console.addInfo(u"configModule.SERVER_HTTP: " + configModule.SERVER_HTTP)
        addresswebservices.console.addInfo(u"configModule.getPortSpecification(): " + configModule.getPortSpecification())

    pageBuilder = addresswebservices.ServicesHTMLPageBuilder()
    if fullPathList in [["/"], []]:
        response.htmlData = pageBuilder.getServicesHTMLPage(__file__,"", {})
        response.handled = True
    else:
        if fullPathList == []:
            servicePathInfo = "/"
        else:
            servicePathInfo = "/" + fullPathList[0]                       # první rest parametr

        if DATA_ALIASES.has_key(servicePathInfo.lower()):
            fileName = DATA_ALIASES[servicePathInfo.lower()]() + "/".join(fullPathList[1:])
            response.htmlData = getFileContent(fileName)
            mimeFormat = fileNameToMimeFormat(fileName)
            if mimeFormat != None:
                response.mimeFormat = mimeFormat
                if mimeFormat == "text/plain":
                    response.htmlData = response.htmlData.replace("\r\n", "\n")
            response.handled = True
        elif servicePathInfo.lower().startswith(AUTOCOMPLETES_PATH):
            import jqueryautocomplete
            response = jqueryautocomplete.processRequest("/".join(fullPathList[1:]), "", "", queryParams, response)
        elif servicePathInfo.lower().startswith(DATABASE_DETAILS_PATH):
            RUIANConnection._getDBDetails(fullPathList[1:], queryParams, response)
        else:
            pathInfos = fullPathList[1:]  # ostatní

            for service in addresswebservices.services:
                if (service.pathName == servicePathInfo) and (service.processHandler != None):
                    #TODO Tohle by si asi měla dělat service sama
                    i = 0
                    for pathValue in pathInfos:
                        if i < len(service.restPathParams):
                            queryParams[service.restPathParams[i].pathName[1:]] = pathValue   #přidání do slovníku, přepíše hodnotu se stejným klíčem
                        else:
                            # Too many parameters
                            addresswebservices.console.addMsg(u"Nadbytečný REST parametr č." + str(i) + "-" + pathValue)

                        i = i + 1
                    service.processHandler(queryParams, response)
                    break

            if not response.handled:
                if pathInfos != []:
                    addresswebservices.console.addMsg(u"Neznámá služba: " + servicePathInfo)
                response.htmlData = pageBuilder.getServicesHTMLPage(__file__, servicePathInfo, queryParams)
                response.handled = True

    return response
示例#4
0
    def getServicesHTMLPage(self, scriptName, pathInfo, queryParams):
        scriptName = os.path.basename(scriptName)
        self.dataListHTML = ""
        result = getPageTemplate().replace("#PAGETITLE#", u"Webové služby RÚIAN")
        servicesURL = "http://" + SERVER_HTTP + getPortSpecification() + "/" + SERVICES_WEB_PATH
        result = result.replace("<#SERVICES_URL>", servicesURL)

        result = result.replace("#HTMLDATA_URL#", configmodule.getHTMLDataURL())
        result = result.replace("#VERSIONNUMBER#", configmodule.config.issueNumber)
        result = result.replace("#SERVICES_URL_PATH#", configmodule.getServicesPath())

        if configmodule.config.ruianVersionDate == "":
            versionDate = RUIANConnection.getRUIANVersionDate()
            configmodule.config.databaseIsOK = not versionDate.upper().startswith("ERROR:")
            if versionDate.upper().startswith("ERROR:"):
                versionDate = u"Nepřipojeno"
                ruianVersionCode = u"<b>!!! Data RÚIAN nejsou připojena !!!</b>"
                console.addMsg(u"Data RÚIAN nejsou připojena, obraťte se na správce webového serveru.")
            else:
                ruianVersionCode = '<a href="%s/downloaded/Import.html">%s</a>' % (servicesURL, versionDate)

            configmodule.config.ruianVersionDate = versionDate
            configmodule.config.ruianVersionCode = ruianVersionCode

        result = result.replace("#RUIANVERSIONDATE#", configmodule.config.ruianVersionCode)

        queryParams = self.normalizeQueryParams(queryParams)

        tabCaptions = ""
        tabDivs = ""

        i = 1
        tabIndex = 0
        for service in services:
            tabCaptions += '<li><a href="#tabs-' + str(i) + '">' + service.caption + '</a></li>\n'
            tabDivs += '<div id="tabs-' + str(i) + '">   <h2>' + service.shortDesc + '</h2>\n'
            tabDivs += service.htmlDesc
            tabDivs += u'<p class = "enhancedGUI">Adresa služby:' + service.pathName + '</p>\n'
            formName = "form_" + str(i)
            urlSpanName = formName + "_urlSpan"
            onChangeProcCode = 'onChangeProc(' + formName + ', true)'
            displayResultProcCode = "runOrHookDisplayResult('" + formName + "', '" + service.pathName + "')"
            if service.pathName == pathInfo:
                tabIndex = i

            restPyURL = "http://" + SERVER_HTTP + getPortSpecification() + "/" + SERVICES_WEB_PATH + "/"
            tabDivs += u'<span name="' + urlSpanName + '" class = "enhancedGUI" id="' + urlSpanName + '" >' + "http://" + SERVER_HTTP + getPortSpecification() + "/" + SERVICES_WEB_PATH + "/" + service.pathName[1:] + "</span>\n" #service.getServicePath() + "</span>\n"
            hasAddressTabs = service.pathName == "/CompileAddress" or service.pathName == "/Geocode"
            if hasAddressTabs:
                updateServiceSpanCode = ' onclick="updateServiceSpan(\'%s\')"' % formName
                tabDivs += u"""
                <br><br>
                <input type="radio" name= "radio%s" value="adresa"   id="%s_AddressRB" checked %s>Adresa
                <input type="radio" name= "radio%s" value="vstup" id="%s_AddressItemsRB" %s>Prvky adresy
                <input type="radio" name= "radio%s" value="id"  id="%s_RuianIdRB" %s>Identifikátor RÚIAN
                """ % (service.pathName, formName, updateServiceSpanCode, service.pathName, formName, updateServiceSpanCode, service.pathName, formName, updateServiceSpanCode)

            tabDivs += "<br><br>"
            tabDivs += "<table><tr valign=\"top\"><td>"
            tabDivs += '<form id="' + formName + '" name="' + formName + '" action="' + SERVICES_PATH + service.pathName + '" method="get" SearchForAddress="false">\n'

            # Parameters list
            tabDivs += '<div class="warning">\n'
            tabDivs += '<table id="' + formName + '_ParamsTable">\n'
            for param in service.restPathParams:
                tabDivs += self.tablePropertyRow(param, formName, u"REST", queryParams, onChangeProcCode, hasAddressTabs)

            for param in service.queryParams:
                tabDivs += self.tablePropertyRow(param, formName, u"Query", queryParams, onChangeProcCode, hasAddressTabs)

            tabDivs += '</table>\n'
            tabDivs += '</div>\n'

            tabDivs += '<br>'
            tabDivs += '<input style="float: right;" type="button" value="Nové zadání" onclick="clearInputs(\'%s\')">\n' % formName
            tabDivs += '<input style="float: right;" type="button" value="%s" onclick="%s">\n' % (service.sendButtonCaption, displayResultProcCode)
            tabDivs += '</form>\n'
            tabDivs += "</td>"
            tabDivs += '<td>'
            tabDivs += '<div id="%s_addressesDiv" class="AddressesDiv" title="Vyber adresu" isvisible="false" tabname="vstup"></div>' % formName

            tabDivs += getNoAddressAvailableHTML(formName)
            tabDivs += '<div id="%s_addressDiv" class="AddressDiv" isvisible="false" tabname="vstup"></div>' % formName
            tabDivs += '<textarea id=' + formName + '_textArea rows ="12" cols="50" class="RESULTTEXTAREA"></textarea></td>'
            tabDivs += "</tr></table>"

            tabDivs += "<a class = 'enhancedGUI' href='" + restPyURL + "testing" + service.pathName + ".html'>Výsledky testů</a>"
            url = configmodule.getHTMLDataURL() + service.pathName[1:] + ".png"
            tabDivs += '<p>\n<center><img width="80%" class="enhancedGUI" src="' + url + '"></center></p>\n'

            tabDivs += '</div>\n'
            i = i + 1

        if configmodule.config.databaseIsOK:
            separateStr = ""
            inStr = ""
        else:
            separateStr = "{ disabled: [1, 2, 3, 4, 5, 6] }"
            inStr = ", disabled: [1, 2, 3, 4, 5, 6]"

        if tabIndex == 0:
            newStr = separateStr
        else:
            newStr = '{ active: %s %s }' % (str(tabIndex), inStr)

        result = result.replace("#TABSOPTIONS#", newStr)

        result = result.replace("#CONSOLELINES#", console.consoleLines + "\n" + console.infoLines)
        result = result.replace("#ISSUELINES#", getIssueHTML() + "\n")
        result = result.replace("<#TABCAPTIONS#/>", tabCaptions)
        result = result.replace("<#TABCAPTIONS#/>", tabCaptions)
        result = result.replace("<#TABDIVS#/>", tabDivs)
        result = result.replace("#USE_DATA_LISTS#", str(USE_DATA_LISTS).lower())
        result = result.replace("#SCRIPT_NAME#", scriptName)
        result = result.replace("#DISABLEGUISWITCH#", str(configmodule.config.disableGUISwitch).lower())


        result = result.replace("</body>", self.dataListHTML + "</body>")

        return result