Exemplo n.º 1
0
 def test_date(self):
     fd = fluent_date(self.a_date)
     self.assertTrue(isinstance(fd, date))
     self.assertTrue(isinstance(fd, FluentDateType))
     self.assertEqual(fd.year, self.a_date.year)
     self.assertEqual(fd.month, self.a_date.month)
     self.assertEqual(fd.day, self.a_date.day)
Exemplo n.º 2
0
    def test_copy_attributes(self):
        f1 = fluent_date(self.a_date, dateStyle='long', hour12=False)
        self.assertEqual(f1.options.dateStyle, 'long')

        f2 = fluent_date(f1, hour12=False)

        # Check we copied other attributes:
        self.assertEqual(f2.options.dateStyle, "long")
        self.assertEqual(f2.options.hour12, False)

        # Check we can override
        f3 = fluent_date(f2, dateStyle="full")
        self.assertEqual(f3.options.dateStyle, "full")

        # and didn't mutate anything
        self.assertEqual(f1.options.dateStyle, "long")
        self.assertEqual(f2.options.dateStyle, "long")
Exemplo n.º 3
0
 def test_allow_unsupported_options(self):
     # We are just checking that these don't raise exceptions
     with warnings.catch_warnings():
         warnings.simplefilter("ignore")
         fluent_date(
             self.a_date,
             hour12=True,
             weekday="narrow",
             era="narrow",
             year="numeric",
             month="numeric",
             day="numeric",
             hour="numeric",
             minute="numeric",
             second="numeric",
             timeZoneName="short",
         )
Exemplo n.º 4
0
    def get_song_embed(self, ctx, song: MusicMaster):
        l10n = self.l10n[ctx]

        color_code = song.unit.main_color_code
        color = discord.Colour.from_rgb(*ImageColor.getcolor(
            color_code, 'RGB')) if color_code else discord.Embed.Empty

        embed = discord.Embed(title=song.name, color=color)
        embed.set_thumbnail(url=self.bot.asset_url +
                            get_asset_filename(song.jacket_path))

        embed.add_field(
            name=l10n.format_value('artist'),
            value=l10n.format_value(
                'artist-desc', {
                    'lyricist': song.lyricist,
                    'composer': song.composer,
                    'arranger': song.arranger,
                    'unit-name': song.unit.name,
                    'special-unit-name': song.special_unit_name or 'None',
                }),
            inline=False)
        embed.add_field(
            name=l10n.format_value('info'),
            value=l10n.format_value(
                'song-info-desc', {
                    'song-category':
                    song.category.name,
                    'duration':
                    self.format_duration(song.duration),
                    'bpm':
                    song.bpm,
                    'section-trend':
                    song.section_trend.name,
                    'sort-order':
                    song.default_order,
                    'levels':
                    ', '.join(c.display_level for c in song.charts.values()),
                    'chart-designers':
                    ', '.join({
                        f'{c.designer.name} ({c.designer.id})': None
                        for c in song.charts.values()
                    }.keys()),
                    'release-date':
                    fluent_date(ctx.convert_tz(song.start_datetime),
                                dateStyle='medium',
                                timeStyle='medium'),
                    'hidden':
                    song.is_hidden,
                    'fair-use':
                    song.can_fair_use,
                }),
            inline=False)

        embed.set_footer(
            text=l10n.format_value('song-id', {'song-id': f'{song.id:>07}'}))

        return embed
