예제 #1
0
    def use_project(self, project_id):
        """Creates an instance of [ProjectClient](#projectclient),
        providing session authentication.

        Parameters:

        * `project_id` - project identifier.

        Returns:

        Instance of [ProjectClient](#projectclient) with
        session authentication.

        Example:

        ```python
        client = Client('deform.io')
        session_client = client.auth(
            'session',
            client.user.login('*****@*****.**', 'password')
        )
        session_client.use_project('some-project-id')
        ```

        """
        return ProjectClient(
            base_uri=get_base_uri(project=project_id,
                                  host=self.host,
                                  port=self.port,
                                  secure=self.secure,
                                  api_base_path=self.api_base_path),
            auth_header=self.auth_header,
            requests_session=self.requests_session,
            request_defaults=self.request_defaults,
        )
예제 #2
0
 def setUp(self):
     super(DeformBaseURITestCaseMixin, self).setUp()
     self.DEFORM_BASE_URI = get_base_uri(
         host=self.CONFIG['DEFORM']['HOST'],
         api_base_path=self.CONFIG['DEFORM']['API_BASE_PATH'],
         port=self.CONFIG['DEFORM']['PORT'],
         secure=self.CONFIG['DEFORM']['SECURE'],
     )
예제 #3
0
 def setUp(self):
     super(DeformBaseURITestCaseMixin, self).setUp()
     self.DEFORM_BASE_URI = get_base_uri(
         host=self.CONFIG['DEFORM']['HOST'],
         api_base_path=self.CONFIG['DEFORM']['API_BASE_PATH'],
         port=self.CONFIG['DEFORM']['PORT'],
         secure=self.CONFIG['DEFORM']['SECURE'],
     )
예제 #4
0
 def test_me(self):
     response = self.deform_session_auth_client.use_project('some-project')
     assert_that(response, instance_of(ProjectClient))
     assert_that(
         response.base_uri,
         equal_to(get_base_uri(
             project='some-project',
             host=self.deform_session_auth_client.host,
             port=self.deform_session_auth_client.port,
             secure=self.deform_session_auth_client.secure,
             api_base_path=self.deform_session_auth_client.api_base_path
         ))
     )
     assert_that(
         response.auth_header,
         equal_to(self.deform_session_auth_client.auth_header)
     )
예제 #5
0
    def test_me(self):
        api_base_path = self.CONFIG['DEFORM']['API_BASE_PATH']

        experiments = [
            {
                'kwargs': {
                    'host': 'deform.io',
                    'api_base_path': api_base_path
                },
                'expected': uri_join('https://deform.io/', api_base_path)
            },
            {
                'kwargs': {
                    'host': 'deform.io',
                    'project': 'mysquare',
                    'api_base_path': api_base_path
                },
                'expected': uri_join(
                    'https://mysquare.deform.io/',
                    api_base_path
                )
            },
            {
                'kwargs': {
                    'host': 'deform.io',
                    'port': 123,
                    'api_base_path': api_base_path
                },
                'expected': uri_join('https://deform.io:123/', api_base_path)
            },
            {
                'kwargs': {
                    'host': 'deform.io',
                    'secure': False,
                    'api_base_path': api_base_path
                },
                'expected': uri_join('http://deform.io/', api_base_path)
            },
        ]

        for exp in experiments:
            assert_that(
                get_base_uri(**exp['kwargs']),
                equal_to(exp['expected'])
            )
예제 #6
0
 def __init__(self,
              host,
              port=None,
              secure=True,
              requests_session=None,
              request_defaults=None,
              api_base_path='/api/'):
     self.host = host
     self.port = port
     self.secure = secure
     self.requests_session = requests_session or requests.Session()
     self.request_defaults = request_defaults
     self.api_base_path = api_base_path
     self.user = NonAuthUserResource(base_uri=get_base_uri(
         host=self.host,
         port=self.port,
         secure=self.secure,
         api_base_path=self.api_base_path),
                                     auth_header=None,
                                     requests_session=self.requests_session,
                                     request_defaults=self.request_defaults)
예제 #7
0
 def __init__(self, auth_header, host, port, secure, requests_session,
              request_defaults, api_base_path):
     self.host = host
     self.port = port
     self.secure = secure
     self.requests_session = requests_session
     self.request_defaults = request_defaults
     self.auth_header = auth_header
     self.api_base_path = api_base_path
     self.base_uri = get_base_uri(host=self.host,
                                  port=self.port,
                                  secure=self.secure,
                                  api_base_path=self.api_base_path)
     resource_kwargs = {
         'base_uri': self.base_uri,
         'auth_header': auth_header,
         'requests_session': requests_session,
         'request_defaults': request_defaults
     }
     self.user = SessionUserResource(**resource_kwargs)
     self.projects = ProjectListResource(**resource_kwargs)
     self.project = ProjectOneResource(**resource_kwargs)
예제 #8
0
    def auth(self, auth_type, auth_key, project_id=None):
        """Creates authenticated client.

        Parameters:

        * `auth_type` - Authentication type. Use `session` for auth
          by session key. Use `token` for auth by token.
        * `auth_key` - Authentication `session key` or `token`.
        * `project_id` - Project identifier. Must be provided for
          `token` authentication. Default is `None`.

        Returns:

        * Instance of [SessionAuthClient](#sessionauthclient) if
          `auth_type` is `session`.
        * Instance of [ProjectClient](#projectclient) if
          `auth_type` is `token`

        Raises:

        * ValueError: if `project_id` parameter was not provided

        Examples:

        For auth with `session` you should obtain session key by
        [Client.user.login](#clientuserlogin) providing
        your account's email and password:

        ```python
        client = Client(host='deform.io')
        session_client = client.auth(
            'session',
            client.user.login(
                email='*****@*****.**',
                password='******'
            ),
        )
        print session_client
        <pydeform.client.SessionAuthClient object at 0x10c585650>
        ```

        Authentication with `token` example:

        ```python
        client = Client(host='deform.io')
        token_client = client.auth(
          'token',
          auth_key='token-value',
          project_id='some-project',
        )
        print token_client
        <pydeform.client.ProjectClient object at 0x11c585650>
        ```

        """
        if auth_type == 'session':
            return SessionAuthClient(
                auth_header=get_session_http_auth_header(auth_key),
                host=self.host,
                port=self.port,
                secure=self.secure,
                requests_session=self.requests_session,
                request_defaults=self.request_defaults,
                api_base_path=self.api_base_path,
            )
        elif auth_type == 'token':
            if not project_id:
                msg = 'You should provide project_id for token authentication'
                raise ValueError(msg)
            return ProjectClient(
                base_uri=get_base_uri(project=project_id,
                                      host=self.host,
                                      port=self.port,
                                      secure=self.secure,
                                      api_base_path=self.api_base_path),
                auth_header=get_token_http_auth_header(auth_key),
                requests_session=self.requests_session,
                request_defaults=self.request_defaults,
            )