Ejemplo n.º 1
0
    def _parseJidLocTime(self, mess, args, parse_date = True):
        jid = mess.getFrom().getStripped()

        args = args.strip()

        if args is None or len(args) == 0:
            return (jid, None, None)

        loc = None
        dt = None
        lng = None
        lat = None
        loc_name = None

        pargs = self._arg_re.split(args.strip())

        if pargs is not None:
            for arg in pargs:
                parsed_arg = TypeDetector(arg)
                if parse_date and parsed_arg.getType() == TypeDetector.DATE:
                    if dt is not None:
                        raise CmdError('Invalid double date argument: ' + arg)
                    dt = parsed_arg.getTypeValue()
                elif parsed_arg.getType() == TypeDetector.LOCATION_LONG:
                    if lng is not None:
                        raise CmdError('Invalid double longitude argument: ' + arg)
                    lng = parsed_arg.getTypeValue()
                elif parsed_arg.getType() == TypeDetector.LOCATION_LAT:
                    if lat is not None:
                        raise CmdError('Invalid double latitude argument: ' + arg)
                    lat = parsed_arg.getTypeValue()
                elif parsed_arg.getType() == TypeDetector.STRING:
                    if loc_name is not None:
                        raise CmdError('Invalid double location name argument: ' + arg)
                    loc_name = parsed_arg.getValue()
                else:
                    raise CmdError('Invalid argument: ' + arg)

            if (lng is not None or lat is not None) and loc_name is not None:
                raise CmdError('Invalid arguments. Please specify only one of longitude/latitude or location name.')
            if lng is not None and lat is None:
                raise CmdError('Invalid argument. Latitude missing.')
            if lng is None and lat is not None:
                raise CmdError('Invalid argument. Latitude missing.')
            if lng is not None:
                loc = Location(None, None, None, lng, lat)
            elif loc_name is not None:
                loc = Location(None, None, loc_name, None, None)

        return (jid, loc, dt)