Esempio n. 1
0
 def parse_terminal(pstate):
     next_tag = pstate.next_tag()
     if next_tag is _tag:
         return make_tag_query(pstate.next_str_and_advance())
     elif next_tag is _negtag:
         return NotQuery(make_tag_query(pstate.next_str_and_advance()[1:]))
     elif next_tag is _fulltext:
         return FulltextQuery(pstate.next_str_and_advance()[1:-1])
     elif next_tag is _dated:
         pstate.advance()
         return DatedQuery()
     elif next_tag in _STATELESS_TERMINALS:
         pstate.advance()
         return _STATELESS_TERMINALS[next_tag]
     elif next_tag in [_id]:
         result = IdQuery(int(pstate.next_match_obj().group(1)))
         pstate.advance()
         return result
     elif next_tag in [_before, _after]:
         from parsedatetime.parsedatetime import Calendar
         cal = Calendar()
         timetup = cal.parse(pstate.next_match_obj().group(1))
         pstate.advance()
         import time
         return DateQuery(next_tag == _before, time.mktime(timetup[0]))
     else:
         pstate.expected("terminal")
Esempio n. 2
0
def _read_reminder_params(user_input, force=False):
    """
    :return: (headers, data), or None (meaning to action required)
    """
    dt = None

    # Direct input using arguments or asking the user
    if user_input:
        res = Calendar().nlp(user_input)
        if res:
            dt, flags, start_pos, end_post, matched_text = res[0]
            user_input = user_input[0:start_pos].strip()
    else:
        user_input = input('What\'s the reminder: ')

    if not dt:
        date_str = input('When do you want to be reminded (NA to omit date): ')
        if date_str != "NA":
            dt,r = Calendar().parseDT(date_str)
            if r == 0:
                print('Unrecognizable time text')
                return

    date_msg = ""
    if dt:
        weekday = WEEKDAYS[dt.weekday()]
        date_msg = f'on {weekday}, {str(dt.day).zfill(2)}/{str(dt.month).zfill(2)}/{dt.year} at {str(dt.hour).zfill(2)}:{str(dt.minute).zfill(2)}\n'

    print(f'"{user_input}" {date_msg}')

    if not force:
        save = read_yes_no('Do you want to save this?')

    if force or save:
        return build_request_params(user_input, dt.year, dt.month, dt.day, dt.hour, dt.minute)
Esempio n. 3
0
 def parse_terminal(pstate):
     next_tag = pstate.next_tag()
     if next_tag is _tag:
         return make_tag_query(pstate.next_str_and_advance())
     elif next_tag is _negtag:
         return NotQuery(make_tag_query(pstate.next_str_and_advance()[1:]))
     elif next_tag is _fulltext:
         return FulltextQuery(pstate.next_str_and_advance()[1:-1])
     elif next_tag is _dated:
         pstate.advance()
         return DatedQuery()
     elif next_tag in _STATELESS_TERMINALS:
         pstate.advance()
         return _STATELESS_TERMINALS[next_tag]
     elif next_tag in [_id]:
         result = IdQuery(int(pstate.next_match_obj().group(1)))
         pstate.advance()
         return result
     elif next_tag in [_before, _after]:
         from parsedatetime.parsedatetime import Calendar
         cal = Calendar()
         timetup = cal.parse(pstate.next_match_obj().group(1))
         pstate.advance()
         import time
         return DateQuery(next_tag == _before, time.mktime(timetup[0]))
     else:
         pstate.expected("terminal")
Esempio n. 4
0
def parse_time(time_string):
    """Parse a relative time."""
    from parsedatetime.parsedatetime import Calendar
    calendar = Calendar()
    time_struct, handled = calendar.parse(time_string)
    if not handled & 2:
        raise ValueError('could not parse time')
    return int(time.mktime(time_struct))
Esempio n. 5
0
def datetime_from_friendly_text(text, locale=None):
    #: FIXME ugly hack
    #: WTF!!! parsedatetime is full of bugs.
    if locale == "zh_CN":
        text = text.replace(u"个月", "months")\
                   .replace(u"月", "months")

    calendar = Calendar(Constants(localeID=locale, usePyICU=False))
    time_struct = calendar.parse(text)
    return datetime.datetime(*time_struct[0][:6])
