Пример #1
0
def validateAddress(builder, street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber):

    if not rightAddress(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber):
        return "False"

    dict = buildValidateDict(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber)

    result = RUIANConnection.validateAddress(dict)
    return builder.listToResponseText(result)
Пример #2
0
def IDCheckServiceHandler(queryParams, response, builder):
    response.mimeFormat = builder.getMimeFormat()
    address = RUIANConnection.findAddress(sharetools.getKeyValue(queryParams, "AddressPlaceId"))
    response.handled = True
    if address:
        html = compileaddress.compileAddress(builder, address.street, address.houseNumber, address.recordNumber, address.orientationNumber, address.orientationNumberCharacter, address.zipCode, address.locality, address.localityPart, address.districtNumber)
        response.htmlData = builder.listToResponseText([html])

    return response
Пример #3
0
def nearByAddresses(builder, JTSKY, JTSKX, Distance, withID, withDistance, maxCount):
    if JTSKY.find(".") >= 0: JTSKY = JTSKY[:JTSKY.find(".")]
    if JTSKY.find(",") >= 0: JTSKY = JTSKY[:JTSKY.find(",")]
    if JTSKX.find(".") >= 0: JTSKX = JTSKX[:JTSKX.find(".")]
    if JTSKX.find(",") >= 0: JTSKX = JTSKX[:JTSKX.find(",")]
    if JTSKX.isdigit() and JTSKY.isdigit() and Distance.isdigit():
        addresses = RUIANConnection.getNearbyLocalities(JTSKX, JTSKY, Distance, maxCount)
        parser = parseaddress.AddressParser()
        FormattedAddress = parser.buildAddress(builder, addresses, withID, withDistance)
        s = builder.listToResponseText(FormattedAddress, True)
        return s
    else:
        return ""
Пример #4
0
def validateAddressIdServiceHandler(queryParams, response):
    builder = MimeBuilder(queryParams["Format"])
    response.mimeFormat = builder.getMimeFormat()
    addressPlaceId = getQueryValue(queryParams, "AddressPlaceId", "")
    if addressPlaceId.isdigit():
        address = RUIANConnection.findAddress(addressPlaceId)
        if address:
            response.htmlData = builder.listToResponseText(["True"])
        else:
            response.htmlData = builder.listToResponseText(["False"])
    else:
        response.htmlData = builder.listToResponseText(["False"])
    response.handled = True
    return response
Пример #5
0
def validateAddressIdServiceHandler(queryParams, response):
    builder = MimeBuilder(queryParams["Format"])
    response.mimeFormat = builder.getMimeFormat()
    addressPlaceId = getQueryValue(queryParams, "AddressPlaceId", "")
    if addressPlaceId.isdigit():
        address = RUIANConnection.findAddress(addressPlaceId)
        if address:
            response.htmlData = builder.listToResponseText(["True"])
        else:
            response.htmlData = builder.listToResponseText(["False"])
    else:
        response.htmlData = builder.listToResponseText(["False"])
    response.handled = True
    return response
Пример #6
0
def IDCheckServiceHandler(queryParams, response, builder):
    response.mimeFormat = builder.getMimeFormat()
    address = RUIANConnection.findAddress(
        sharetools.getKeyValue(queryParams, "AddressPlaceId"))
    response.handled = True
    if address:
        html = compileaddress.compileAddress(
            builder, address.street, address.houseNumber, address.recordNumber,
            address.orientationNumber, address.orientationNumberCharacter,
            address.zipCode, address.locality, address.localityPart,
            address.districtNumber)
        response.htmlData = builder.listToResponseText([html])

    return response
Пример #7
0
def nearByAddresses(builder, JTSKY, JTSKX, Distance, withID, withDistance,
                    maxCount):
    if JTSKY.find(".") >= 0: JTSKY = JTSKY[:JTSKY.find(".")]
    if JTSKY.find(",") >= 0: JTSKY = JTSKY[:JTSKY.find(",")]
    if JTSKX.find(".") >= 0: JTSKX = JTSKX[:JTSKX.find(".")]
    if JTSKX.find(",") >= 0: JTSKX = JTSKX[:JTSKX.find(",")]
    if JTSKX.isdigit() and JTSKY.isdigit() and Distance.isdigit():
        addresses = RUIANConnection.getNearbyLocalities(
            JTSKX, JTSKY, Distance, maxCount)
        parser = parseaddress.AddressParser()
        FormattedAddress = parser.buildAddress(builder, addresses, withID,
                                               withDistance)
        s = builder.listToResponseText(FormattedAddress, True)
        return s
    else:
        return ""