Exemplo n.º 5
0
    def get_card_embed(self, ctx, card: CardMaster, limit_break):
        l10n = self.l10n[ctx]

        if card.rarity_id <= 2:
            limit_break = 0

        color_code = card.character.color_code
        color = discord.Colour.from_rgb(*ImageColor.getcolor(color_code, 'RGB')) if color_code else discord.Embed.Empty

        embed = discord.Embed(title=self.format_card_name(card), color=color)

        thumb_url = ctx.bot.asset_url + get_asset_filename(card.icon_path(limit_break))
        art_url = ctx.bot.asset_url + get_asset_filename(card.art_path(limit_break))

        embed.set_thumbnail(url=thumb_url)
        embed.set_image(url=art_url)

        embed.add_field(name=l10n.format_value('info'),
                        value=l10n.format_value('info-desc', {
                            'rarity': f'{card.rarity_id}★',
                            'character': f'{card.character.full_name_english}',
                            'attribute': f'{ctx.bot.get_emoji(attribute_emoji_ids_by_attribute_id[card.attribute_id])} {card.attribute.en_name.capitalize()}',
                            'unit': f'{ctx.bot.get_emoji(unit_emoji_ids_by_unit_id[card.character.unit_id])} {card.character.unit.name}',
                            'release-date': fluent_date(ctx.convert_tz(card.start_datetime),
                                                        dateStyle='medium', timeStyle='medium'),
                            'event': f'{card.event.name if card.event else "None"}',
                            'gacha': f'{card.gacha.name if card.gacha else "None"}',
                            'availability': card.availability.name,
                        }),
                        inline=False)
        embed.add_field(name=l10n.format_value('parameters'),
                        value=l10n.format_value('parameters-desc', {
                            'total': card.max_power_with_limit_break,
                            'heart': card.max_parameters_with_limit_break[0],
                            'technique': card.max_parameters_with_limit_break[1],
                            'physical': card.max_parameters_with_limit_break[2],
                            'heart-emoji': str(ctx.bot.get_emoji(parameter_bonus_emoji_ids_by_parameter_id[1])),
                            'technique-emoji': str(ctx.bot.get_emoji(parameter_bonus_emoji_ids_by_parameter_id[2])),
                            'physical-emoji': str(ctx.bot.get_emoji(parameter_bonus_emoji_ids_by_parameter_id[3])),
                        }),
                        inline=True)
        skill: SkillMaster = card.skill
        embed.add_field(name=l10n.format_value('skill'),
                        value=l10n.format_value('skill-desc', {
                            'name': card.skill_name,
                            'duration': f'{skill.min_seconds}-{skill.max_seconds}s',
                            'score-up': f'{skill.score_up_rate}%' if not skill.perfect_score_up_rate else f'{skill.score_up_rate}% + {skill.perfect_score_up_rate}% perfect',
                            'heal': (f'{skill.min_recovery_value}-{skill.max_recovery_value}'
                                     if skill.min_recovery_value != skill.max_recovery_value
                                     else str(skill.min_recovery_value))
                        }),
                        inline=True)
        embed.set_footer(text=l10n.format_value('card-id', {'card-id': f'{card.id:0>8}'}))

        return embed
Exemplo n.º 6
0
 def test_datetime(self):
     fd = fluent_date(self.a_datetime)
     self.assertTrue(isinstance(fd, datetime))
     self.assertTrue(isinstance(fd, FluentDateType))
     self.assertEqual(fd.year, self.a_datetime.year)
     self.assertEqual(fd.month, self.a_datetime.month)
     self.assertEqual(fd.day, self.a_datetime.day)
     self.assertEqual(fd.hour, self.a_datetime.hour)
     self.assertEqual(fd.minute, self.a_datetime.minute)
     self.assertEqual(fd.second, self.a_datetime.second)
     self.assertEqual(fd.microsecond, self.a_datetime.microsecond)
     self.assertEqual(fd.tzinfo, self.a_datetime.tzinfo)
Exemplo n.º 7
0
    def test_timeZone(self):
        en_GB = Locale.parse('en_GB')
        LondonTZ = pytz.timezone('Europe/London')

        # 1st July is a date in British Summer Time

        # datetime object with tzinfo set to BST
        dt1 = datetime(2018, 7, 1, 23, 30, 0,
                       tzinfo=pytz.UTC).astimezone(LondonTZ)
        fd1 = fluent_date(dt1, dateStyle='short', timeStyle='short')
        self.assertEqual(fd1.format(en_GB), '02/07/2018, 00:30')
        fd1b = fluent_date(dt1, dateStyle='full', timeStyle='full')
        self.assertEqual(
            fd1b.format(en_GB),
            'Monday, 2 July 2018 at 00:30:00 British Summer Time')
        fd1c = fluent_date(dt1, dateStyle='short')
        self.assertEqual(fd1c.format(en_GB), '02/07/2018')
        fd1d = fluent_date(dt1, timeStyle='short')
        self.assertEqual(fd1d.format(en_GB), '00:30')

        # datetime object with no TZ, TZ passed in to fluent_date
        dt2 = datetime(2018, 7, 1, 23, 30, 0)  # Assumed UTC
        fd2 = fluent_date(dt2,
                          dateStyle='short',
                          timeStyle='short',
                          timeZone='Europe/London')
        self.assertEqual(fd2.format(en_GB), '02/07/2018, 00:30')
        fd2b = fluent_date(dt2,
                           dateStyle='full',
                           timeStyle='full',
                           timeZone='Europe/London')
        self.assertEqual(
            fd2b.format(en_GB),
            'Monday, 2 July 2018 at 00:30:00 British Summer Time')
        fd2c = fluent_date(dt2, dateStyle='short', timeZone='Europe/London')
        self.assertEqual(fd2c.format(en_GB), '02/07/2018')
        fd2d = fluent_date(dt1, timeStyle='short', timeZone='Europe/London')
        self.assertEqual(fd2d.format(en_GB), '00:30')