Esempio n. 6
0
def parse_time(timestr):
    """Parses a time string and returns the number of seconds from now to wait

    """
    c = Calendar()
    result, status = c.parse(timestr)

    if status == 0:
        raise ValueError("I don't understand when you want me to do that")

    timestamp = time.mktime(result)
    now = time.time()
    return max(1, timestamp-now)
Esempio n. 7
0
def parse_time(timestr):
    """Parses a time string and returns the number of seconds from now to wait

    """
    c = Calendar()
    result, status = c.parse(timestr)

    if status == 0:
        raise ValueError("I don't understand when you want me to do that")

    timestamp = time.mktime(result)
    now = time.time()
    return max(1, timestamp - now)
Esempio n. 8
0
    def clean(self, value):
        """
        Validates that the input can be converted to a time. Returns a Python
        datetime.time object.
        """
        super(FuzzyTimeField, self).clean(value)
        if value in EMPTY_VALUES:
            return None
        if isinstance(value, datetime.time):
            return value

        c = Calendar()
        parsed = c.parse(value)
        if parsed[1] == 2:
            return datetime.time(*parsed[0][3:6])
        raise ValidationError(self.error_messages['invalid'])
Esempio n. 9
0
def date_time_from_str(datetime_str):
    # from http://stackoverflow.com/a/5903760, updated with more reasonable
    # variable names.

    assert datetime, "Unable to parse empty date/time string."

    parsed_result, date_type = Calendar().parse(datetime_str)

    parsed_datetime = None

    # what was returned (based on parsedatetime docs)
    # 0 = failed to parse
    # 1 = date (with current time, as a struct_time)
    # 2 = time (with current date, as a struct_time)
    # 3 = datetime

    if date_type == 3:

        # parsed_result is a datetime
        parsed_datetime = parsed_result

    elif date_type in (1, 2):

        # parsed_result is struct_time
        parsed_datetime = datetime.datetime(*parsed_result[:6])

    else:

        # Failed to parse
        raise ValueError("Could not parse date/time string: " + datetime_str)

    return parsed_datetime
Esempio n. 10
0
    def clean(self, value):
        """
        Validates that the input can be converted to a datetime. Returns a
        Python datetime.datetime object.
        """
        super(DateTimeField, self).clean(value)
        if value in EMPTY_VALUES:
            return None
        if isinstance(value, datetime.datetime):
            return value
        if isinstance(value, datetime.date):
            return datetime.datetime(value.year, value.month, value.day)
        if isinstance(value, list):
            # Input comes from a SplitDateTimeWidget, for example. So, it's two
            # components: date and time.
            if len(value) != 2:
                raise ValidationError(self.error_messages['invalid'])
            value = '%s %s' % tuple(value)

        c = Calendar()
        parsed = c.parse(value)
        if parsed[1] == 3:
            return datetime.date(*parsed[0][:6])
        raise ValidationError(self.error_messages['invalid'])
Esempio n. 11
0
import calendar
import time
import locale
import six
import re
from dateutil.tz import tzlocal
from dateutil.parser import parse as dateutil_parse
from datetime import datetime, timedelta
from parsedatetime.parsedatetime import Calendar

locale.setlocale(locale.LC_ALL, '')
fuzzy_date_parse = Calendar().parse

REMINDER_REGEX = r'^(\d+)([wdhm]?)(?:\s+(popup|email|sms))?$'


def parse_reminder(rem):
    match = re.match(REMINDER_REGEX, rem)
    if not match:
        # Allow argparse to generate a message when parsing options
        return None
    n = int(match.group(1))
    t = match.group(2)
    m = match.group(3)
    if t == 'w':
        n = n * 7 * 24 * 60
    elif t == 'd':
        n = n * 24 * 60
    elif t == 'h':
        n = n * 60
Esempio n. 12
0
from pyschedules.retrieve import parse_schedules

num_args = len(sys.argv)

if num_args < 3:
    print("Please provide a username and password.")
    sys.exit()

username = sys.argv[1]
password = sys.argv[2]

utc_start = None
utc_stop = None

if num_args >= 5:
    utc_start = Calendar.parse(sys.argv[3])
    utc_stop = Calendar.parse(sys.argv[4])


