コード例 #1
0
ファイル: site.py プロジェクト: CarlosGabaldon/calabro
    def login(self, forward_url=None, previous_url=None, *args, **kw):

        if not identity.current.anonymous \
            and identity.was_login_attempted() \
            and not identity.get_identity_errors():
            raise controllers.redirect(forward_url)

        forward_url=None
        previous_url= request.path

        if identity.was_login_attempted():
            msg=_("The credentials you supplied were not correct or "
                   "did not grant access to this resource.")
        elif identity.get_identity_errors():
            msg=_("You must provide your credentials before accessing "
                   "this resource.")
        else:
            msg=_("Please log in.")
            site=get_current_site()
            forward_url= request.headers.get("Referer", "/%s" % (site.name))

        response.status=403
        return dict(message=msg, previous_url=previous_url, logging_in=True,
                    original_parameters=request.params,
                    forward_url=forward_url)
コード例 #2
0
ファイル: page.py プロジェクト: CarlosGabaldon/calabro
 def create_page(self, name, title, body):
     page_name = name.replace(' ', '_')
     site = get_current_site()
     page = Pages(name=page_name,
                  title=title, 
                  body=body,
                  site=site)
     raise controllers.redirect(page_name)
コード例 #3
0
ファイル: page.py プロジェクト: CarlosGabaldon/calabro
 def update_page(self, page_id, name, title, body):
     page_name = name.replace(' ', '_')
     page = Pages.get(page_id)
     page.set(name=page_name,
              title=title,
              body=body)
     raise controllers.redirect(page_name)        
 
    
     
     
コード例 #4
0
ファイル: page.py プロジェクト: CarlosGabaldon/calabro
    def default(self, name, *args, **kwargs):
        site=get_current_site()
        page = Pages.find_by_name(name=name,
                                  site=site)
        if page == None:
            raise controllers.redirect('/new_page?name=' + name)

        return dict(page=page,
                    site=site,
                    archive_posts= Posts.find_archive_count(site=site),
                    archives_widget=widgets.archives_widget,
                    tags_widget=widgets.tags_widget,
                    pages_widget=widgets.pages_widget,
                    pages=Pages.find_all(site=site),
                    tags=Tags.find_all(site=site),
                    admin_widget=widgets.admin_widget,
                    badge_widget=widgets.badge_widget,
                    recent_comments=Comments.find_recent(),
                    recent_comments_widget=widgets.recent_comments_widget)
コード例 #5
0
ファイル: blog.py プロジェクト: CarlosGabaldon/calabro
 def post(self, year, month, day, title):
     permalink = '/'.join((year, month, day, title))
     site=get_current_site()
     try:
         post = Posts.find_by_permalink(permalink=permalink, site=site)
     except SQLObjectNotFound:
             flash("Sorry, post could not be found!")
             raise controllers.redirect('/')
             
     return dict(post=post,
                site=site,
                comment_widget=widgets.comment_widget,
                archive_posts= Posts.find_archive_count(site=site),
                archives_widget=widgets.archives_widget,
                tags_widget=widgets.tags_widget,
                pages_widget=widgets.pages_widget,
                pages=Pages.find_all(site=site),
                tags=Tags.find_all(site=site),
                admin_widget=widgets.admin_widget,
                badge_widget=widgets.badge_widget,
                recent_comments=Comments.find_recent(),
                recent_comments_widget=widgets.recent_comments_widget)
