Ejemplo n.º 1
0
 def _Add( self ):
     
     with ClientGUITopLevelWindowsPanels.DialogEdit( self, 'edit ' + self._key_name ) as dlg:
         
         string_match = ClientParsing.StringMatch()
         
         panel = ClientGUIStringPanels.EditStringMatchPanel( dlg, string_match )
         
         dlg.SetPanel( panel )
         
         if dlg.exec() == QW.QDialog.Accepted:
             
             key_string_match = panel.GetValue()
             
         else:
             
             return
             
         
     
     with ClientGUITopLevelWindowsPanels.DialogEdit( self, 'edit match' ) as dlg:
         
         string_match = ClientParsing.StringMatch()
         
         panel = ClientGUIStringPanels.EditStringMatchPanel( dlg, string_match )
         
         dlg.SetPanel( panel )
         
         if dlg.exec() == QW.QDialog.Accepted:
             
             value_string_match = panel.GetValue()
             
             data = ( key_string_match, value_string_match )
             
             self._listctrl.AddDatas( ( data, ) )
Ejemplo n.º 2
0
 def _Add( self ):
     
     with ClientGUIDialogs.DialogTextEntry( self, 'enter the ' + self._key_name, allow_blank = False ) as dlg:
         
         if dlg.exec() == QW.QDialog.Accepted:
             
             key = dlg.GetValue()
             
             if key in self._GetExistingKeys():
                 
                 QW.QMessageBox.warning( self, 'Warning', 'That {} already exists!'.format( self._key_name ) )
                 
                 return
                 
             
             with ClientGUITopLevelWindowsPanels.DialogEdit( self, 'edit match' ) as dlg:
                 
                 string_match = ClientParsing.StringMatch()
                 
                 panel = ClientGUIStringPanels.EditStringMatchPanel( dlg, string_match )
                 
                 dlg.SetPanel( panel )
                 
                 if dlg.exec() == QW.QDialog.Accepted:
                     
                     string_match = panel.GetValue()
                     
                     data = ( key, string_match )
                     
                     self._listctrl.AddDatas( ( data, ) )
Ejemplo n.º 3
0
    def test_hex_fail(self):

        processor = ClientParsing.StringProcessor()

        conversions = [(ClientParsing.STRING_CONVERSION_DECODE, 'hex')]

        string_converter = ClientParsing.StringConverter(
            conversions=conversions)

        #

        processing_steps = []

        processing_steps.append(string_converter)

        processing_steps.append(
            ClientParsing.StringMatch(
                match_type=ClientParsing.STRING_MATCH_FLEXIBLE,
                match_value=ClientParsing.NUMERIC))

        processor.SetProcessingSteps(processing_steps)

        self.assertEqual(processor.ProcessStrings(['0123456789abcdef']), [])

        #

        processing_steps = []

        processing_steps.append(string_converter)

        processing_steps.append(ClientParsing.StringSplitter(separator=','))

        processor.SetProcessingSteps(processing_steps)

        self.assertEqual(processor.ProcessStrings(['0123456789abcdef']), [])
Ejemplo n.º 4
0
    def test_basics(self):

        processor = ClientParsing.StringProcessor()

        self.assertEqual(processor.ProcessStrings([]), [])
        self.assertEqual(processor.ProcessStrings(['test']), ['test'])
        self.assertEqual(
            processor.ProcessStrings(['test', 'test', '', 'test2']),
            ['test', 'test', '', 'test2'])

        processing_steps = []

        processing_steps.append(
            ClientParsing.StringSplitter(separator=',', max_splits=2))

        processing_steps.append(
            ClientParsing.StringMatch(
                match_type=ClientParsing.STRING_MATCH_FLEXIBLE,
                match_value=ClientParsing.NUMERIC))

        conversions = [(ClientParsing.STRING_CONVERSION_APPEND_TEXT, 'abc')]

        processing_steps.append(
            ClientParsing.StringConverter(conversions=conversions))

        processor.SetProcessingSteps(processing_steps)

        expected_result = ['1abc', '123abc']

        self.assertEqual(processor.ProcessStrings(['1,a,2,3', 'test', '123']),
                         expected_result)
