Ejemplo n.º 1
0
    def get_many(cls,
                 user_ids: List[str] = None,
                 names: List[str] = None,
                 emails: List[str] = None,
                 companies: List[str] = None):
        """
        Resolve requested parameters into a list of User objects

        :param user_ids: User's unique GS Marquee User IDs
        :param names: User's names (formatted 'Last Name, First Name')
        :param emails: User's email addresses
        :param companies: User's companies
        :return: A list of User objects that corresponds to requested parameters
        """
        user_ids = user_ids if user_ids else []
        names = names if names else []
        emails = [email.lower() for email in emails] if emails else []
        companies = companies if companies else []

        if not user_ids + names + emails + companies:
            return []
        user_ids = [id_[5:] if id_.startswith('guid:') else id_ for id_ in user_ids]
        results = GsUsersApi.get_users(user_ids=user_ids,
                                       user_names=names,
                                       user_emails=emails,
                                       user_companies=companies)

        all_users = []
        for user in results:
            all_users.append(User(user_id=user.id,
                                  name=user.name,
                                  email=user.email,
                                  company=user.company))
        return all_users
Ejemplo n.º 2
0
    def get(cls, user_id: str = None, name: str = None, email: str = None):
        """
        Resolve a user ID, name, email, and/or company into a single User object

        :param user_id: User's unique GS Marquee User ID
        :param name: User's name (formatted 'Last Name, First Name')
        :param email: User's email address
        :return: A Marquee User object that corresponds to requested parameters
        """
        if all(arg is None for arg in [user_id, name, email]):
            raise MqValueError(
                'Please specify a user id, name, or email address')
        user_id = user_id[5:] if user_id and user_id.startswith(
            'guid:') else user_id
        results = GsUsersApi.get_users(user_ids=[user_id] if user_id else None,
                                       user_names=[name] if name else None,
                                       user_emails=[email] if email else None)
        if len(results) > 1:
            raise MqValueError(
                'Error: This request resolves to more than one user in Marquee'
            )
        if len(results) == 0:
            raise MqValueError('Error: No user found')
        return User(user_id=results[0].id,
                    name=results[0].name,
                    email=results[0].email,
                    company=results[0].company)
Ejemplo n.º 3
0
 def __set_error_messages(self):
     """ Errors to check for based on current user/basket state """
     if len(get(self, '__error_messages', [])) > 0:
         return
     errors = []
     user_tokens = get(GsUsersApi.get_current_user_info(), 'tokens', [])
     if 'internal' not in user_tokens:
         errors.append(ErrorMessage.NON_INTERNAL)
     if not has(self, 'id'):
         errors.append(ErrorMessage.UNINITIALIZED)
     else:
         errors.append(ErrorMessage.UNMODIFIABLE)
         tokens = set(get(self.__initial_entitlements, 'admin', []))
         if not any(t in user_tokens for t in tokens):
             errors.append(ErrorMessage.NON_ADMIN)
     self.__error_messages = set(errors)
Ejemplo n.º 4
0
 def __init__(self, identifier: str = None, gs_asset: GsAsset = None, **kwargs):
     user_tokens = get(GsUsersApi.get_current_user_info(), 'tokens', [])
     user_is_internal = 'internal' in user_tokens
     if identifier:
         gs_asset = self.__get_gs_asset(identifier)
     if gs_asset:
         if gs_asset.type.value not in BasketType.to_list():
             raise MqValueError(f'Failed to initialize. Asset {gs_asset.id} is not a basket')
         self.__id = gs_asset.id
         asset_entity: Dict = json.loads(json.dumps(gs_asset.as_dict(), cls=JSONEncoder))
         Asset.__init__(self, gs_asset.id, gs_asset.asset_class, gs_asset.name,
                        exchange=gs_asset.exchange, currency=gs_asset.currency, entity=asset_entity)
         PositionedEntity.__init__(self, gs_asset.id, EntityType.ASSET)
         user_is_admin = any(token in user_tokens for token in get(gs_asset.entitlements, 'admin', []))
         self.__populate_current_attributes_for_existing_basket(gs_asset)
         self.__set_error_messages(user_is_admin, user_is_internal, True)
         self.__populate_api_attrs = True
     else:
         self.__set_error_messages(True, user_is_internal, False)
         self.__populate_default_attributes_for_new_basket(**kwargs)
         self.__populate_api_attrs = False
Ejemplo n.º 5
0
def test_get_current_user_info(mocker):
    mock_response = {
        "internal": True,
        "systemUser": False,
        "appUser": False,
        "analyticsId": "id123",
        "city": "New York",
        "company": "Goldman Sachs Group",
        "rootOEId": "id123",
        "rootOEIndustry": {
            "name": "Multi-Business Organization"
        },
        "oeIndustry": {
            "name": "Multi-Business Organization"
        },
        "oeAlias": 17670,
        "country": "US",
        "coverage": [
            {
                "phone": "+1 855-MARQUE-0",
                "name": "Marquee Help Desk",
                "email": "*****@*****.**"
            }
        ],
        "email": "*****@*****.**",
        "kerberos": "doeja",
        "id": "id",
        "name": "Doe, Jane",
        "firstName": "Jane",
        "lastName": "Doe",
        "internalID": "doeja",
        "region": "Americas",
        "departmentCode": "Y362",
        "departmentName": "Marquee Engineering",
        "divisionName": "Global Markets Division",
        "businessUnit": "Marquee Engineering",
        "title": "Analyst",
        "login": "******",
        "tokens": [
            "active"
        ],
        "roles": [
            "MarqueeResearchExperienceEligible"
        ],
        "groups": [
            "3AV5PPWJBS4B89X76"
        ],
        "expertiseTags": []
    }

    # mock GsSession
    from gs_quant.session import OAuth2Session
    OAuth2Session.init = mock.MagicMock(return_value=None)
    GsSession.use(Environment.QA, 'client_id', 'secret')
    mocker.patch.object(
        GsSession.__class__,
        'default_value',
        return_value=GsSession.get(
            Environment.QA,
            'client_id',
            'secret'))
    mocker.patch.object(GsSession.current, '_get', return_value=mock_response)

    # run test
    response = GsUsersApi.get_current_user_info()
    GsSession.current._get.assert_called_with('/users/self')
    assert response == mock_response