コード例 #6
0
        def decorated(func, *args, **kw):
            def kwpop(name, default=None):
                return kw.pop(var_name + '_tgp_' + name,
                              kw.pop('tg_paginate_' + name, default))

            page = kwpop('no')
            if page is None:
                page = 1
            elif page == 'last':
                page = None
            else:
                try:
                    page = int(page)
                    if page < 1:
                        raise ValueError
                except (TypeError, ValueError):
                    page = 1
                    if get('paginate.redirect_on_out_of_range'):
                        cherrypy.request.params[var_name + '_tgp_no'] = page
                        redirect(cherrypy.request.path_info,
                                 cherrypy.request.params)

            try:
                limit_ = int(kwpop('limit'))
                if max_limit is not None and not (allow_limit_override
                                                  and max_limit == 0):
                    if max_limit <= 0:
                        raise ValueError
                    limit_ = min(limit_, max_limit)
            except (TypeError, ValueError):
                limit_ = limit
            order = kwpop('order')
            ordering = kwpop('ordering')

            log.debug("paginate params: page=%s, limit=%s, order=%s", page,
                      limit_, order)

            # get the output from the decorated function
            output = func(*args, **kw)
            if not isinstance(output, dict):
                return output

            try:
                var_data = output[var_name]
            except KeyError:
                raise KeyError("paginate: var_name"
                               " (%s) not found in output dict" % var_name)
            if not hasattr(var_data, '__getitem__') and callable(var_data):
                # e.g. SQLAlchemy query class
                var_data = var_data()
                if not hasattr(var_data, '__getitem__'):
                    raise TypeError('Paginate variable is not a sequence')

            if dynamic_limit:
                try:
                    dyn_limit = output[dynamic_limit]
                except KeyError:
                    raise KeyError("paginate: dynamic_limit"
                                   " (%s) not found in output dict" %
                                   dynamic_limit)
                limit_ = dyn_limit

            if ordering:
                ordering = str(ordering).split(',')
            else:
                ordering = default_order or []
                if isinstance(ordering, basestring):
                    # adapt old style default_order to new style
                    if default_reversed:
                        ordering = "-" + ordering
                    ordering = [ordering]
                elif default_reversed:
                    raise ValueError(
                        "paginate: default_reversed (deprecated)"
                        " only allowed when default_order is a basestring")

            if order:
                order = str(order)
                log.debug('paginate: ordering was %s, sort is %s', ordering,
                          order)
                sort_ordering(ordering, order)
            log.debug('paginate: ordering is %s', ordering)

            try:
                row_count = len(var_data)
            except TypeError:
                try:  # SQL query
                    row_count = var_data.count() or 0
                except AttributeError:  # other iterator
                    var_data = list(var_data)
                    row_count = len(var_data)

            if ordering:
                var_data = sort_data(
                    var_data, ordering, max_sort is None
                    or 0 < row_count <= max_sort)

            # If limit is zero then return all our rows
            if not limit_:
                limit_ = row_count or 1

            page_count = int(ceil(float(row_count) / limit_))

            if page is None:
                page = max(page_count, 1)
                if get('paginate.redirect_on_last_page'):
                    cherrypy.request.params[var_name + '_tgp_no'] = page
                    redirect(cherrypy.request.path_info,
                             cherrypy.request.params)
            elif page > page_count:
                page = max(page_count, 1)
                if get('paginate.redirect_on_out_of_range'):
                    cherrypy.request.params[var_name + '_tgp_no'] = page
                    redirect(cherrypy.request.path_info,
                             cherrypy.request.params)

            offset = (page - 1) * limit_

            pages_to_show = _select_pages_to_show(page, page_count, max_pages)

            # remove pagination parameters from request
            input_values = variable_encode(cherrypy.request.params.copy())
            input_values.pop('self', None)
            for input_key in input_values.keys():
                if (input_key.startswith(var_name + '_tgp_')
                        or input_key.startswith('tg_paginate_')):
                    del input_values[input_key]

            paginate_instance = Paginate(current_page=page,
                                         limit=limit_,
                                         pages=pages_to_show,
                                         page_count=page_count,
                                         input_values=input_values,
                                         order=order,
                                         ordering=ordering,
                                         row_count=row_count,
                                         var_name=var_name)

            cherrypy.request.paginate = paginate_instance
            if not hasattr(cherrypy.request, 'paginates'):
                cherrypy.request.paginates = dict()
            cherrypy.request.paginates[var_name] = paginate_instance

            # we replace the var with the sliced one
            endpoint = offset + limit_
            log.debug("paginate: slicing data between %d and %d", offset,
                      endpoint)

            global _simulate_offset
            if _simulate_offset is None:
                _simulate_offset = get('paginate.simulate_offset', None)
                if _simulate_offset is None:
                    _simulate_offset = False
                    so_db = get('sqlobject.dburi', 'NOMATCH:').split(':', 1)[0]
                    sa_db = get('sqlalchemy.dburi', 'NOMATCH:').split(':',
                                                                      1)[0]
                    if so_db in _so_no_offset or sa_db in _sa_no_offset:
                        _simulate_offset = True
                        log.warning(
                            "paginate: simulating OFFSET,"
                            " paginate may be slow"
                            " (disable with paginate.simulate_offset=False)")

            if _simulate_offset:
                var_data = iter(var_data[:endpoint])
                # skip over the number of records specified by offset
                for i in xrange(offset):
                    var_data.next()
                # return the records that remain
                output[var_name] = list(var_data)
            else:
                try:
                    output[var_name] = var_data[offset:endpoint]
                except TypeError:
                    for i in xrange(offset):
                        var_data.next()
                    output[var_name] = [
                        var_data.next() for i in xrange(offset, endpoint)
                    ]

            return output