Ejemplo n.º 5
0
 def _Edit( self ):
     
     for data in self._listctrl.GetData( only_selected = True ):
         
         ( key, string_match ) = data
         
         with ClientGUIDialogs.DialogTextEntry( self, 'edit the ' + self._key_name, default = key, allow_blank = False ) as dlg:
             
             if dlg.exec() == QW.QDialog.Accepted:
                 
                 edited_key = dlg.GetValue()
                 
                 if edited_key != key and edited_key in self._GetExistingKeys():
                     
                     QW.QMessageBox.warning( self, 'Warning', 'That {} already exists!'.format( self._key_name ) )
                     
                     break
                     
                 
             else:
                 
                 break
                 
             
         
         with ClientGUITopLevelWindowsPanels.DialogEdit( self, 'edit match' ) as dlg:
             
             string_match = ClientParsing.StringMatch()
             
             panel = ClientGUIStringPanels.EditStringMatchPanel( dlg, string_match )
             
             dlg.SetPanel( panel )
             
             if dlg.exec() == QW.QDialog.Accepted:
                 
                 edited_string_match = panel.GetValue()
                 
             else:
                 
                 break
                 
             
         
         self._listctrl.DeleteDatas( ( data, ) )
         
         edited_data = ( edited_key, edited_string_match )
         
         self._listctrl.AddDatas( ( edited_data, ) )
         
     
     self._listctrl.Sort()
Ejemplo n.º 6
0
    def test_url_classes(self):

        name = 'test'
        url_type = HC.URL_TYPE_POST
        preferred_scheme = 'https'
        netloc = 'testbooru.cx'

        alphabetise_get_parameters = True
        match_subdomains = False
        keep_matched_subdomains = False
        can_produce_multiple_files = False
        should_be_associated_with_files = True

        path_components = []

        path_components.append((ClientParsing.StringMatch(
            match_type=ClientParsing.STRING_MATCH_FIXED,
            match_value='post',
            example_string='post'), None))
        path_components.append((ClientParsing.StringMatch(
            match_type=ClientParsing.STRING_MATCH_FIXED,
            match_value='page.php',
            example_string='page.php'), None))

        parameters = {}

        parameters['s'] = (ClientParsing.StringMatch(
            match_type=ClientParsing.STRING_MATCH_FIXED,
            match_value='view',
            example_string='view'), None)
        parameters['id'] = (ClientParsing.StringMatch(
            match_type=ClientParsing.STRING_MATCH_FLEXIBLE,
            match_value=ClientParsing.NUMERIC,
            example_string='123456'), None)

        send_referral_url = ClientNetworkingDomain.SEND_REFERRAL_URL_ONLY_IF_PROVIDED
        referral_url_converter = None
        gallery_index_type = None
        gallery_index_identifier = None
        gallery_index_delta = 1
        example_url = 'https://testbooru.cx/post/page.php?id=123456&s=view'

        #

        referral_url = 'https://testbooru.cx/gallery/tags=samus_aran'
        good_url = 'https://testbooru.cx/post/page.php?id=123456&s=view'
        unnormalised_good_url_1 = 'https://testbooru.cx/post/page.php?id=123456&s=view&additional_gumpf=stuff'
        unnormalised_good_url_2 = 'https://testbooru.cx/post/page.php?s=view&id=123456'
        bad_url = 'https://wew.lad/123456'

        url_class = ClientNetworkingDomain.URLClass(
            name,
            url_type=url_type,
            preferred_scheme=preferred_scheme,
            netloc=netloc,
            path_components=path_components,
            parameters=parameters,
            send_referral_url=send_referral_url,
            referral_url_converter=referral_url_converter,
            gallery_index_type=gallery_index_type,
            gallery_index_identifier=gallery_index_identifier,
            gallery_index_delta=gallery_index_delta,
            example_url=example_url)

        url_class.SetURLBooleans(match_subdomains, keep_matched_subdomains,
                                 alphabetise_get_parameters,
                                 can_produce_multiple_files,
                                 should_be_associated_with_files)

        self.assertEqual(url_class.Matches(example_url), True)
        self.assertEqual(url_class.Matches(bad_url), False)

        self.assertEqual(url_class.Normalise(unnormalised_good_url_1),
                         good_url)
        self.assertEqual(url_class.Normalise(unnormalised_good_url_2),
                         good_url)

        self.assertEqual(url_class.GetReferralURL(good_url, referral_url),
                         referral_url)
        self.assertEqual(url_class.GetReferralURL(good_url, None), None)

        #

        alphabetise_get_parameters = False

        url_class = ClientNetworkingDomain.URLClass(
            name,
            url_type=url_type,
            preferred_scheme=preferred_scheme,
            netloc=netloc,
            path_components=path_components,
            parameters=parameters,
            send_referral_url=send_referral_url,
            referral_url_converter=referral_url_converter,
            gallery_index_type=gallery_index_type,
            gallery_index_identifier=gallery_index_identifier,
            gallery_index_delta=gallery_index_delta,
            example_url=example_url)

        url_class.SetURLBooleans(match_subdomains, keep_matched_subdomains,
                                 alphabetise_get_parameters,
                                 can_produce_multiple_files,
                                 should_be_associated_with_files)

        self.assertEqual(url_class.Normalise(unnormalised_good_url_2),
                         unnormalised_good_url_2)

        alphabetise_get_parameters = True

        #

        send_referral_url = ClientNetworkingDomain.SEND_REFERRAL_URL_NEVER

        url_class = ClientNetworkingDomain.URLClass(
            name,
            url_type=url_type,
            preferred_scheme=preferred_scheme,
            netloc=netloc,
            path_components=path_components,
            parameters=parameters,
            send_referral_url=send_referral_url,
            referral_url_converter=referral_url_converter,
            gallery_index_type=gallery_index_type,
            gallery_index_identifier=gallery_index_identifier,
            gallery_index_delta=gallery_index_delta,
            example_url=example_url)

        url_class.SetURLBooleans(match_subdomains, keep_matched_subdomains,
                                 alphabetise_get_parameters,
                                 can_produce_multiple_files,
                                 should_be_associated_with_files)

        self.assertEqual(url_class.GetReferralURL(good_url, referral_url),
                         None)
        self.assertEqual(url_class.GetReferralURL(good_url, None), None)

        #

        converted_referral_url = good_url.replace('testbooru.cx',
                                                  'replace.com')

        transformations = []

        transformations.append((ClientParsing.STRING_TRANSFORMATION_REGEX_SUB,
                                ('testbooru.cx', 'replace.com')))

        referral_url_converter = ClientParsing.StringConverter(
            transformations, good_url)

        send_referral_url = ClientNetworkingDomain.SEND_REFERRAL_URL_CONVERTER_IF_NONE_PROVIDED

        url_class = ClientNetworkingDomain.URLClass(
            name,
            url_type=url_type,
            preferred_scheme=preferred_scheme,
            netloc=netloc,
            path_components=path_components,
            parameters=parameters,
            send_referral_url=send_referral_url,
            referral_url_converter=referral_url_converter,
            gallery_index_type=gallery_index_type,
            gallery_index_identifier=gallery_index_identifier,
            gallery_index_delta=gallery_index_delta,
            example_url=example_url)

        url_class.SetURLBooleans(match_subdomains, keep_matched_subdomains,
                                 alphabetise_get_parameters,
                                 can_produce_multiple_files,
                                 should_be_associated_with_files)

        self.assertEqual(url_class.GetReferralURL(good_url, referral_url),
                         referral_url)
        self.assertEqual(url_class.GetReferralURL(good_url, None),
                         converted_referral_url)

        #

        send_referral_url = ClientNetworkingDomain.SEND_REFERRAL_URL_ONLY_CONVERTER

        url_class = ClientNetworkingDomain.URLClass(
            name,
            url_type=url_type,
            preferred_scheme=preferred_scheme,
            netloc=netloc,
            path_components=path_components,
            parameters=parameters,
            send_referral_url=send_referral_url,
            referral_url_converter=referral_url_converter,
            gallery_index_type=gallery_index_type,
            gallery_index_identifier=gallery_index_identifier,
            gallery_index_delta=gallery_index_delta,
            example_url=example_url)

        url_class.SetURLBooleans(match_subdomains, keep_matched_subdomains,
                                 alphabetise_get_parameters,
                                 can_produce_multiple_files,
                                 should_be_associated_with_files)

        self.assertEqual(url_class.GetReferralURL(good_url, referral_url),
                         converted_referral_url)
        self.assertEqual(url_class.GetReferralURL(good_url, None),
                         converted_referral_url)
Ejemplo n.º 7
0
 def test_basics( self ):
     
     all_string_match = ClientParsing.StringMatch()
     
     self.assertTrue( all_string_match.Matches( '123' ) )
     self.assertTrue( all_string_match.Matches( 'abc' ) )
     self.assertTrue( all_string_match.Matches( 'abc123' ) )
     
     #
     
     min_string_match = ClientParsing.StringMatch( min_chars = 4 )
     
     self.assertFalse( min_string_match.Matches( '123' ) )
     self.assertFalse( min_string_match.Matches( 'abc' ) )
     self.assertTrue( min_string_match.Matches( 'abc123' ) )
     
     #
     
     max_string_match = ClientParsing.StringMatch( max_chars = 4 )
     
     self.assertTrue( max_string_match.Matches( '123' ) )
     self.assertTrue( max_string_match.Matches( 'abc' ) )
     self.assertFalse( max_string_match.Matches( 'abc123' ) )
     
     #
     
     min_max_string_match = ClientParsing.StringMatch( min_chars = 4, max_chars = 10 )
     
     self.assertFalse( min_max_string_match.Matches( '123' ) )
     self.assertFalse( min_max_string_match.Matches( 'abc' ) )
     self.assertTrue( min_max_string_match.Matches( 'abc123' ) )
     
     #
     
     alpha_string_match = ClientParsing.StringMatch( match_type = ClientParsing.STRING_MATCH_FLEXIBLE, match_value = ClientParsing.ALPHA )
     
     self.assertFalse( alpha_string_match.Matches( '123' ) )
     self.assertTrue( alpha_string_match.Matches( 'abc' ) )
     self.assertFalse( alpha_string_match.Matches( 'abc123' ) )
     
     #
     
     alphanum_string_match = ClientParsing.StringMatch( match_type = ClientParsing.STRING_MATCH_FLEXIBLE, match_value = ClientParsing.ALPHANUMERIC )
     
     self.assertTrue( alphanum_string_match.Matches( '123' ) )
     self.assertTrue( alphanum_string_match.Matches( 'abc' ) )
     self.assertTrue( alphanum_string_match.Matches( 'abc123' ) )
     
     #
     
     num_string_match = ClientParsing.StringMatch( match_type = ClientParsing.STRING_MATCH_FLEXIBLE, match_value = ClientParsing.NUMERIC )
     
     self.assertTrue( num_string_match.Matches( '123' ) )
     self.assertFalse( num_string_match.Matches( 'abc' ) )
     self.assertFalse( num_string_match.Matches( 'abc123' ) )
     
     #
     
     fixed_string_match = ClientParsing.StringMatch( match_type = ClientParsing.STRING_MATCH_FIXED, match_value = '123' )
     
     self.assertTrue( fixed_string_match.Matches( '123' ) )
     self.assertFalse( fixed_string_match.Matches( 'abc' ) )
     self.assertFalse( fixed_string_match.Matches( 'abc123' ) )
     
     #
     
     re_string_match = ClientParsing.StringMatch( match_type = ClientParsing.STRING_MATCH_REGEX, match_value = '\\d' )
     
     self.assertTrue( re_string_match.Matches( '123' ) )
     self.assertFalse( re_string_match.Matches( 'abc' ) )
     self.assertTrue( re_string_match.Matches( 'abc123' ) )