class EntityTrigger(IEntityTrigger):
    __v_station = False
    __v_lineup = True
    __v_mapping = False
    __v_schedule = False
    __v_program = False
    __v_crew_member = False
    __v_genre = False

    def new_station(self, _id, callSign, name, affiliate, fccChannelNumber):
        """Callback run for each new station"""
Esempio n. 13
0
import calendar
import time
import locale
import six
import re
from dateutil.tz import tzlocal
from dateutil.parser import parse as dateutil_parse
from datetime import datetime, timedelta
from parsedatetime.parsedatetime import Calendar


locale.setlocale(locale.LC_ALL, '')
fuzzy_date_parse = Calendar().parse
fuzzy_datetime_parse = Calendar().parseDT


REMINDER_REGEX = r'^(\d+)([wdhm]?)(?:\s+(popup|email|sms))?$'

DURATION_REGEX = re.compile(
                r'^((?P<days>[\.\d]+?)(?:d|day|days))?[ :]*'
                r'((?P<hours>[\.\d]+?)(?:h|hour|hours))?[ :]*'
                r'((?P<minutes>[\.\d]+?)(?:m|min|mins|minute|minutes))?[ :]*'
                r'((?P<seconds>[\.\d]+?)(?:s|sec|secs|second|seconds))?$'
                )


def parse_reminder(rem):
    match = re.match(REMINDER_REGEX, rem)
    if not match:
        # Allow argparse to generate a message when parsing options
        return None
