Exemple #1
0
 def _callbackParseGETArgs( self, request ):
     
     hydrus_args = {}
     
     for name in request.args:
         
         values = request.args[ name ]
         
         value = values[0]
         
         if name in ( 'begin', 'expires', 'lifetime', 'num', 'service_type', 'service_port', 'since', 'subindex', 'timespan' ):
             
             try: hydrus_args[ name ] = int( value )
             except: raise HydrusExceptions.ForbiddenException( 'I was expecting to parse \'' + name + '\' as an integer, but it failed.' )
             
         elif name in ( 'access_key', 'title', 'subject_account_key', 'contact_key', 'hash', 'subject_hash', 'subject_tag', 'message_key', 'share_key' ):
             
             try: hydrus_args[ name ] = value.decode( 'hex' )
             except: raise HydrusExceptions.ForbiddenException( 'I was expecting to parse \'' + name + '\' as a hex-encoded string, but it failed.' )
             
         
     
     if 'subject_account_key' in hydrus_args:
         
         hydrus_args[ 'subject_identifier' ] = HydrusData.AccountIdentifier( account_key = hydrus_args[ 'subject_account_key' ] )
         
     elif 'subject_hash' in hydrus_args:
         
         hash = hydrus_args[ 'subject_hash' ]
         
         if 'subject_tag' in hydrus_args:
             
             tag = hydrus_args[ 'subject_tag' ]
             
             content = HydrusData.Content( HC.CONTENT_TYPE_MAPPING, ( tag, hash ) )
             
         else:
             
             content = HydrusData.Content( HC.CONTENT_TYPE_FILES, [ hash ] )
             
         
         hydrus_args[ 'subject_identifier' ] = HydrusData.AccountIdentifier( content = content )
         
     
     request.hydrus_args = hydrus_args
     
     return request
    def _test_repo(self, service, host, port):

        service_key = service.GetServiceKey()

        # news

        news = 'this is the news'

        service.Request(HC.POST, 'news', {'news': news})

        written = HydrusGlobals.test_controller.GetWrite('news')

        [(args, kwargs)] = written

        (written_service_key, written_news) = args

        self.assertEqual(news, written_news)

        # num_petitions

        num_petitions = 23

        HydrusGlobals.test_controller.SetRead('num_petitions', num_petitions)

        response = service.Request(HC.GET, 'num_petitions')

        self.assertEqual(response['num_petitions'], num_petitions)

        # petition

        action = HC.CONTENT_UPDATE_PETITION
        account_identifier = HydrusData.AccountIdentifier(
            account_key=HydrusData.GenerateKey())
        reason = 'it sucks'
        contents = [
            HydrusData.Content(HC.CONTENT_TYPE_FILES,
                               [HydrusData.GenerateKey() for i in range(10)])
        ]

        petition = HydrusData.ServerToClientPetition(
            action=action,
            petitioner_account_identifier=account_identifier,
            reason=reason,
            contents=contents)

        HydrusGlobals.test_controller.SetRead('petition', petition)

        response = service.Request(HC.GET, 'petition')

        self.assertEqual(type(response), HydrusData.ServerToClientPetition)

        # update

        begin = 100
        subindex_count = 5

        update = HydrusData.ServerToClientServiceUpdatePackage()
        update.SetBeginEnd(begin, begin + HC.UPDATE_DURATION - 1)
        update.SetSubindexCount(subindex_count)

        path = ServerFiles.GetExpectedServiceUpdatePackagePath(
            service_key, begin)

        with open(path, 'wb') as f:
            f.write(update.DumpToNetworkString())

        response = service.Request(HC.GET, 'service_update_package',
                                   {'begin': begin})

        self.assertEqual(response.GetBegin(), update.GetBegin())

        try:
            os.remove(path)
        except:
            pass

        subindex = 2
        num_hashes = 12
        tag = 'series:blah'
        hash_ids_to_hashes = {i: HydrusData.GenerateKey() for i in range(12)}
        rows = [(tag, [i for i in range(num_hashes)])]

        update = HydrusData.ServerToClientContentUpdatePackage()
        update.AddContentData(HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD,
                              rows, hash_ids_to_hashes)

        path = ServerFiles.GetExpectedContentUpdatePackagePath(
            service_key, begin, subindex)

        with open(path, 'wb') as f:
            f.write(update.DumpToNetworkString())

        response = service.Request(HC.GET, 'content_update_package', {
            'begin': begin,
            'subindex': subindex
        })

        self.assertEqual(response.GetNumContentUpdates(),
                         update.GetNumContentUpdates())

        try:
            os.remove(path)
        except:
            pass

        update = HydrusData.ClientToServerContentUpdatePackage(
            {}, hash_ids_to_hashes)

        service.Request(HC.POST, 'content_update_package', {'update': update})

        written = HydrusGlobals.test_controller.GetWrite('update')

        [(args, kwargs)] = written

        (written_service_key, written_account, written_update) = args

        self.assertEqual(update.GetHashes(), written_update.GetHashes())