2016-09-07 5 views
3

要求パラメータとしてauthenticated_useridの属性を設定しようとするとエラーが発生します。実際には、私は要求を模擬して回答を見るために使用しています。pythonのピラミッドフレームワークでrequest.authenticated_useridの値を設定するには

Traceback (most recent call last): 
    File "/web/core/pulse/wapi/tests/testWapiUtilities_integration.py", line 652, in setUp 
    setattr(self.request, 'authenticated_userid', self.data['user'].id) 
AttributeError: can't set attribute 

コードは、私がダミーのリクエストを作成していますし、私が要求する属性を追加してい

@attr(can_split=False) 
class logSuspiciousRequestAndRaiseHTTPError(IntegrationTestCase): 
    def setUp(self): 
     super(logSuspiciousRequestAndRaiseHTTPError, self).setUp() 
     from pyramid.request import Request 
     from pyramid.threadlocal import get_current_registry 
     request = Request({ 
      'SERVER_PROTOCOL': 'testprotocol', 
      'SERVER_NAME': 'test server name', 
      'SERVER_PORT': '80', 
     }) 
     request.context = TestContext() 
     request.root = request.context 
     request.subpath = ['path'] 
     request.traversed = ['traversed'] 
     request.view_name = 'test view name' 
     request.path_info = 'test info' 
     request.scheme = 'https' 
     request.host = 'test.com' 
     request.registry = get_current_registry() 
     self.request = request 
     self.data = {} 
     self.createDefaultData() 
     self.request.userAccount = self.data['user'].userAccount 

    # @unittest.skip('Pre-Demo skip. Need to mock userAccountModel') 
    @mock.patch('pulse.wapi.wapiUtilities.pyramid.threadlocal.get_current_request') 
    @mock.patch('pulse.wapi.wapiUtilities.securityLog') 
    def testHasRequest_raises400AndLogsError(
      self, securityLog, get_current_request): 
     # Arrange 
     get_current_request.return_value = self.request 

     with self.assertRaises(exception.HTTPBadRequest): 
      from pulse.wapi.wapiUtilities import logSuspiciousRequestAndRaiseHTTPError 
      logSuspiciousRequestAndRaiseHTTPError() 
      self.assertTrue(securityLog.called) 
      self.assertTrue(securityLog.return_value.info.called) 

以下の通りです。

このメソッドlogSuspiciousRequestAndRaiseHTTPError()が呼び出されると、要求はメソッドによって解析され、ユーザーアカウントを取得します。

userAccountID=authenticated_userid(self.request) 

要求は、属性にself.request.authenticated_userid

を持っていないので、これはあなたが任意の追加情報が必要な場合は私に知らせてくださいNoneを返します。

答えて

2

最後に私は解決策を得ました。テストのセキュリティポリシーの値をモックアップとして

私はself.config = testing.setUp()

self.config.testing_securitypolicy(
    userid=self.data['user'].userAccount.id, permissive=True 
) 

を追加しましたがuserAccountIdを追加しました。

@attr(can_split=False) 
class logSuspiciousRequestAndRaiseHTTPError(IntegrationTestCase): 
    def setUp(self): 
     super(logSuspiciousRequestAndRaiseHTTPError, self).setUp() 
     from pyramid.request import Request 
     from pyramid.threadlocal import get_current_registry 
     self.config = testing.setUp() 
     request = Request({ 
      'SERVER_PROTOCOL': 'testprotocol', 
      'SERVER_NAME': 'test server name', 
      'SERVER_PORT': '80', 
     }) 
     request.context = TestContext() 
     request.root = request.context 
     request.subpath = ['path'] 
     request.traversed = ['traversed'] 
     request.view_name = 'test view name' 
     request.path_info = 'test info' 
     request.scheme = 'https' 
     request.host = 'test.com' 
     request.registry = get_current_registry() 
     self.request = request 
     self.data = {} 
     self.createDefaultData() 
     self.request.userAccount = self.data['user'].userAccount 

    @mock.patch('pulse.wapi.wapiUtilities.pyramid.threadlocal.get_current_request') 
    @mock.patch('pulse.wapi.wapiUtilities.securityLog') 
    def testHasRequest_raises400AndLogsError(
      self, securityLog, get_current_request): 
     # Arrange 
     get_current_request.return_value = self.request 
     self.loggedInUser = self.data['user'] 
     self.config.testing_securitypolicy(
      userid=self.data['user'].userAccount.id, permissive=True 
     ) 

     with self.assertRaises(exception.HTTPBadRequest): 
      from pulse.wapi.wapiUtilities import logSuspiciousRequestAndRaiseHTTPError 
      logSuspiciousRequestAndRaiseHTTPError() 
      self.assertTrue(securityLog.called) 
      self.assertTrue(securityLog.return_value.info.called) 
1

authenticated_useridは認証フレームワークによって設定された属性を反映しています。

Logins with authentication for basic informationを参照してください。

あなたのリクエストをどのように設定するかについては、現在のフォームのように正確な回答を与えるための詳細が含まれていません。

関連する問題