Esempio n. 14
0
def execute(pagename, request, fieldname='value', titlesearch=0, statistic=0):
    _ = request.getText
    titlesearch = checkTitleSearch(request)
    if titlesearch < 0:
        check_surge_protect(request, kick=True)  # get rid of spammer
        return

    advancedsearch = isAdvancedSearch(request)

    form = request.values

    # context is relevant only for full search
    if titlesearch:
        context = 0
    elif advancedsearch:
        context = 180  # XXX: hardcoded context count for advancedsearch
    else:
        context = int(form.get('context', 0))

    # Get other form parameters
    needle = form.get(fieldname, '')
    case = int(form.get('case', 0))
    regex = int(form.get('regex', 0))  # no interface currently
    hitsFrom = int(form.get('from', 0))
    mtime = None
    msg = ''
    historysearch = 0

    # if advanced search is enabled we construct our own search query
    if advancedsearch:
        and_terms = form.get('and_terms', '').strip()
        or_terms = form.get('or_terms', '').strip()
        not_terms = form.get('not_terms', '').strip()
        #xor_terms = form.get('xor_terms', '').strip()
        categories = form.getlist('categories') or ['']
        timeframe = form.get('time', '').strip()
        language = form.getlist('language') or ['']
        mimetype = form.getlist('mimetype') or [0]
        excludeunderlay = form.get('excludeunderlay', 0)
        nosystemitems = form.get('nosystemitems', 0)
        historysearch = form.get('historysearch', 0)

        mtime = form.get('mtime', '')
        if mtime:
            mtime_parsed = None

            # get mtime from known date/time formats
            for fmt in (request.user.datetime_fmt, request.cfg.datetime_fmt,
                        request.user.date_fmt, request.cfg.date_fmt):
                try:
                    mtime_parsed = time.strptime(mtime, fmt)
                except ValueError:
                    continue
                else:
                    break

            if mtime_parsed:
                mtime = time.mktime(mtime_parsed)
            else:
                # didn't work, let's try parsedatetime
                cal = Calendar()
                mtime_parsed, parsed_what = cal.parse(mtime)
                # XXX it is unclear if usage of localtime here and in parsedatetime module is correct.
                # time.localtime is the SERVER's local time and of no relevance to the user (being
                # somewhere in the world)
                # mktime is reverse function for localtime, so this maybe fixes it again!?
                if parsed_what > 0 and mtime_parsed <= time.localtime():
                    mtime = time.mktime(mtime_parsed)
                else:
                    mtime_parsed = None  # we don't use invalid stuff

            # show info
            if mtime_parsed:
                # XXX mtime_msg is not shown in some cases
                mtime_msg = _(
                    "(!) Only pages changed since '''%s''' are being displayed!",
                    wiki=True) % request.user.getFormattedDateTime(mtime)
            else:
                mtime_msg = _(
                    '/!\\ The modification date you entered was not '
                    'recognized and is therefore not considered for the '
                    'search results!',
                    wiki=True)
        else:
            mtime_msg = None

        word_re = re.compile(r'(\"[\w\s]+"|\w+)')
        needle = ''
        if categories[0]:
            needle += 'category:%s ' % ','.join(categories)
        if language[0]:
            needle += 'language:%s ' % ','.join(language)
        if mimetype[0]:
            needle += 'mimetype:%s ' % ','.join(mimetype)
        if excludeunderlay:
            needle += '-domain:underlay '
        if nosystemitems:
            needle += '-domain:system '
        if and_terms:
            needle += '(%s) ' % and_terms
        if not_terms:
            needle += '(%s) ' % ' '.join(
                ['-%s' % t for t in word_re.findall(not_terms)])
        if or_terms:
            needle += '(%s) ' % ' or '.join(word_re.findall(or_terms))

    # check for sensible search term
    stripped = needle.strip()
    if len(stripped) == 0:
        request.theme.add_msg(
            _(
                'Please use a more selective search term instead '
                'of {{{"%s"}}}',
                wiki=True) % wikiutil.escape(needle), "error")
        Page(request, pagename).send_page()
        return
    needle = stripped

    # Setup for type of search
    if titlesearch:
        title = _('Title Search: "%s"')
        sort = 'page_name'
    else:
        if advancedsearch:
            title = _('Advanced Search: "%s"')
        else:
            title = _('Full Text Search: "%s"')
        sort = 'weight'

    # search the pages
    from MoinMoin.search import searchPages, QueryParser, QueryError
    try:
        query = QueryParser(case=case, regex=regex,
                            titlesearch=titlesearch).parse_query(needle)
    except QueryError:  # catch errors in the search query
        request.theme.add_msg(
            _(
                'Your search query {{{"%s"}}} is invalid. Please refer to '
                'HelpOnSearching for more information.',
                wiki=True,
                percent=True) % wikiutil.escape(needle), "error")
        Page(request, pagename).send_page()
        return

    results = searchPages(request, query, sort, mtime, historysearch)

    # directly show a single hit for title searches
    # this is the "quick jump" functionality if you don't remember
    # the pagename exactly, but just some parts of it
    if titlesearch and len(results.hits) == 1:
        page = results.hits[0]
        if not page.attachment:  # we did not find an attachment
            page = Page(request, page.page_name)
            highlight = query.highlight_re()
            if highlight:
                querydict = {'highlight': highlight}
            else:
                querydict = {}
            url = page.url(request, querystr=querydict)
            request.http_redirect(url)
            return
    if not results.hits:  # no hits?
        f = request.formatter
        querydict = dict(wikiutil.parseQueryString(request.query_string))
        querydict.update({'titlesearch': 0})

        request.theme.add_msg(
            _(
                'Your search query {{{"%s"}}} didn\'t return any results. '
                'Please change some terms and refer to HelpOnSearching for '
                'more information.%s',
                wiki=True,
                percent=True) %
            (wikiutil.escape(needle), titlesearch and ''.join([
                '<br>',
                _('(!) Consider performing a', wiki=True),
                ' ',
                f.url(1, href=request.page.url(request, querydict, escape=0)),
                _('full-text search with your search terms'),
                f.url(0),
                '.',
            ]) or ''), "error")
        Page(request, pagename).send_page()
        return

    # This action generates data using the user language
    request.setContentLanguage(request.lang)

    request.theme.send_title(title % needle, pagename=pagename)

    # Start content (important for RTL support)
    request.write(request.formatter.startContent("content"))

    # Hints
    f = request.formatter
    hints = []

    if titlesearch:
        querydict = dict(wikiutil.parseQueryString(request.query_string))
        querydict.update({'titlesearch': 0})

        hints.append(''.join([
            _(
                "(!) You're performing a title search that might not include"
                ' all related results of your search query in this wiki. <<BR>>',
                wiki=True),
            ' ',
            f.url(1, href=request.page.url(request, querydict, escape=0)),
            f.text(
                _('Click here to perform a full-text search with your '
                  'search terms!')),
            f.url(0),
        ]))

    if advancedsearch and mtime_msg:
        hints.append(mtime_msg)

    if hints:
        request.write(searchHints(f, hints))

    # Search stats
    request.write(results.stats(request, request.formatter, hitsFrom))

    # Then search results
    info = not titlesearch
    if context:
        output = results.pageListWithContext(request,
                                             request.formatter,
                                             info=info,
                                             context=context,
                                             hitsFrom=hitsFrom,
                                             hitsInfo=1)
    else:
        output = results.pageList(request,
                                  request.formatter,
                                  info=info,
                                  hitsFrom=hitsFrom,
                                  hitsInfo=1)

    request.write(output)

    request.write(request.formatter.endContent())
    request.theme.send_footer(pagename)
    request.theme.send_closing_html()
