def newrelic_transaction(event): try: request = event.request published = request.get('PUBLISHED', None) trans = newrelic.agent.current_transaction() # TODO: Better name resolvement. SimpleViewClass seems to have no reference # to the browserview it simplifies. Making it hard to make a proper dotted name. # Preffered name would be: Products.MyProduct.browser.views.MyView # Now we only get the name as defined in conifure zcml, ie: "my_view" transname = published.__name__ if trans: # We only want to track the following: # 1. BrowserViews (but not the resource kind ..) # 2. PageTemplate (/skins/*/*.pt ) being used as views if (IBrowserView.providedBy(published) or IPageTemplate.providedBy(published)) and not IResource.providedBy(published): trans.name_transaction(transname, group='Zope2', priority=1) newrelic.agent.add_custom_parameter('id', published.context.id) newrelic.agent.add_custom_parameter('absolute_url', published.context.absolute_url()) logger.debug("Transaction: {0}".format(transname)) else: # For debugging purpose logger.debug("NO transaction? : {0} Browser: {1} Resource: {2} PageTemplate: {3}".format( transname, IBrowserView.providedBy(published), IResource.providedBy(published), IPageTemplate.providedBy(published))) except Exception, e: # Log it and carry on. logger.exception(e)
def newrelic_transaction(event): try: request = event.request published = request.get('PUBLISHED', None) trans = newrelic.agent.current_transaction() # TODO: Better name resolvement. SimpleViewClass seems to have no reference # to the browserview it simplifies. Making it hard to make a proper dotted name. # Preffered name would be: Products.MyProduct.browser.views.MyView # Now we only get the name as defined in conifure zcml, ie: "my_view" transname = getattr(published, '__name__', None) if not transname: transname = published.__class__.__module__ + '.' + published.__class__.__name__ if trans: # We only want to track the following: # 1. BrowserViews (but not the resource kind ..) # 2. PageTemplate (/skins/*/*.pt ) being used as views # 3. PageTemplates in ZMI if IBrowserView.providedBy(published) or IPageTemplate.providedBy( published): trans.name_transaction(transname, group='Zope2', priority=1) if hasattr(published, 'context'): # Plone newrelic.agent.add_custom_parameter( 'id', getattr(published.context, 'id', '')) newrelic.agent.add_custom_parameter( 'absolute_url', getattr(published.context, 'absolute_url', '')) elif hasattr(published, 'id') and hasattr( published, 'absolute_url'): # Zope newrelic.agent.add_custom_parameter('id', published.id) newrelic.agent.add_custom_parameter( 'absolute_url', published.absolute_url()) else: # We don't know what it is .. so no custom parameters! logger.debug( "Published has no context nor an id/absolute_url. Skipping custom parameters" ) logger.debug("Transaction: {0}".format(transname)) else: # For debugging purpose logger.debug( "NO transaction? : {0} Browser: {1} PageTemplate: {2}". format(transname, IBrowserView.providedBy(published), IPageTemplate.providedBy(published))) except Exception, e: # Log it and carry on. logger.exception(e)
def update(self): self.exception = aq_inner(self.context) self.context = context = aq_parent(self) if IBrowserView.providedBy(context): # NotFound errors can have extra aq wrapping self.context = context = aq_parent(context) log.debug("%r -> %r", self.exception, context)
def getHotNotifications(context, request): gatherer = GathererManager(context, request) storage = StorageManager(context, request) storage.initialize() _updateNotifications(context, storage, gatherer) hotNotifications = storage.getHotNotifications() #portal_path = _getPortalPath(context, request) notifications = [] for notification in hotNotifications: try: content = validateNotification(context, notification) except NotificationValueError: storage.removeNotification(notification) continue if IBrowserView.providedBy(content): url = content.context.absolute_url() + '/@@' + content.__name__ else: context_state = content.restrictedTraverse('plone_context_state') url = context_state.view_url() title = show(content, request, notification) notifications.append({ 'title': title, 'url': _redirectUrl(context, request, url, notification.where), 'seen': notification.seen }) storage.terminate() return notifications
def newrelic_transaction(event): try: request = event.request published = request.get("PUBLISHED", None) trans = newrelic.agent.current_transaction() # TODO: Better name resolvement. SimpleViewClass seems to have no reference # to the browserview it simplifies. Making it hard to make a proper dotted name. # Preffered name would be: Products.MyProduct.browser.views.MyView # Now we only get the name as defined in conifure zcml, ie: "my_view" transname = published.__name__ if trans: # We only want to track the following: # 1. BrowserViews (but not the resource kind ..) # 2. PageTemplate (/skins/*/*.pt ) being used as views # 3. PageTemplates in ZMI if (IBrowserView.providedBy(published) or IPageTemplate.providedBy(published)) and not IResource.providedBy( published ): trans.name_transaction(transname, group="Zope2", priority=1) if hasattr(published, "context"): # Plone newrelic.agent.add_custom_parameter("id", getattr(published.context, "id", "")) newrelic.agent.add_custom_parameter("absolute_url", getattr(published.context, "absolute_url", "")) elif hasattr(published, "id") and hasattr(published, "absolute_url"): # Zope newrelic.agent.add_custom_parameter("id", published.id) newrelic.agent.add_custom_parameter("absolute_url", published.absolute_url()) else: # We don't know what it is .. so no custom parameters! logger.debug("Published has no context nor an id/absolute_url. Skipping custom parameters") logger.debug("Transaction: {0}".format(transname)) else: # For debugging purpose logger.debug( "NO transaction? : {0} Browser: {1} Resource: {2} PageTemplate: {3}".format( transname, IBrowserView.providedBy(published), IResource.providedBy(published), IPageTemplate.providedBy(published), ) ) except Exception, e: # Log it and carry on. logger.exception(e)
def getContext(context): """Return a safe context. In case a IBrowserView was passed (e.g. due to a 404 page), return the portal object. """ context = aq_parent(aq_base(context)) if not context or IBrowserView.providedBy(context): return getSite() return context
def __init__(self, context, request, name, permission, template, owner=None): # noqa # Fix issue where context is a template based view class while IBrowserView.providedBy(context): context = Acquisition.aq_parent(Acquisition.aq_inner(context)) super(FragmentView, self).__init__(context, request) self.__name__ = name self._permission = permission self._template = template self._owner = owner
def __init__(self, *args, **kwargs): super(LoadFlyoutChildren, self).__init__(*args, **kwargs) self.cachekey = None # When accessing a object of a typesUseViewActionInListings type, # self.context may be a view and this view will break. # In order to have a proper context we change the context to the # parent of the view-context. if IBrowserView.providedBy(self.context): self.context = aq_parent(aq_inner(self.context))
def update(self): self.exception=aq_inner(self.context) self.context=context=aq_parent(self) if IBrowserView.providedBy(context): # NotFound errors can have extra aq wrapping self.context=context=aq_parent(context) try: log.exception("Error at %s", repr(context)) except zExceptions.Unauthorized: pass
def item_macros(self): default_view = self.default_view if default_view and IBrowserView.providedBy(default_view): # IBrowserView if getattr(default_view, 'index', None): return default_view.index.macros elif default_view: # FSPageTemplate return default_view.macros return None
def __get__(self, form, type=None): if form is None: return ObjectDataManager() cache = form.__dict__.get(self.key, None) if cache is None and IBrowserView.providedBy(form): fields = getattr(form, self.fields_name) cache = makeGenericAdaptiveDataManager(*fields) form.__dict__[self.key] = cache return cache
def __init__(self, context, request): self.context = aq_inner(context) self.request = request # in some cases the context is the view, so lets walk up # and search the real context context = self.context while IBrowserView.providedBy(context): context = aq_parent(aq_inner(context)) self.widget = context
def __get__(self, form, type=None): if form is None: return Fields() cache = form.__dict__.get(self.key, None) if cache is None and IBrowserView.providedBy(form): providers = component.subscribers( (form.context, form), self.interface) providers = sort_components(providers) cache = Fields(*(p.fields for p in providers)) form.__dict__[self.key] = cache return cache
def generic_viewlet_html_id(viewlet, prefix=''): parent = viewlet.manager.__parent__ parents = [] while (parent is not None and IBrowserView.providedBy(parent)): name = getattr(parent, '__name__', None) parents.append(str(name)) parent = parent.__parent__ name_list = ([ str(viewlet.__name__), getattr(viewlet.manager, '__name__', 'manager') ] + parents[:-1] + [prefix]) return sanitize_id('-'.join(reversed(name_list)))
def generic_viewlet_html_id(viewlet, prefix=''): parent = viewlet.manager.__parent__ parents = [] while (parent is not None and IBrowserView.providedBy(parent)): name = getattr(parent, '__name__', None) parents.append(str(name)) parent = parent.__parent__ name_list = ([str(viewlet.__name__), getattr(viewlet.manager, '__name__', 'manager')] + parents[:-1] + [prefix]) return sanitize_id('-'.join(reversed(name_list)))
def __call__(self): file_ = self.request.form['Filedata'] # in some cases the context is the view, so lets walk up # and search the real context context = self.context while IBrowserView.providedBy(context): context = aq_parent(aq_inner(context)) handler = getMultiAdapter((context, self.request), ITemporaryFileHandler) file_ = NamedFile(file_, filename=file_.filename.decode('utf-8')) draft = handler.create(file_) return draft.__name__
def newrelic_transaction(event): try: request = event.request published = request.get('PUBLISHED', None) trans = newrelic.agent.current_transaction() # TODO: Better name resolvement. SimpleViewClass seems to have no reference # to the browserview it simplifies. Making it hard to make a proper dotted name. # Preffered name would be: Products.MyProduct.browser.views.MyView # Now we only get the name as defined in conifure zcml, ie: "my_view" transname = published.__name__ if trans: # We only want to track the following: # 1. BrowserViews (but not the resource kind ..) # 2. PageTemplate (/skins/*/*.pt ) being used as views if (IBrowserView.providedBy(published) or IPageTemplate.providedBy(published) ) and not IResource.providedBy(published): trans.name_transaction(transname, group='Zope2', priority=1) newrelic.agent.add_custom_parameter('id', published.context.id) newrelic.agent.add_custom_parameter( 'absolute_url', published.context.absolute_url()) logger.debug("Transaction: {0}".format(transname)) else: # For debugging purpose logger.debug( "NO transaction? : {0} Browser: {1} Resource: {2} PageTemplate: {3}" .format(transname, IBrowserView.providedBy(published), IResource.providedBy(published), IPageTemplate.providedBy(published))) except Exception, e: # Log it and carry on. logger.exception(e)
def _append_notification(self, notification): try: content = validateNotification(self.context, notification) except NotificationValueError: return if IBrowserView.providedBy(content): url = content.context.absolute_url() + '/@@' + content.__name__ else: context_state = content.restrictedTraverse('plone_context_state') url = context_state.view_url() self.notifications.append({ 'title': show(self.context, self.request, notification), 'url': _redirectUrl(self.context, self.request, url, notification.where) })
def _append_notification(self, notification): try: content = validateNotification(self.context, notification) except NotificationValueError: return if IBrowserView.providedBy(content): url = content.context.absolute_url() + '/@@' + content.__name__ else: context_state = content.restrictedTraverse('plone_context_state') url = context_state.view_url() self.notifications.append({ 'title': show(self.context, self.request, notification), 'url': _redirectUrl( self.context, self.request, url, notification.where ) })
def __init__(self, context, *args, **kwargs): # Fix issue where context is a template based view class while IBrowserView.providedBy(context) and context is not None: context = aq_parent(aq_inner(context)) super(NavigationTile, self).__init__(context, *args, **kwargs) self.urltool = getToolByName(self.context, 'portal_url')
# Sanitize /view text = text.split("/view")[0] obj = doc.unrestrictedTraverse(text, None) if obj is None: obj = doc.unrestrictedTraverse(nav_root_path + '/' + text, None) if obj is None: err = "No object found" logger.warn("%s while trying " "doc.unrestrictedTraverse(text)" "with doc: %s text: %s", err, doc.absolute_url_path(), text) continue else: if IBrowserView.providedBy(obj): obj = obj.context elif (IPageTemplate.providedBy(obj) or IPythonScript.providedBy(obj) or isinstance(obj, FSPythonScript)): obj = obj.getParentNode() if not canRelate(doc, obj): continue uid = IUUID(obj, None) if not uid: continue if uid == myuid: continue
portal_path = site.portal_url.getPortalPath() if path.startswith(portal_path): path = path[len(portal_path):] if site is None: return if self._target is None: try: # remove heading / self._target = site.restrictedTraverse(path[1:]) except KeyError, e: logger.error('get_target error -> %s' % e) return if IBrowserView.providedBy(self._target): self._target = self._target.context return self._target class ProxyOembedProvider(OEmbedProvider, ConsumerView): """This oembed provider can be used as proxy consumer""" def __init__(self, context, request): OEmbedProvider.__init__(self, context, request) ConsumerView.__init__(self, context, request) self.is_local = False def update(self): if self.url is None: self.url = self.request.get('url', None)
def __init__(self, context, *args, **kwargs): # Fix issue where context is a template based view class while IBrowserView.providedBy(context) and context is not None: context = Acquisition.aq_parent(Acquisition.aq_inner(context)) super(BaseViewletTile, self).__init__(context, *args, **kwargs)
def __init__(self, context, request): # Fix issue where context is a template based view class while IBrowserView.providedBy(context) and context is not None: context = Acquisition.aq_parent(Acquisition.aq_inner(context)) super(ToolbarTile, self).__init__(context, request)