コード例 #7
0
ファイル: paginate.py プロジェクト: OnShift/turbogears
        def decorated(func, *args, **kw):

            def kwpop(name, default=None):
                return kw.pop(var_name + '_tgp_' + name,
                    kw.pop('tg_paginate_' + name, default))

            page = kwpop('no')
            if page is None:
                page = 1
            elif page == 'last':
                page = None
            else:
                try:
                    page = int(page)
                    if page < 1:
                        raise ValueError
                except (TypeError, ValueError):
                    page = 1
                    if get('paginate.redirect_on_out_of_range'):
                        cherrypy.request.params[var_name + '_tgp_no'] = page
                        redirect(cherrypy.request.path_info, cherrypy.request.params)

            try:
                limit_ = int(kwpop('limit'))
                if max_limit is not None and not (
                        allow_limit_override and max_limit == 0):
                    if max_limit <= 0:
                        raise ValueError
                    limit_ = min(limit_, max_limit)
            except (TypeError, ValueError):
                limit_ = limit
            order = kwpop('order')
            ordering = kwpop('ordering')

            log.debug("paginate params: page=%s, limit=%s, order=%s",
                page, limit_, order)

            # get the output from the decorated function
            output = func(*args, **kw)
            if not isinstance(output, dict):
                return output

            try:
                var_data = output[var_name]
            except KeyError:
                raise KeyError("paginate: var_name"
                    " (%s) not found in output dict" % var_name)
            if not hasattr(var_data, '__getitem__') and callable(var_data):
                # e.g. SQLAlchemy query class
                var_data = var_data()
                if not hasattr(var_data, '__getitem__'):
                    raise TypeError('Paginate variable is not a sequence')

            if dynamic_limit:
                try:
                    dyn_limit = output[dynamic_limit]
                except KeyError:
                    raise KeyError("paginate: dynamic_limit"
                        " (%s) not found in output dict" % dynamic_limit)
                limit_ = dyn_limit

            if ordering:
                ordering = str(ordering).split(',')
            else:
                ordering = default_order or []
                if isinstance(ordering, basestring):
                    # adapt old style default_order to new style
                    if default_reversed:
                        ordering = "-" + ordering
                    ordering = [ordering]
                elif default_reversed:
                    raise ValueError("paginate: default_reversed (deprecated)"
                        " only allowed when default_order is a basestring")

            if order:
                order = str(order)
                log.debug('paginate: ordering was %s, sort is %s',
                    ordering, order)
                sort_ordering(ordering, order)
            log.debug('paginate: ordering is %s', ordering)

            try:
                row_count = len(var_data)
            except TypeError:
                try: # SQL query
                    row_count = var_data.count() or 0
                except AttributeError: # other iterator
                    var_data = list(var_data)
                    row_count = len(var_data)

            if ordering:
                var_data = sort_data(var_data, ordering,
                    max_sort is None or 0 < row_count <= max_sort)

            # If limit is zero then return all our rows
            if not limit_:
                limit_ = row_count or 1

            page_count = int(ceil(float(row_count)/limit_))

            if page is None:
                page = max(page_count, 1)
                if get('paginate.redirect_on_last_page'):
                    cherrypy.request.params[var_name + '_tgp_no'] = page
                    redirect(cherrypy.request.path_info, cherrypy.request.params)
            elif page > page_count:
                page = max(page_count, 1)
                if get('paginate.redirect_on_out_of_range'):
                    cherrypy.request.params[var_name + '_tgp_no'] = page
                    redirect(cherrypy.request.path_info, cherrypy.request.params)

            offset = (page-1) * limit_

            pages_to_show = _select_pages_to_show(page, page_count, max_pages)

            # remove pagination parameters from request
            input_values =  variable_encode(cherrypy.request.params.copy())
            input_values.pop('self', None)
            for input_key in input_values.keys():
                if (input_key.startswith(var_name + '_tgp_') or
                        input_key.startswith('tg_paginate_')):
                    del input_values[input_key]

            paginate_instance = Paginate(
                current_page=page,
                limit=limit_,
                pages=pages_to_show,
                page_count=page_count,
                input_values=input_values,
                order=order,
                ordering=ordering,
                row_count=row_count,
                var_name=var_name)

            cherrypy.request.paginate = paginate_instance
            if not hasattr(cherrypy.request, 'paginates'):
                cherrypy.request.paginates = dict()
            cherrypy.request.paginates[var_name] = paginate_instance

            # we replace the var with the sliced one
            endpoint = offset + limit_
            log.debug("paginate: slicing data between %d and %d",
                offset, endpoint)

            global _simulate_offset
            if _simulate_offset is None:
                _simulate_offset = get('paginate.simulate_offset', None)
                if _simulate_offset is None:
                    _simulate_offset = False
                    so_db = get('sqlobject.dburi', 'NOMATCH:').split(':', 1)[0]
                    sa_db = get('sqlalchemy.dburi', 'NOMATCH:').split(':', 1)[0]
                    if so_db in _so_no_offset or sa_db in _sa_no_offset:
                        _simulate_offset = True
                        log.warning("paginate: simulating OFFSET,"
                            " paginate may be slow"
                            " (disable with paginate.simulate_offset=False)")

            if _simulate_offset:
                var_data = iter(var_data[:endpoint])
                # skip over the number of records specified by offset
                for i in xrange(offset):
                    var_data.next()
                # return the records that remain
                output[var_name] = list(var_data)
            else:
                try:
                    output[var_name] = var_data[offset:endpoint]
                except TypeError:
                    for i in xrange(offset):
                        var_data.next()
                    output[var_name] = [var_data.next()
                        for i in xrange(offset, endpoint)]

            return output
コード例 #8
0
ファイル: controllers.py プロジェクト: CarlosGabaldon/calabro
 def index(self, *args, **kw):
     raise controllers.redirect(config.get('calabro.default_site'))
    
     
     
コード例 #9
0
ファイル: helpers.py プロジェクト: CarlosGabaldon/calabro
def redirect_to_users():
    site = get_current_site()
    raise controllers.redirect("/%s/users" % (site.name))
コード例 #10
0
ファイル: helpers.py プロジェクト: CarlosGabaldon/calabro
def redirect_to_site(site_name):
    raise controllers.redirect("../../%s" % (site_name))