Esempio n. 15
0
def fuzzydtparse(request):
    """
    Attempts to parse a natural-language date/time string and return a
    formatted representation of the parsed date/time.

    The returned representations are formatted using django's php-style
    datetime formatting facilities. See
    http://docs.djangoproject.com/en/dev/ref/templates/builtins/#now for a
    full specification

    GET/POST arguments:
    dtstring *(required)*
        The natural-language date and/or time string to parse.

    dateformat (optional)
        A format specifier string used to format the returned representation
        if it is determined to be a date instance. The default format is
        'l, F jS Y', which produces values like 'Thursday, October 1st 2009'.

    timeformat (optional)
        A format specifier string used to format the returned representation
        if it is determined to be a time instance. The default format is
        'P', which produces values like '6:26 p.m.'.

    dtformat (optional)
        A format specifier string used to format the returned representation
        if it is determined to be a datetime instance. The default format is
        'l, F jS Y, P', which produces values like
        'Thursday, October 1st 2009, 6:26 p.m.'.

    require (optional)
        One of 'date', 'time', 'datetime'. If the parsed value is not of the
        specified type, the view will return 400/Bad Request

    callback (optional)
        JSONP callback.

    Returns a json dictionary containing two values:
    type
        An string indicating the kind of representation returned.
        One of 'date', 'time', or 'datetime'

    parsed
        A string representation of the parsed datetime.

    Invalid / unparsable datetimes will return 400/Bad Request.

    """
    try:
        dtstring = request.REQUEST['dtstring']
    except KeyError:
        return HttpResponseBadRequest()


    kind = {
        'date': 1,
        'time': 2,
        'datetime': 3
    }

    dateformat = request.REQUEST.get('dateformat', 'l, F jS Y' )
    timeformat = request.REQUEST.get('timeformat', 'P')
    dtformat = request.REQUEST.get('dtformat', 'l, F jS Y, P')
    require = request.REQUEST.get('require', None)
    callback = request.REQUEST.get('callback', None)

    if require and require not in kind:
        return HttpResponseBadRequest()

    c = Calendar()

    # TODO: possible security hole?
    parsed = c.parse(dtstring)
    if parsed[1] == 0:
        return HttpResponseBadRequest()
    parsed_dt = datetime.datetime(*parsed[0][:6])
    response_dict = {}
    if require and parsed[1] != kind[require]:
        return HttpResponseBadRequest()
    try:
        if parsed[1] == 1:
            response_dict['type'] = 'date'
            response_dict['parsed'] = format(parsed_dt, dateformat)
        elif parsed[1] == 2:
            response_dict['type'] = 'time'
            response_dict['parsed'] = format(parsed_dt, timeformat)
        elif parsed[1] == 3:
            response_dict['type'] = 'datetime'
            response_dict['parsed'] = format(parsed_dt, dtformat)
        else:
            #should never be here
            return HttpResponseBadRequest()
    except:
        return HttpResponseBadRequest()

    if callback:
        resp = "%s(%s)" % (callback, json.dumps(response_dict))
    else:
        resp = json.dumps(response_dict)
    return HttpResponse(resp, mimetype='application/javascript')
