예제 #1
0
    def rename(self, key):
        """
        Renames a channel category and updates all relevant fields.

        Args:
            key (str): The category's new name. Can include ANSI codes.

        Returns:
            key (ANSIString): The successful key set.
        """
        if '|' in key and not key.endswith('|n'):
            key += '|n'
        key = ANSIString(key)
        clean_key = str(key.clean())
        if '|' in clean_key:
            raise ValueError("Malformed ANSI in Channel CategoryName.")
        if not self.re_name.match(clean_key):
            raise ValueError(
                "Channel Category name does not meet standards. Avoid double spaces and special characters."
            )
        bridge = self.bridge
        if bridge.db_system.channel_categories.filter(
                db_iname=clean_key.lower()).exclude(db_script=self).count():
            raise ValueError("Name conflicts with another Channel Category.")
        self.key = clean_key
        bridge.db_name = clean_key
        bridge.db_iname = clean_key.lower()
        bridge.db_cname = key.raw()
        bridge.save(update_fields=['db_name', 'db_iname', 'db_cname'])
        return key
예제 #2
0
 def test_slice_insert(self):
     """
     Inserting a slice should not remove ansi markup (issue #2205)
     """
     string = ANSIString("|rTest|n")
     split_string = string[:0] + "Test" + string[4:]
     self.assertEqual(string.raw(), split_string.raw())
예제 #3
0
 def create_post(self, account, character, subject, text, date=None):
     if not date:
         date = utcnow()
     name = ANSIString(subject)
     if '|' in name:
         raise ValueError("Malformed ANSI in post subject!")
     cname = name.raw()
     next = self.next_post_id
     new_post = self.posts.create(account=account, character=character, name=name.clean(), cname=cname, order=next,
                                  body=text, date_created=date, date_modified=date)
     new_post.update_read(account)
     next += 1
     return new_post
예제 #4
0
 def create_bbs_category(cls, key, abbr, **kwargs):
     if '|' in key and not key.endswith('|n'):
         key += '|n'
     key = ANSIString(key)
     if '|' in abbr and not abbr.endswith('|n'):
         abbr += '|n'
     abbr = ANSIString(abbr)
     clean_key = str(key.clean())
     clean_abbr = str(abbr.clean())
     if '|' in clean_key or '|' in clean_abbr:
         raise ValueError("Malformed ANSI in BBSCategory Name or Prefix.")
     if not cls.re_name.match(clean_key):
         raise ValueError("BBS Categories must have simpler names than that!")
     if not cls.re_abbr.match(clean_abbr):
         raise ValueError("Prefixes must be between 0-3 alphabetical characters.")
     if BBSCategoryBridge.objects.filter(Q(db_iname=clean_key.lower()) | Q(db_iabbr=clean_abbr.lower())).count():
         raise ValueError("Name or Prefix conflicts with another BBSCategory.")
     script, errors = cls.create(clean_key, persistent=True, **kwargs)
     if script:
         script.create_bridge(key.raw(), clean_key, abbr.raw(), clean_abbr)
         script.setup_locks()
     else:
         raise ValueError(errors)
     return script
예제 #5
0
 def create_channel(cls, category, key, unique_key=None):
     key = ANSIString(key)
     clean_key = str(key.clean())
     if '|' in clean_key:
         raise ValueError("Malformed ANSI in Channel Name.")
     if not cls.re_name.match(clean_key):
         raise ValueError("Channel Names must be EXPLANATION HERE.")
     if category.channel_category_bridge.channels.filter(
             db_iname=clean_key.lower()).count():
         raise ValueError("Name conflicts with another Channel.")
     channel, errors = cls.create(clean_key)
     if channel:
         channel.create_bridge(category, key.raw(), clean_key, unique_key)
     else:
         raise ValueError(errors)
     return channel
예제 #6
0
 def create_channel_category(cls, chan_sys, key):
     if '|' in key and not key.endswith('|n'):
         key += '|n'
     key = ANSIString(key)
     clean_key = str(key.clean())
     if '|' in clean_key:
         raise ValueError("Malformed ANSI in Channel Category Name.")
     if not cls.re_name.match(clean_key):
         raise ValueError("Channel Category names must be EXPLANATION.")
     if chan_sys.channel_system_bridge.channel_categories.filter(
             db_iname=clean_key.lower()).count():
         raise ValueError("Name conflicts with another Channel Category.")
     script, errors = cls.create(clean_key, persistent=True)
     if script:
         script.create_bridge(chan_sys, key.raw(), clean_key)
     else:
         raise ValueError(errors)
     return script
예제 #7
0
 def create_bbs_board(cls, category, key, order, **kwargs):
     if '|' in key and not key.endswith('|n'):
         key += '|n'
     key = ANSIString(key)
     clean_key = str(key.clean())
     if '|' in clean_key:
         raise ValueError("Malformed ANSI in BBSCategory Name.")
     if not cls.re_name.match(clean_key):
         raise ValueError("BBS Board Names must <qualifier>")
     if BBSBoardBridge.objects.filter(db_category=category.bbs_category_bridge).filter(
             Q(db_iname=clean_key.lower()) | Q(db_order=order)).count():
         raise ValueError("Name or Order conflicts with another BBS Board in this category.")
     script, errors = cls.create(clean_key, persistent=True, **kwargs)
     if script:
         script.create_bridge(category, key.raw(), clean_key, order)
         script.setup_locks()
     else:
         raise ValueError(errors)
     return script
예제 #8
0
class TestANSIString(TestCase):
    """
    Verifies that ANSIString's string-API works as intended.
    """
    def setUp(self):
        self.example_raw = "|relectric |cboogaloo|n"
        self.example_ansi = ANSIString(self.example_raw)
        self.example_str = "electric boogaloo"
        self.example_output = "\x1b[1m\x1b[31melectric \x1b[1m\x1b[36mboogaloo\x1b[0m"

    def test_length(self):
        self.assertEqual(len(self.example_ansi), 17)

    def test_clean(self):
        self.assertEqual(self.example_ansi.clean(), self.example_str)

    def test_raw(self):
        self.assertEqual(self.example_ansi.raw(), self.example_output)

    def test_format(self):
        self.assertEqual(f"{self.example_ansi:0<20}",
                         self.example_output + "000")
예제 #9
0
 def test_slice_full(self):
     string = ANSIString("A bigger |rTest|n of things |bwith more color|n")
     split_string = string[:]
     self.assertEqual(string.raw(), split_string.raw())