Exemplo n.º 8
0
 def fmt_date(date):
     return fluent_date(date, dateStyle='medium', timeStyle='medium')
Exemplo n.º 9
0
 def test_arg_overrides_fluent_date(self):
     val, errs = self.ctx.format(
         'call-with-arg',
         {'date': fluent_date(date(2018, 2, 1), dateStyle='short')})
     self.assertEqual(val, "February 1, 2018")
     self.assertEqual(len(errs), 0)
Exemplo n.º 10
0
 def test_explicit_call_date_fluent_date(self):
     val, errs = self.ctx.format(
         'explicit-call',
         {'date': fluent_date(date(2018, 2, 1), dateStyle='short')})
     self.assertEqual(val, "2/1/18")
     self.assertEqual(len(errs), 0)
Exemplo n.º 11
0
 def test_dateStyle_and_timeStyle_datetime(self):
     fd = fluent_date(self.a_datetime, timeStyle='short', dateStyle='short')
     en_US = Locale.parse('en_US')
     en_GB = Locale.parse('en_GB')
     self.assertEqual(fd.format(en_US), '2/1/18, 2:15 PM')
     self.assertEqual(fd.format(en_GB), '01/02/2018, 14:15')
Exemplo n.º 12
0
 def test_timeStyle_datetime(self):
     fd = fluent_date(self.a_datetime, timeStyle='short')
     en_US = Locale.parse('en_US')
     en_GB = Locale.parse('en_GB')
     self.assertEqual(fd.format(en_US), '2:15 PM')
     self.assertEqual(fd.format(en_GB), '14:15')
Exemplo n.º 13
0
 def test_dateStyle_datetime(self):
     fd = fluent_date(self.a_datetime, dateStyle='long')
     en_US = Locale.parse('en_US')
     en_GB = Locale.parse('en_GB')
     self.assertEqual(fd.format(en_GB), '1 February 2018')
     self.assertEqual(fd.format(en_US), 'February 1, 2018')
Exemplo n.º 14
0
 def test_format_defaults(self):
     fd = fluent_date(self.a_date)
     en_US = Locale.parse('en_US')
     en_GB = Locale.parse('en_GB')
     self.assertEqual(fd.format(en_GB), '1 Feb 2018')
     self.assertEqual(fd.format(en_US), 'Feb 1, 2018')
Exemplo n.º 15
0
 def test_explicit_call_date_fluent_date(self):
     val, errs = self.bundle.format_pattern(
         self.bundle.get_message('explicit-call').value,
         {'date': fluent_date(date(2018, 2, 1), dateStyle='short')})
     self.assertEqual(val, "2/1/18")
     self.assertEqual(len(errs), 0)
Exemplo n.º 16
0
 def test_arg_overrides_fluent_date(self):
     val, errs = self.bundle.format_pattern(
         self.bundle.get_message('call-with-arg').value,
         {'date': fluent_date(date(2018, 2, 1), dateStyle='short')})
     self.assertEqual(val, "February 1, 2018")
     self.assertEqual(len(errs), 0)
Exemplo n.º 17
0
 def test_dont_wrap_unnecessarily(self):
     f1 = fluent_date(self.a_date)
     f2 = fluent_date(f1)
     self.assertIs(f1, f2)