Esempio n. 16
0
def execute(pagename, request, fieldname='value', titlesearch=0, statistic=0):
    _ = request.getText
    titlesearch = checkTitleSearch(request)
    if titlesearch < 0:
        check_surge_protect(request, kick=True) # get rid of spammer
        return

    if 'metasearch' in request.values: 
        form = MultiDict(request.values)
        form['action'] = 'MetaSearch'
        val = form.get('value', '')
        form['q'] = val
        request.values = CombinedMultiDict([MultiDict(form)])
        return ms_execute(pagename, request)

    advancedsearch = isAdvancedSearch(request)

    form = request.values

    # context is relevant only for full search
    if titlesearch:
        context = 0
    elif advancedsearch:
        context = 180 # XXX: hardcoded context count for advancedsearch
    else:
        context = int(form.get('context', 0))

    # Get other form parameters
    needle = form.get(fieldname, '')
    case = int(form.get('case', 0))
    regex = int(form.get('regex', 0)) # no interface currently
    hitsFrom = int(form.get('from', 0))
    highlight_titles = int(form.get('highlight_titles', 1))
    highlight_pages = int(form.get('highlight_pages', 1))
    mtime = None
    msg = ''
    historysearch = 0

    # if advanced search is enabled we construct our own search query
    if advancedsearch:
        and_terms = form.get('and_terms', '').strip()
        or_terms = form.get('or_terms', '').strip()
        not_terms = form.get('not_terms', '').strip()
        #xor_terms = form.get('xor_terms', '').strip()
        categories = form.getlist('categories') or ['']
        timeframe = form.get('time', '').strip()
        language = form.getlist('language') or ['']
        mimetype = form.getlist('mimetype') or [0]
        excludeunderlay = form.get('excludeunderlay', 0)
        nosystemitems = form.get('nosystemitems', 0)
        historysearch = form.get('historysearch', 0)

        mtime = form.get('mtime', '')
        if mtime:
            mtime_parsed = None

            # get mtime from known date/time formats
            for fmt in (request.user.datetime_fmt,
                    request.cfg.datetime_fmt, request.user.date_fmt,
                    request.cfg.date_fmt):
                try:
                    mtime_parsed = time.strptime(mtime, fmt)
                except ValueError:
                    continue
                else:
                    break

            if mtime_parsed:
                mtime = time.mktime(mtime_parsed)
            else:
                # didn't work, let's try parsedatetime
                cal = Calendar()
                mtime_parsed, parsed_what = cal.parse(mtime)
                # XXX it is unclear if usage of localtime here and in parsedatetime module is correct.
                # time.localtime is the SERVER's local time and of no relevance to the user (being
                # somewhere in the world)
                # mktime is reverse function for localtime, so this maybe fixes it again!?
                if parsed_what > 0 and mtime_parsed <= time.localtime():
                    mtime = time.mktime(mtime_parsed)
                else:
                    mtime_parsed = None # we don't use invalid stuff

            # show info
            if mtime_parsed:
                # XXX mtime_msg is not shown in some cases
                mtime_msg = _("(!) Only pages changed since '''%s''' are being displayed!",
                              wiki=True) % request.user.getFormattedDateTime(mtime)
            else:
                mtime_msg = _('/!\\ The modification date you entered was not '
                        'recognized and is therefore not considered for the '
                        'search results!', wiki=True)
        else:
            mtime_msg = None

        word_re = re.compile(r'(\"[\w\s]+"|\w+)', re.UNICODE)
        needle = ''
        if categories[0]:
            needle += 'category:%s ' % ','.join(categories)
        if language[0]:
            needle += 'language:%s ' % ','.join(language)
        if mimetype[0]:
            needle += 'mimetype:%s ' % ','.join(mimetype)
        if excludeunderlay:
            needle += '-domain:underlay '
        if nosystemitems:
            needle += '-domain:system '
        if and_terms:
            needle += '(%s) ' % and_terms
        if not_terms:
            needle += '(%s) ' % ' '.join(['-%s' % t for t in word_re.findall(not_terms)])
        if or_terms:
            needle += '(%s) ' % ' or '.join(word_re.findall(or_terms))

    # check for sensible search term
    stripped = needle.strip()
    if len(stripped) == 0:
        request.theme.add_msg(_('Please use a more selective search term instead '
                'of {{{"%s"}}}', wiki=True) % wikiutil.escape(needle), "error")
        Page(request, pagename).send_page()
        return
    needle = stripped

    # Setup for type of search
    if titlesearch:
        title = _('Title Search: "%s"')
        sort = 'page_name'
    else:
        if advancedsearch:
            title = _('Advanced Search: "%s"')
        else:
            title = _('Full Text Search: "%s"')
        sort = 'weight'

    # search the pages
    from MoinMoin.search import searchPages, QueryParser, QueryError
    try:
        query = QueryParser(case=case, regex=regex,
                titlesearch=titlesearch).parse_query(needle)
    except QueryError: # catch errors in the search query
        request.theme.add_msg(_('Your search query {{{"%s"}}} is invalid. Please refer to '
                'HelpOnSearching for more information.', wiki=True, percent=True) % wikiutil.escape(needle), "error")
        Page(request, pagename).send_page()
        return

    results = searchPages(request, query, sort, mtime, historysearch)

    # directly show a single hit for title searches
    # this is the "quick jump" functionality if you don't remember
    # the pagename exactly, but just some parts of it
    if titlesearch and len(results.hits) == 1:
        page = results.hits[0]
        if not page.attachment: # we did not find an attachment
            page = Page(request, page.page_name)
            querydict = {}
            if highlight_pages:
                highlight = query.highlight_re()
                if highlight:
                    querydict.update({'highlight': highlight})
            url = page.url(request, querystr=querydict)
            request.http_redirect(url)
            return
    if not results.hits: # no hits?
        f = request.formatter
        querydict = wikiutil.parseQueryString(request.query_string).to_dict()
        querydict.update({'titlesearch': 0})

        request.theme.add_msg(_('Your search query {{{"%s"}}} didn\'t return any results. '
                'Please change some terms and refer to HelpOnSearching for '
                'more information.%s', wiki=True, percent=True) % (wikiutil.escape(needle),
                    titlesearch and ''.join([
                        '<br>',
                        _('(!) Consider performing a', wiki=True), ' ',
                        f.url(1, href=request.page.url(request, querydict, escape=0)),
                        _('full-text search with your search terms'),
                        f.url(0), '.',
                    ]) or ''), "error")
        Page(request, pagename).send_page()
        return

    # This action generates data using the user language
    request.setContentLanguage(request.lang)

    request.theme.send_title(title % needle, pagename=pagename)

    # Start content (important for RTL support)
    request.write(request.formatter.startContent("content"))

    # Hints
    f = request.formatter
    hints = []

    if titlesearch:
        querydict = wikiutil.parseQueryString(request.query_string).to_dict()
        querydict.update({'titlesearch': 0})

        hints.append(''.join([
            _("(!) You're performing a title search that might not include"
                ' all related results of your search query in this wiki. <<BR>>', wiki=True),
            ' ',
            f.url(1, href=request.page.url(request, querydict, escape=0)),
            f.text(_('Click here to perform a full-text search with your '
                'search terms!')),
            f.url(0),
        ]))

    if advancedsearch and mtime_msg:
        hints.append(mtime_msg)

    if hints:
        request.write(searchHints(f, hints))

    # Search stats
    request.write(results.stats(request, request.formatter, hitsFrom))

    # Then search results
    info = not titlesearch
    if context:
        output = results.pageListWithContext(request, request.formatter,
                info=info, context=context, hitsFrom=hitsFrom, hitsInfo=1,
                highlight_titles=highlight_titles,
                highlight_pages=highlight_pages)
    else:
        output = results.pageList(request, request.formatter, info=info,
                hitsFrom=hitsFrom, hitsInfo=1,
                highlight_titles=highlight_titles,
                highlight_pages=highlight_pages)

    request.write(output)

    request.write(request.formatter.endContent())
    request.theme.send_footer(pagename)
    request.theme.send_closing_html()
Esempio n. 17
0
from pyschedules.retrieve import parse_schedules

num_args = len(sys.argv)

if num_args < 3:
    print("Please provide a username and password.")
    sys.exit()

username = sys.argv[1]
password = sys.argv[2]

utc_start = None
utc_stop = None

if num_args >= 5:
    utc_start = Calendar.parse(sys.argv[3])
    utc_stop = Calendar.parse(sys.argv[4])

class EntityTrigger(IEntityTrigger):
    __v_station     = False
    __v_lineup      = True
    __v_mapping     = False
    __v_schedule    = False
    __v_program     = False
    __v_crew_member = False
    __v_genre       = False

    def new_station(self, _id, callSign, name, affiliate, fccChannelNumber):
        """Callback run for each new station"""

        if self.__v_station: