Beispiel #1
0
    def __init__(self,
                 services,
                 cnxn=None,
                 requester=None,
                 auth=None,
                 perms=None,
                 autocreate=True):
        """Construct a MonorailContext.

    Args:
      services: Connection to backends.
      cnxn: Optional connection to SQL database.
      requester: String email address of user making the request or None.
      auth: AuthData object used during testing.
      perms: PermissionSet used during testing.
      autocreate: Set to False to require that a row in the User table already
          exists for this user, otherwise raise NoSuchUserException.
    """
        self.cnxn = cnxn or sql.MonorailConnection()
        self.auth = auth or authdata.AuthData.FromEmail(
            self.cnxn, requester, services, autocreate=autocreate)
        self.perms = perms  # Usually None until LookupLoggedInUserPerms() called.
        self.profiler = profiler.Profiler()

        # TODO(jrobbins): make self.errors not be UI-centric.
        self.warnings = []
        self.errors = template_helpers.EZTError()
 def testParseRules(self):
     cnxn = 'fake SQL connection'
     post_data = {
         'predicate1': 'a, b c',
         'action_type1': 'default_status',
         'action_value1': 'Reviewed',
         'predicate2': 'a, b c',
         'action_type2': 'default_owner',
         'action_value2': 'jrobbins',
         'predicate3': 'a, b c',
         'action_type3': 'add_ccs',
         'action_value3': 'jrobbins, mike.j.parent',
         'predicate4': 'a, b c',
         'action_type4': 'add_labels',
         'action_value4': 'hot, cold',
     }
     errors = template_helpers.EZTError()
     rules = filterrules_helpers.ParseRules(cnxn, post_data,
                                            self.services.user, errors)
     self.assertEquals(rules[0].predicate, 'a, b c')
     self.assertEquals(rules[0].default_status, 'Reviewed')
     self.assertEquals(rules[1].default_owner_id, TEST_ID_MAP['jrobbins'])
     self.assertEquals(rules[2].add_cc_ids[0], TEST_ID_MAP['jrobbins'])
     self.assertEquals(rules[2].add_cc_ids[1], TEST_ID_MAP['mike.j.parent'])
     self.assertEquals(rules[3].add_labels[0], 'hot')
     self.assertEquals(rules[3].add_labels[1], 'cold')
     self.assertEquals(len(rules), 4)
     self.assertFalse(errors.AnyErrors())
 def setUp(self):
     self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
     self.services = service_manager.Services(user=fake.UserService())
     self.mr = testing_helpers.MakeMonorailRequest(project=fake.Project(),
                                                   services=self.services)
     self.mr.cnxn = fake.MonorailConnection()
     self.errors = template_helpers.EZTError()
Beispiel #4
0
    def testEZTError(self):
        errors = template_helpers.EZTError()
        self.assertFalse(errors.AnyErrors())

        errors.error_a = 'A'
        self.assertTrue(errors.AnyErrors())
        self.assertEquals('A', errors.error_a)

        errors.SetError('error_b', 'B')
        self.assertTrue(errors.AnyErrors())
        self.assertEquals('A', errors.error_a)
        self.assertEquals('B', errors.error_b)
Beispiel #5
0
  def __init__(self, request, services, perms=None):
    self.cnxn = None
    self.auth = monorailrequest.AuthData.FromEmail(
        self.cnxn, request['requester'], services)
    self.me_user_id = self.auth.user_id
    self.project_name = None
    self.project = None
    self.viewed_username = None
    self.viewed_user_auth = None
    self.config = None
    if 'userId' in request:
      self.viewed_username = request['userId']
      self.viewed_user_auth = monorailrequest.AuthData.FromEmail(
          self.cnxn, self.viewed_username, services)
    elif 'groupName' in request:
      self.viewed_username = request['groupName']
      try:
        self.viewed_user_auth = monorailrequest.AuthData.FromEmail(
          self.cnxn, self.viewed_username, services)
      except user_svc.NoSuchUserException:
        self.viewed_user_auth = None
    if 'projectId' in request:
      self.project_name = request['projectId']
      self.project = services.project.GetProjectByName(
        self.cnxn, self.project_name)
      self.config = services.config.GetProjectConfig(
          self.cnxn, self.project_id)
    self.perms = perms or permissions.GetPermissions(
        self.auth.user_pb, self.auth.effective_ids, self.project)
    self.granted_perms = set()

    self.params = {
      'can': request.get('can', 1),
      'start': request.get('startIndex', 0),
      'num': request.get('maxResults', 100),
      'q': request.get('q', ''),
      'sort': request.get('sort', ''),
      'groupby': '',
      'projects': request.get('additionalProject', []) + [self.project_name]}
    self.use_cached_searches = True
    self.errors = template_helpers.EZTError()
    self.mode = None

    self.query_project_names = self.GetParam('projects')
    self.group_by_spec = self.GetParam('groupby')
    self.sort_spec = self.GetParam('sort')
    self.query = self.GetParam('q')
    self.can = self.GetParam('can')
    self.start = self.GetParam('start')
    self.num = self.GetParam('num')
Beispiel #6
0
    def setUp(self):
        self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
        self.config.well_known_labels.append(
            tracker_pb2.LabelDef(label='OldLabel',
                                 label_docstring='Do not use any longer',
                                 deprecated=True))

        self.services = service_manager.Services(
            usergroup=fake.UserGroupService(),
            config=fake.ConfigService(),
            user=fake.UserService())
        self.mr = testing_helpers.MakeMonorailRequest(project=fake.Project(),
                                                      services=self.services)
        self.mr.cnxn = fake.MonorailConnection()
        self.errors = template_helpers.EZTError()
Beispiel #7
0
    def __init__(self, params=None):
        """Initialize the MonorailRequest object."""
        self.form_overrides = {}
        if params:
            self.form_overrides.update(params)
        self.warnings = []
        self.errors = template_helpers.EZTError()
        self.debug_enabled = False
        self.use_cached_searches = True
        self.cnxn = sql.MonorailConnection()

        self.auth = AuthData()  # Authentication info for logged-in user

        self.project_name = None
        self.project = None
        self.config = None

        self.hotlist_id = None
        self.hotlist = None
        self.hotlist_name = None

        self.viewed_username = None
        self.viewed_user_auth = AuthData()
Beispiel #8
0
    def __init__(self, request, services):
        requester = (endpoints.get_current_user() or oauth.get_current_user(
            framework_constants.OAUTH_SCOPE))
        requester_email = requester.email().lower()
        self.cnxn = sql.MonorailConnection()
        self.auth = AuthData.FromEmail(self.cnxn, requester_email, services)
        self.me_user_id = self.auth.user_id
        self.viewed_username = None
        self.viewed_user_auth = None
        self.project_name = None
        self.project = None
        self.issue = None
        self.config = None
        self.granted_perms = set()

        # query parameters
        self.params = {
            'can': 1,
            'start': 0,
            'num': 100,
            'q': '',
            'sort': '',
            'groupby': '',
            'projects': [],
            'hotlists': []
        }
        self.use_cached_searches = True
        self.warnings = []
        self.errors = template_helpers.EZTError()
        self.mode = None

        if hasattr(request, 'projectId'):
            self.project_name = request.projectId
            self.project = services.project.GetProjectByName(
                self.cnxn, self.project_name)
            self.params['projects'].append(self.project_name)
            self.config = services.config.GetProjectConfig(
                self.cnxn, self.project_id)
            if hasattr(request, 'additionalProject'):
                self.params['projects'].extend(request.additionalProject)
                self.params['projects'] = list(set(self.params['projects']))
            if hasattr(request, 'issueId'):
                self.issue = services.issue.GetIssueByLocalID(
                    self.cnxn, self.project_id, request.issueId)
                self.granted_perms = tracker_bizobj.GetGrantedPerms(
                    self.issue, self.auth.effective_ids, self.config)
        if hasattr(request, 'userId'):
            self.viewed_username = request.userId.lower()
            if self.viewed_username == 'me':
                self.viewed_username = requester_email
            self.viewed_user_auth = AuthData.FromEmail(self.cnxn,
                                                       self.viewed_username,
                                                       services)
        elif hasattr(request, 'groupName'):
            self.viewed_username = request.groupName.lower()
            try:
                self.viewed_user_auth = AuthData.FromEmail(
                    self.cnxn, self.viewed_username, services)
            except user_svc.NoSuchUserException:
                self.viewed_user_auth = None
        self.perms = permissions.GetPermissions(self.auth.user_pb,
                                                self.auth.effective_ids,
                                                self.project)

        # Build q.
        if hasattr(request, 'q') and request.q:
            self.params['q'] = request.q
        if hasattr(request, 'publishedMax') and request.publishedMax:
            self.params['q'] += ' opened<=%d' % request.publishedMax
        if hasattr(request, 'publishedMin') and request.publishedMin:
            self.params['q'] += ' opened>=%d' % request.publishedMin
        if hasattr(request, 'updatedMax') and request.updatedMax:
            self.params['q'] += ' modified<=%d' % request.updatedMax
        if hasattr(request, 'updatedMin') and request.updatedMin:
            self.params['q'] += ' modified>=%d' % request.updatedMin
        if hasattr(request, 'owner') and request.owner:
            self.params['q'] += ' owner:%s' % request.owner
        if hasattr(request, 'status') and request.status:
            self.params['q'] += ' status:%s' % request.status
        if hasattr(request, 'label') and request.label:
            self.params['q'] += ' label:%s' % request.label

        if hasattr(request, 'can') and request.can:
            if request.can == api_pb2_v1.CannedQuery.all:
                self.params['can'] = 1
            elif request.can == api_pb2_v1.CannedQuery.new:
                self.params['can'] = 6
            elif request.can == api_pb2_v1.CannedQuery.open:
                self.params['can'] = 2
            elif request.can == api_pb2_v1.CannedQuery.owned:
                self.params['can'] = 3
            elif request.can == api_pb2_v1.CannedQuery.reported:
                self.params['can'] = 4
            elif request.can == api_pb2_v1.CannedQuery.starred:
                self.params['can'] = 5
            elif request.can == api_pb2_v1.CannedQuery.to_verify:
                self.params['can'] = 7
            else:  # Endpoints should have caught this.
                raise InputException('Canned query %s is not supported.',
                                     request.can)
        if hasattr(request, 'startIndex') and request.startIndex:
            self.params['start'] = request.startIndex
        if hasattr(request, 'maxResults') and request.maxResults:
            self.params['num'] = request.maxResults
        if hasattr(request, 'sort') and request.sort:
            self.params['sort'] = request.sort

        self.query_project_names = self.GetParam('projects')
        self.group_by_spec = self.GetParam('groupby')
        self.sort_spec = self.GetParam('sort')
        self.query = self.GetParam('q')
        self.can = self.GetParam('can')
        self.start = self.GetParam('start')
        self.num = self.GetParam('num')
 def testParseRulesNone(self):
     cnxn = 'fake SQL connection'
     post_data = {}
     rules = filterrules_helpers.ParseRules(cnxn, post_data, None,
                                            template_helpers.EZTError())
     self.assertEquals(rules, [])