def GatherPageData(self, _mr): """Build up a dictionary of data values to use when rendering the page.""" available_access_levels = project_helpers.BuildProjectAccessOptions( None) offer_access_level = len(available_access_levels) > 1 if settings.default_access_level: access_view = project_views.ProjectAccessView( settings.default_access_level) else: access_view = None return { 'initial_name': '', 'initial_summary': '', 'initial_description': '', 'initial_project_home': '', 'initial_docs_url': '', 'initial_source_url': '', 'initial_logo_gcs_id': '', 'initial_logo_file_name': '', 'logo_view': tracker_views.LogoView(None), 'labels': [], 'max_project_name_length': framework_constants.MAX_PROJECT_NAME_LENGTH, 'offer_access_level': ezt.boolean(offer_access_level), 'initial_access': access_view, 'available_access_levels': available_access_levels, }
def testProjectWithLogo(self): bucket_name = 'testbucket' logo_gcs_id = '123' logo_file_name = 'logo.png' project_pb = project_pb2.MakeProject('testProject', logo_gcs_id=logo_gcs_id, logo_file_name=logo_file_name) self.mox.StubOutWithMock(app_identity, 'get_default_gcs_bucket_name') app_identity.get_default_gcs_bucket_name().AndReturn(bucket_name) self.mox.StubOutWithMock(gcs_helpers, 'SignUrl') gcs_helpers.SignUrl(bucket_name, logo_gcs_id + '-thumbnail').AndReturn('signed/url') gcs_helpers.SignUrl(bucket_name, logo_gcs_id).AndReturn('signed/url') self.mox.ReplayAll() view = tracker_views.LogoView(project_pb) self.mox.VerifyAll() self.assertEquals('logo.png', view.filename) self.assertEquals('image/png', view.mimetype) self.assertEquals('signed/url', view.thumbnail_url) self.assertEquals( 'signed/url&response-content-displacement=attachment%3B' '+filename%3Dlogo.png', view.viewurl)
def GatherPageData(self, mr): """Build up a dictionary of data values to use when rendering the page.""" available_access_levels = project_helpers.BuildProjectAccessOptions( mr.project) offer_access_level = len(available_access_levels) > 1 access_view = project_views.ProjectAccessView(mr.project.access) return { 'admin_tab_mode': self.ADMIN_TAB_META, 'initial_summary': mr.project.summary, 'initial_project_home': mr.project.home_page, 'initial_docs_url': mr.project.docs_url, 'initial_source_url': mr.project.source_url, 'initial_logo_gcs_id': mr.project.logo_gcs_id, 'initial_logo_file_name': mr.project.logo_file_name, 'logo_view': tracker_views.LogoView(mr.project), 'initial_description': mr.project.description, 'issue_notify': mr.project.issue_notify_address, 'process_inbound_email': ezt.boolean( mr.project.process_inbound_email), 'email_from_addr': emailfmt.FormatFromAddr(mr.project), 'only_owners_remove_restrictions': ezt.boolean( mr.project.only_owners_remove_restrictions), 'only_owners_see_contributors': ezt.boolean( mr.project.only_owners_see_contributors), 'offer_access_level': ezt.boolean(offer_access_level), 'initial_access': access_view, 'available_access_levels': available_access_levels, }
def GetPresentationConfig(self, mc, request): """Return the UI centric pieces of the project config.""" project = self._GetProject(mc, request) with work_env.WorkEnv(mc, self.services) as we: config = we.GetProjectConfig(project.project_id) project_thumbnail_url = tracker_views.LogoView(project).thumbnail_url project_summary = project.summary custom_issue_entry_url = config.custom_issue_entry_url default_query = None saved_queries = None # Only show default query or project saved queries for project # members, in case they contain sensitive information. if framework_bizobj.UserIsInProject(project, mc.auth.effective_ids): default_query = config.member_default_query saved_queries = self.services.features.GetCannedQueriesByProjectID( mc.cnxn, project.project_id) return project_objects_pb2.PresentationConfig( project_thumbnail_url=project_thumbnail_url, project_summary=project_summary, custom_issue_entry_url=custom_issue_entry_url, default_query=default_query, saved_queries=converters.IngestSavedQueries( mc.cnxn, self.services.project, saved_queries))
def testProjectWithNoLogo(self): project_pb = project_pb2.MakeProject('testProject') view = tracker_views.LogoView(project_pb) self.assertEquals('', view.thumbnail_url) self.assertEquals('', view.viewurl)
def GatherBaseData(self, mr, nonce): """Return a dict of info used on almost all pages.""" project = mr.project project_summary = '' project_alert = None project_read_only = False project_home_page = '' project_thumbnail_url = '' if project: project_summary = project.summary project_alert = _CalcProjectAlert(project) project_read_only = project.read_only_reason project_home_page = project.home_page project_thumbnail_url = tracker_views.LogoView( project).thumbnail_url with work_env.WorkEnv(mr, self.services) as we: is_project_starred = False project_view = None if mr.project: if permissions.UserCanViewProject(mr.auth.user_pb, mr.auth.effective_ids, mr.project): is_project_starred = we.IsProjectStarred(mr.project_id) # TODO(jrobbins): should this be a ProjectView? project_view = template_helpers.PBProxy(mr.project) grid_x_attr = None grid_y_attr = None hotlist_view = None if mr.hotlist: users_by_id = framework_views.MakeAllUserViews( mr.cnxn, self.services.user, features_bizobj.UsersInvolvedInHotlists([mr.hotlist])) hotlist_view = hotlist_views.HotlistView( mr.hotlist, mr.perms, mr.auth, mr.viewed_user_auth.user_id, users_by_id, self.services.hotlist_star.IsItemStarredBy( mr.cnxn, mr.hotlist.hotlist_id, mr.auth.user_id)) grid_x_attr = mr.x.lower() grid_y_attr = mr.y.lower() app_version = os.environ.get('CURRENT_VERSION_ID') viewed_username = None if mr.viewed_user_auth.user_view: viewed_username = mr.viewed_user_auth.user_view.username issue_entry_url = 'entry' config = None if mr.project_id and self.services.config: with mr.profiler.Phase('getting config'): config = self.services.config.GetProjectConfig( mr.cnxn, mr.project_id) grid_x_attr = (mr.x or config.default_x_attr).lower() grid_y_attr = (mr.y or config.default_y_attr).lower() issue_entry_url = _LoginOrIssueEntryURL(mr, config) viewing_self = mr.auth.user_id == mr.viewed_user_auth.user_id offer_saved_queries_subtab = (viewing_self or mr.auth.user_pb and mr.auth.user_pb.is_site_admin) login_url = _SafeCreateLoginURL(mr) logout_url = _SafeCreateLogoutURL(mr) logout_url_goto_home = users.create_logout_url('/') version_base = _VersionBaseURL(mr.request) base_data = { # EZT does not have constants for True and False, so we pass them in. 'True': ezt.boolean(True), 'False': ezt.boolean(False), 'local_mode': ezt.boolean(settings.local_mode), 'site_name': settings.site_name, 'show_search_metadata': ezt.boolean(False), 'page_template': self._PAGE_TEMPLATE, 'main_tab_mode': self._MAIN_TAB_MODE, 'project_summary': project_summary, 'project_home_page': project_home_page, 'project_thumbnail_url': project_thumbnail_url, 'hotlist_id': mr.hotlist_id, 'hotlist': hotlist_view, 'hostport': mr.request.host, 'absolute_base_url': '%s://%s' % (mr.request.scheme, mr.request.host), 'project_home_url': None, 'link_rel_canonical': None, # For specifying <link rel="canonical"> 'projectname': mr.project_name, 'project': project_view, 'project_is_restricted': ezt.boolean(_ProjectIsRestricted(mr)), 'offer_contributor_list': ezt.boolean(permissions.CanViewContributorList(mr, mr.project)), 'logged_in_user': mr.auth.user_view, 'form_token': None, # Set to a value below iff the user is logged in. 'form_token_path': None, 'token_expires_sec': None, 'xhr_token': None, # Set to a value below iff the user is logged in. 'flag_spam_token': None, 'nonce': nonce, 'perms': mr.perms, 'warnings': mr.warnings, 'errors': mr.errors, 'viewed_username': viewed_username, 'viewed_user': mr.viewed_user_auth.user_view, 'viewed_user_pb': template_helpers.PBProxy(mr.viewed_user_auth.user_pb), 'viewing_self': ezt.boolean(viewing_self), 'viewed_user_id': mr.viewed_user_auth.user_id, 'offer_saved_queries_subtab': ezt.boolean(offer_saved_queries_subtab), 'currentPageURL': mr.current_page_url, 'currentPageURLEncoded': mr.current_page_url_encoded, 'login_url': login_url, 'logout_url': logout_url, 'logout_url_goto_home': logout_url_goto_home, 'continue_issue_id': mr.continue_issue_id, 'feedback_email': settings.feedback_email, 'category_css': None, # Used to specify a category of stylesheet 'category2_css': None, # specify a 2nd category of stylesheet if needed. 'page_css': None, # Used to add a stylesheet to a specific page. 'can': mr.can, 'query': mr.query, 'colspec': None, 'sortspec': mr.sort_spec, # Options for issuelist display 'grid_x_attr': grid_x_attr, 'grid_y_attr': grid_y_attr, 'grid_cell_mode': mr.cells, 'grid_mode': None, 'list_mode': None, 'chart_mode': None, 'issue_entry_url': issue_entry_url, 'is_cross_project': ezt.boolean(False), # for project search (some also used in issue search) 'start': mr.start, 'num': mr.num, 'groupby': mr.group_by_spec, 'q_field_size': (min( framework_constants.MAX_ARTIFACT_SEARCH_FIELD_SIZE, max(framework_constants.MIN_ARTIFACT_SEARCH_FIELD_SIZE, len(mr.query) + framework_constants.AUTOSIZE_STEP))), 'mode': None, # Display mode, e.g., grid mode. 'ajah': mr.ajah, 'table_title': mr.table_title, 'alerts': alerts.AlertsView(mr), # For alert.ezt 'project_alert': project_alert, 'title': None, # First part of page title 'title_summary': None, # Appended to title on artifact detail pages # TODO(jrobbins): make sure that the templates use # project_read_only for project-mutative actions and if any # uses of read_only remain. 'project_read_only': ezt.boolean(project_read_only), 'site_read_only': ezt.boolean(settings.read_only), 'banner_time': servlet_helpers.GetBannerTime(settings.banner_time), 'read_only': ezt.boolean(settings.read_only or project_read_only), 'site_banner_message': settings.banner_message, 'robots_no_index': None, 'analytics_id': settings.analytics_id, 'is_project_starred': ezt.boolean(is_project_starred), 'version_base': version_base, 'app_version': app_version, 'gapi_client_id': settings.gapi_client_id, 'viewing_user_page': ezt.boolean(False), 'old_ui_url': None, 'is_member': ezt.boolean(False), } if mr.project: base_data['project_home_url'] = '/p/%s' % mr.project_name # Always add xhr-xsrf token because even anon users need some # pRPC methods, e.g., autocomplete, flipper, and charts. base_data['token_expires_sec'] = xsrf.TokenExpiresSec() base_data['xhr_token'] = xsrf.GenerateToken(mr.auth.user_id, xsrf.XHR_SERVLET_PATH) # Always add other anti-xsrf tokens when the user is logged in. if mr.auth.user_id: form_token_path = self._FormHandlerURL(mr.request.path) base_data['form_token'] = xsrf.GenerateToken( mr.auth.user_id, form_token_path) base_data['form_token_path'] = form_token_path return base_data