Пример #8
0
def geocodeAddress(builder, street, houseNumber, recordNumber,
                   orientationNumber, orientationNumberCharacter, zipCode,
                   locality, localityPart, districtNumber, withID,
                   withAddress):
    if rightAddress(street, houseNumber, recordNumber, orientationNumber,
                    orientationNumberCharacter, zipCode, locality,
                    localityPart, districtNumber):
        dict = {
            "street": street,
            "houseNumber": houseNumber,
            "recordNumber": recordNumber,
            "orientationNumber": orientationNumber,
            "orientationNumberCharacter": orientationNumberCharacter,
            "zipCode": zipCode,
            "locality": locality,
            "localityPart": localityPart,
            "districtNumber": districtNumber
        }
        coordinates = RUIANConnection.findCoordinatesByAddress(dict)
        lines = []
        for item in coordinates:
            dictionary = {
                "JTSKY": item[0],
                "JTSKX": item[1],
                "id": str(item[2]),
                "locality": item[3],
                "localityPart": item[4],
                "street": item[5],
                "houseNumber": item[6],
                "recordNumber": item[7],
                "orientationNumber": item[8],
                "orientationNumberCharacter": item[9],
                "zipCode": item[10],
                "districtNumber": item[11]
            }
            lines.append(dictionary)
        s = builder.listOfDictionariesToResponseText(lines, withID,
                                                     withAddress)
        return s
    else:
        return ""
Пример #9
0
def compileAddress(builder, street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, doValidate = False, withRUIANId = False):
    """
        @param street            string  Název ulice
        @param locality          string  Obec
        @param houseNumber       number  Číslo popisné
        @param zipCode           number  Poštovní směrovací číslo
        @param localityPart      string  Část obce, pokud je známa
        @param orientationNumber number  Číslo orientační
        @param orientationNumberCharacter string  Písmeno čísla orientačního
    """
    dict = validate.buildValidateDict(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber)

    if doValidate or withRUIANId:
        rows = RUIANConnection.getAddresses(dict)

        if len(rows) == 1:
            (houseNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, nazevMOP, street, typSO, ruianId) = rows[0]
            if typSO != "č.p.":
                recordNumber = houseNumber
                houseNumber = ""
            if nazevMOP != None and nazevMOP != "":
                districtNumber = nazevMOP[nazevMOP.find(" ") + 1:]
            if not withRUIANId: ruianId = ""
        else:
            return ""
    else:
        ruianId = ""


    if builder == None:
        return str((street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId))
    elif builder.formatText == "json":
        return compileAddressAsJSON(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId)
    elif builder.formatText == "xml":
        return compileAddressAsXML(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId)
    elif builder.formatText == "texttoonerow" or builder.formatText == "htmltoonerow":
        return compileAddressToOneRow(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId)
    else:
        return builder.listToResponseText(compileAddressAsText(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId))
Пример #10
0
def geocodeAddress(builder, street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, withID, withAddress):
    if rightAddress(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber):
        dict = {
            "street": street,
            "houseNumber": houseNumber,
            "recordNumber": recordNumber,
            "orientationNumber": orientationNumber,
            "orientationNumberCharacter": orientationNumberCharacter,
            "zipCode": zipCode,
            "locality": locality,
            "localityPart": localityPart,
            "districtNumber": districtNumber
        }
        coordinates = RUIANConnection.findCoordinatesByAddress(dict)
        lines = []
        for item in coordinates:
            dictionary = {"JTSKY": item[0], "JTSKX": item[1],"id": str(item[2]), "locality": item[3], "localityPart": item[4], "street": item[5], "houseNumber": item[6], "recordNumber": item[7], "orientationNumber": item[8], "orientationNumberCharacter": item[9], "zipCode": item[10], "districtNumber": item[11]}
            lines.append(dictionary)
        s = builder.listOfDictionariesToResponseText(lines, withID, withAddress)
        return s
    else:
        return ""
Пример #11
0
def compileAddress(builder, street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, doValidate = False, withRUIANId = False):
    """
        @param street            string  Název ulice
        @param locality          string  Obec
        @param houseNumber       number  Číslo popisné
        @param zipCode           number  Poštovní směrovací číslo
        @param localityPart      string  Část obce, pokud je známa
        @param orientationNumber number  Číslo orientační
        @param orientationNumberCharacter string  Písmeno čísla orientačního
    """
    dict = validate.buildValidateDict(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber)

    if doValidate or withRUIANId:
        rows = RUIANConnection.getAddresses(dict)

        if len(rows) == 1:
            (houseNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, nazevMOP, street, typSO, ruianId) = rows[0]
            if typSO != "č.p.":
                recordNumber = houseNumber
                houseNumber = ""
            if nazevMOP != None and nazevMOP != "":
                districtNumber = nazevMOP[nazevMOP.find(" ") + 1:]
            if not withRUIANId: ruianId = ""
        else:
            return ""
    else:
        ruianId = ""


    if builder == None:
        return str((street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId))
    elif builder.formatText == "json":
        return compileAddressAsJSON(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId)
    elif builder.formatText == "xml":
        return compileAddressAsXML(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId)
    elif builder.formatText == "texttoonerow" or builder.formatText == "htmltoonerow":
        return compileAddressToOneRow(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId)
    else:
        return builder.listToResponseText(compileAddressAsText(street, houseNumber, recordNumber, orientationNumber, orientationNumberCharacter, zipCode, locality, localityPart, districtNumber, ruianId))
Пример #12
0
def geocodeID(AddressID):
    coordinates = RUIANConnection.findCoordinates(AddressID)
    return coordinates
Пример #13
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
Пример #14
0
def geocodeID(AddressID):
    coordinates = RUIANConnection.findCoordinates(AddressID)
    return coordinates
Пример #15
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
Пример #16
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
Пример #17
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