def new_request(self, uname=None, args=None): r"""Create and initialize a new request object. """ req = dummy_request(self.env, uname) if args is not None: req.args = args return req
def render_widget(self, name, context, options): """Execute custom query and render data using a grid """ data = None req = context.req try: params = ('query', 'max', 'page', 'title') qstr, maxrows, page, title = self.bind_params(name, options, *params) fakereq = dummy_request(self.env, req.authname) fakereq.args = args = parse_qs(qstr) fakereq.arg_list = [] for k,v in args.items(): # Patch for 0.13 fakereq.arg_list.extend((k, _v) for _v in v) try: if len(v) == 1: args[k] = v[0] except TypeError: pass more_link_href = req.href('query', args) args.update({'page' : page, 'max': maxrows}) qrymdl = self.env[QueryModule] if qrymdl is None : raise TracError('Query module not available (disabled?)') data = qrymdl.process_request(fakereq)[1] except TracError, exc: if data is not None: exc.title = data.get('title', 'TracQuery') raise
def render_widget(self, name, context, options): """Execute custom query and render data using a grid """ data = None req = context.req try: params = ('query', 'max', 'page', 'title') qstr, maxrows, page, title = self.bind_params( name, options, *params) fakereq = dummy_request(self.env, req.authname) fakereq.args = args = parse_qs(qstr) fakereq.arg_list = [] for k, v in args.items(): # Patch for 0.13 fakereq.arg_list.extend((k, _v) for _v in v) try: if len(v) == 1: args[k] = v[0] except TypeError: pass args.update({'page': page, 'max': maxrows}) qrymdl = self.env[QueryModule] if qrymdl is None: raise TracError('Query module not available (disabled?)') data = qrymdl.process_request(fakereq)[1] except TracError, exc: if data is not None: exc.title = data.get('title', 'TracQuery') raise
def render_widget(self, name, context, options): """Gather timeline events and render data in compact view """ data = None req = context.req try: params = ('from', 'daysback', 'doneby', 'precision', 'filters', \ 'max') start, days, user, precision, filters, count = \ self.bind_params(name, options, *params) if count is None: count = self.default_count fakereq = dummy_request(self.env, req.authname) fakereq.args = { 'author' : user or '', 'daysback' : days or '', 'max' : count, 'precision' : precision, 'user' : user } if start is not None: fakereq.args['from'] = start.strftime('%x %X') timemdl = self.env[TimelineModule] if timemdl is None : raise TracError('Timeline module not available (disabled?)') data = timemdl.process_request(fakereq)[1] except TracError, exc: if data is not None: exc.title = data.get('title', 'TracReports') raise
def post_process_request(self, req, template, data, content_type): """Append necessary ticket data """ try: tm = self._get_ticket_module() except TracError: # no ticket module so no create ticket button return template, data, content_type if (template, data, content_type) != (None,) * 3: # TODO: Check ! if data is None: data = {} dum_req = dummy_request(self.env) dum_req.perm = req.perm ticket = Ticket(self.env) tm._populate(dum_req, ticket, False) all_fields = dict([f['name'], f] for f in tm._prepare_fields(dum_req, ticket) if f['type'] == 'select') product_field = all_fields.get('product') if product_field: # When at product scope, set the default selection to the # product at current scope. When at global scope the default # selection is determined by [ticket] default_product if self.env.product and \ self.env.product.prefix in product_field['options']: product_field['value'] = self.env.product.prefix # Transform the options field to dictionary of product # attributes and filter out products for which user doesn't # have TICKET_CREATE permission product_field['options'] = [ dict(value=p, new_ticket_url=dum_req.href.products(p, 'newticket'), description=ProductEnvironment.lookup_env(self.env, p) .product.name ) for p in product_field['options'] if req.perm.has_permission('TICKET_CREATE', Neighborhood('product', p) .child(None, None))] else: msg = _("Missing ticket field '%(field)s'.", field='product') if ProductTicketModule is not None and \ self.env[ProductTicketModule] is not None: # Display warning alert to users add_warning(req, msg) else: # Include message in logs since this might be a failure self.log.warning(msg) data['qct'] = { 'fields': [all_fields[k] for k in self.qct_fields if k in all_fields], 'hidden_fields': [all_fields[k] for k in all_fields.keys() if k not in self.qct_fields] } return template, data, content_type
def render_widget(self, name, context, options): """Gather timeline events and render data in compact view """ data = None req = context.req try: timemdl = self.env[TimelineModule] if timemdl is None : raise TracError('Timeline module not available (disabled?)') params = ('from', 'daysback', 'doneby', 'precision', 'filters', \ 'max', 'realm', 'id') start, days, user, precision, filters, count, realm, rid = \ self.bind_params(name, options, *params) if count is None: count = self.default_count fakereq = dummy_request(self.env, req.authname) fakereq.args = { 'author' : user or '', 'daysback' : days or '', 'max' : count, 'precision' : precision, 'user' : user } if filters: fakereq.args.update(dict((k, True) for k in filters)) if start is not None: fakereq.args['from'] = start.strftime('%x %X') wcontext = context.child() if (realm, rid) != (None, None): # Override rendering context resource = Resource(realm, rid) if resource_exists(self.env, resource) or \ realm == rid == '': wcontext = context.child(resource) wcontext.req = req else: self.log.warning("TimelineWidget: Resource %s not found", resource) # FIXME: Filter also if existence check is not conclusive ? if resource_exists(self.env, wcontext.resource): module = FilteredTimeline(self.env, wcontext) self.log.debug('Filtering timeline events for %s', \ wcontext.resource) else: module = timemdl data = module.process_request(fakereq)[1] except TracError, exc: if data is not None: exc.title = data.get('title', 'Activity') raise
def post_process_request(self, req, template, data, content_type): """Append necessary ticket data """ try: tm = self._get_ticket_module() except TracError: # no ticket module so no create ticket button return template, data, content_type if (template, data, content_type) != (None, ) * 3: # TODO: Check ! if data is None: data = {} req = dummy_request(self.env) ticket = Ticket(self.env) tm._populate(req, ticket, False) all_fields = dict([f['name'], f] for f in tm._prepare_fields(req, ticket) if f['type'] == 'select') product_field = all_fields['product'] if product_field: if self.env.product: product_field['value'] = self.env.product.prefix else: # Global scope, now check default_product_prefix is valid default_prefix = self.config.get('multiproduct', 'default_product_prefix') try: ProductEnvironment.lookup_env(self.env, default_prefix) except LookupError: product_field['value'] = product_field['options'][0] else: product_field['value'] = default_prefix data['qct'] = { 'fields': [all_fields[k] for k in self.qct_fields if k in all_fields], 'hidden_fields': [ all_fields[k] for k in all_fields.keys() if k not in self.qct_fields ] } return template, data, content_type
def post_process_request(self, req, template, data, content_type): """Append necessary ticket data """ try: tm = self._get_ticket_module() except TracError: # no ticket module so no create ticket button return template, data, content_type if (template, data, content_type) != (None, ) * 3: # TODO: Check ! if data is None: data = {} fakereq = dummy_request(self.env) ticket = Ticket(self.env) tm._populate(fakereq, ticket, False) fields = dict([f['name'], f] \ for f in tm._prepare_fields(fakereq, ticket)) data['qct'] = {'fields': fields} return template, data, content_type
def post_process_request(self, req, template, data, content_type): """Append necessary ticket data """ try: tm = self._get_ticket_module() except TracError: # no ticket module so no create ticket button return template, data, content_type if (template, data, content_type) != (None,) * 3: # TODO: Check ! if data is None: data = {} req = dummy_request(self.env) ticket = Ticket(self.env) tm._populate(req, ticket, False) all_fields = dict([f['name'], f] for f in tm._prepare_fields(req, ticket) if f['type'] == 'select') product_field = all_fields['product'] if product_field: if self.env.product: product_field['value'] = self.env.product.prefix else: # Global scope, now check default_product_prefix is valid default_prefix = self.config.get('multiproduct', 'default_product_prefix') try: ProductEnvironment.lookup_env(self.env, default_prefix) except LookupError: product_field['value'] = product_field['options'][0] else: product_field['value'] = default_prefix data['qct'] = { 'fields': [all_fields[k] for k in self.qct_fields if k in all_fields], 'hidden_fields': [all_fields[k] for k in all_fields.keys() if k not in self.qct_fields] } return template, data, content_type
def post_process_request(self, req, template, data, content_type): """Append necessary ticket data """ try: tm = self._get_ticket_module() except TracError: # no ticket module so no create ticket button return template, data, content_type if (template, data, content_type) != (None,) * 3: # TODO: Check ! if data is None: data = {} fakereq = dummy_request(self.env) ticket = Ticket(self.env) tm._populate(fakereq, ticket, False) all_fields = dict([f['name'], f] \ for f in tm._prepare_fields(fakereq, ticket) \ if f['type'] == 'select') data['qct'] = {'fields': [all_fields[k] for k in self.qct_fields if k in all_fields]} return template, data, content_type
def render_widget(self, name, context, options): """Execute stored report and render data using a grid """ data = None req = context.req try: params = ('id', 'page', 'user') rptid, page, user = self.bind_params(name, options, *params) user = user or req.authname fakereq = dummy_request(self.env, req.authname) fakereq.args = {'page' : page, 'user' : user} del fakereq.redirect # raise RequestDone as usual rptmdl = self.env[ReportModule] if rptmdl is None : raise TracError('Report module not available (disabled?)') if trac_version < trac_tags[0]: args = fakereq, self.env.get_db_cnx(), rptid else: args = fakereq, rptid data = rptmdl._render_view(*args)[1] except ResourceNotFound, exc: raise InvalidIdentifier(unicode(exc))
def render_widget(self, name, context, options): """Execute stored report and render data using a grid """ data = None req = context.req try: params = ('id', 'page', 'user') rptid, page, user = self.bind_params(name, options, *params) user = user or req.authname fakereq = dummy_request(self.env, req.authname) fakereq.args = {'page': page, 'user': user} del fakereq.redirect # raise RequestDone as usual rptmdl = self.env[ReportModule] if rptmdl is None: raise TracError('Report module not available (disabled?)') if trac_version < trac_tags[0]: args = fakereq, self.env.get_db_cnx(), rptid else: args = fakereq, rptid data = rptmdl._render_view(*args)[1] except ResourceNotFound, exc: raise InvalidIdentifier(unicode(exc))
def render_widget(self, name, context, options): """Gather timeline events and render data in compact view """ data = None req = context.req try: timemdl = self.env[TimelineModule] admin_page = tag.a(_("administration page."), title=_("Plugin Administration Page"), href=req.href.admin('general/plugin')) if timemdl is None: return 'widget_alert.html', { 'title': _("Activity"), 'data': { 'msglabel': _("Warning"), 'msgbody': tag_("The TimelineWidget is disabled because the " "Timeline component is not available. " "Is the component disabled? " "You can enable from the %(page)s", page=admin_page), 'dismiss': False, } }, context params = ('from', 'daysback', 'doneby', 'precision', 'filters', 'max', 'realm', 'id') start, days, user, precision, filters, count, realm, rid = \ self.bind_params(name, options, *params) if context.resource.realm == 'ticket': if days is None: # calculate a long enough time daysback ticket = Ticket(self.env, context.resource.id) ticket_age = datetime.now(utc) - ticket.time_created days = ticket_age.days + 1 if count is None: # ignore short count for ticket feeds count = 0 if count is None: count = self.default_count fakereq = dummy_request(self.env, req.authname) fakereq.args = { 'author': user or '', 'daysback': days or '', 'max': count, 'precision': precision, 'user': user } if filters: fakereq.args.update(dict((k, True) for k in filters)) if start is not None: fakereq.args['from'] = start.strftime('%x %X') wcontext = context.child() if (realm, rid) != (None, None): # Override rendering context resource = Resource(realm, rid) if resource_exists(self.env, resource) or \ realm == rid == '': wcontext = context.child(resource) wcontext.req = req else: self.log.warning("TimelineWidget: Resource %s not found", resource) # FIXME: Filter also if existence check is not conclusive ? if resource_exists(self.env, wcontext.resource): module = FilteredTimeline(self.env, wcontext) self.log.debug('Filtering timeline events for %s', wcontext.resource) else: module = timemdl data = module.process_request(fakereq)[1] except TracError, exc: if data is not None: exc.title = data.get('title', _('Activity')) raise
def render_widget(self, name, context, options): """Gather timeline events and render data in compact view """ data = None req = context.req try: timemdl = self.env[TimelineModule] admin_page = tag.a(_("administration page."), title=_("Plugin Administration Page"), href=req.href.admin('general/plugin')) if timemdl is None: return 'widget_alert.html', { 'title': _("Activity"), 'data': { 'msglabel': _("Warning"), 'msgbody': tag_( "The TimelineWidget is disabled because the " "Timeline component is not available. " "Is the component disabled? " "You can enable from the %(page)s", page=admin_page), 'dismiss': False, } }, context params = ('from', 'daysback', 'doneby', 'precision', 'filters', 'max', 'realm', 'id') start, days, user, precision, filters, count, realm, rid = \ self.bind_params(name, options, *params) if context.resource.realm == 'ticket': if days is None: # calculate a long enough time daysback ticket = Ticket(self.env, context.resource.id) ticket_age = datetime.now(utc) - ticket.time_created days = ticket_age.days + 1 if count is None: # ignore short count for ticket feeds count = 0 if count is None: count = self.default_count fakereq = dummy_request(self.env, req.authname) fakereq.args = { 'author': user or '', 'daysback': days or '', 'max': count, 'precision': precision, 'user': user } if filters: fakereq.args.update(dict((k, True) for k in filters)) if start is not None: fakereq.args['from'] = start.strftime('%x %X') wcontext = context.child() if (realm, rid) != (None, None): # Override rendering context resource = Resource(realm, rid) if resource_exists(self.env, resource) or \ realm == rid == '': wcontext = context.child(resource) wcontext.req = req else: self.log.warning("TimelineWidget: Resource %s not found", resource) # FIXME: Filter also if existence check is not conclusive ? if resource_exists(self.env, wcontext.resource): module = FilteredTimeline(self.env, wcontext) self.log.debug('Filtering timeline events for %s', wcontext.resource) else: module = timemdl data = module.process_request(fakereq)[1] except TracError, exc: if data is not None: exc.title = data.get('title', _('Activity')) raise