Esempio n. 1
0
 def format_timestamp(self, ts):
     output = 'data-sort-value="%s%s%s"' % (str(ts.year),
                                            ('0' + str(ts.month))[-2:],
                                            ('0' + str(ts.day))[-2:])
     output += ' | %s %s %s' % (digits.en_to_fa(str(
         ts.day)), self.month_names[ts.month - 1],
                                digits.en_to_fa(str(ts.year)))
     return output
 def tally(self, title, fileinfo):
     self.df = self.df.append(
         {
             'user': fileinfo.user,
             'file': title,
             'ts': self.short_date(fileinfo.timestamp),
             'width': digits.en_to_fa(str(fileinfo.width)),
             'height': digits.en_to_fa(str(fileinfo.height))
         },
         ignore_index=True)
    def isoformat(self):
        iso = "%04d-%02d-%02d" % (self._year, self._month, self._day)

        if self._locale == "fa":
            iso = digits.en_to_fa(iso)

        return iso
Esempio n. 4
0
    def isoformat(self):
        iso = "%04d-%02d-%02d" % (self._year, self._month, self._day)

        if self._locale == "fa":
            iso = digits.en_to_fa(iso)

        return iso
Esempio n. 5
0
    def test_ar_to_fa(self):
        self.assertEqual(digits.ar_to_fa("٠٩٨٧٦٥٤٣٢١"), "۰۹۸۷۶۵۴۳۲۱")
        self.assertEqual(digits.ar_to_fa(u"٠٩٨٧٦٥٤٣٢١"), u"۰۹۸۷۶۵۴۳۲۱")

        orig = "0987٦٥٤٣۲۱"
        converted = digits.en_to_fa(orig)
        converted = digits.ar_to_fa(converted)

        self.assertEqual(converted, "۰۹۸۷۶۵۴۳۲۱")
Esempio n. 6
0
def get_items(query_id, last_timestamp):
    items = mysql_helper.get_items(query_id, last_timestamp)
    for item in items:
        for field in list(item.keys()):
            if field not in item:
                continue
            value = item[field]
            if field in ['rooms', 'floor', 'size', 'year', 'phone']:
                value = digits.en_to_fa(str(value))
                item[field] = value
            elif field in ['images']:
                item[field] = [
                    'https://s101.divarcdn.com/static/pictures/' + img
                    for img in value.split(',')
                ]
            elif field in ['price', 'rent', 'deposite']:
                value = f"{value:,}"
                value = digits.en_to_fa(str(value))
                item[field] = value

            elif field in ['created_time']:
                published_time = item['published_date']
                time_now = datetime.now()
                diff_hours = (time_now - published_time).total_seconds() / 3600
                if diff_hours > 2:
                    if time_now.day == published_time.day:
                        item['published_date'] = ' ساعت قبل{}'.format(
                            digits.en_to_fa(diff_hours))
                    if item['urgent'] == 'بله':
                        item['published_date'] = "فوری " + item[
                            'published_date']
                else:
                    item['published_date'] = 'دیشب'

                del item['created_time']
                del item['published_date']
    if len(items) > 0:
        output = {'items': items, 'last_timestamp': items[-1]['created_time']}
    else:
        output = {'items': [], 'last_timestamp': 0}
    return jsonify(output)
Esempio n. 7
0
def digit(values, arg):
    values = str(values)
    if arg == "" or arg == "en_to_fa":
        return digits.en_to_fa(values)
    elif arg == "ar_to_fa":
        return digits.ar_to_fa(values)
    elif arg == "fa_to_en":
        return digits.fa_to_en(values)
    elif arg == "fa_to_ar":
        return digits.fa_to_ar(values)
    else:
        return values
Esempio n. 8
0
    def test_en_to_fa(self):
        self.assertEqual(digits.en_to_fa("0987654321"), "۰۹۸۷۶۵۴۳۲۱")
        self.assertEqual(digits.en_to_fa(u"0987654321"), u"۰۹۸۷۶۵۴۳۲۱")
        self.assertEqual(digits.en_to_fa("۰۹۸۷۶۵۴۳۲۱"), "۰۹۸۷۶۵۴۳۲۱")
        self.assertEqual(digits.en_to_fa("+0987654321 abcd"),
                         "+۰۹۸۷۶۵۴۳۲۱ abcd")

        with pytest.raises(TypeError):
            digits.en_to_fa(12345)
Esempio n. 9
0
def order_list():
    database = current_app.config['DATABASE_NAME']
    client = MongoClient('localhost', 27017)
    db = client[database]

    res = list(db.basket.find())
    for i in res:
        i["_id"] = str(i["_id"])
        i["time_record"] = digits.en_to_fa(
            JalaliDate((JalaliDateTime.to_jalali(i["time_record"]))).strftime("%Y/%m/%d"))
        # i["total_costs"] = digits.en_to_fa(str(i["total_costs"]))
        i["total_costs"] = f"{i['total_costs']:,}"

    res = list(db.basket.find())
    for i in res:
        i["_id"] = str(i["_id"])
        i["time_record"] = digits.en_to_fa(
            JalaliDate((JalaliDateTime.to_jalali(i["time_record"]))).strftime("%Y/%m/%d"))
        # i["total_costs"] = digits.en_to_fa(str(i["total_costs"]))
        i["total_costs"] = f"{i['total_costs']:,}"

        i["time_give"] = digits.en_to_fa(
            JalaliDate((JalaliDateTime.to_jalali(i["time_give"]))).strftime("%Y/%m/%d"))
    return jsonify(list(res))
Esempio n. 10
0
    def ctime(self):
        month_names = MONTH_NAMES_EN if self.locale == "en" \
            else MONTH_NAMES_FA
        day_names = WEEKDAY_NAMES_EN if self.locale == "en" \
            else WEEKDAY_NAMES_FA

        c = "%s %02d %s %d %02d:%02d:%02d" % (
            day_names[self.weekday()], self.day, month_names[self.month],
            self.year, self.hour, self.minute, self.second
        )

        if self.locale == "fa":
            c = digits.en_to_fa(c)

        return c
    def strftime(self, fmt, locale=None):
        if locale is None or locale not in ["fa", "en"]:
            locale = self._locale

        month_names = MONTH_NAMES_EN if locale == "en" else MONTH_NAMES_FA
        month_names_abbr = MONTH_NAMES_ABBR_EN if locale == "en" else MONTH_NAMES_ABBR_FA
        day_names = WEEKDAY_NAMES_EN if locale == "en" else WEEKDAY_NAMES_FA
        day_names_abbr = WEEKDAY_NAMES_ABBR_EN if locale == "en" else WEEKDAY_NAMES_ABBR_FA
        am = "AM" if locale == "en" else "ق.ظ"

        format_time = {
            "%a": day_names_abbr[self.weekday()],
            "%A": day_names[self.weekday()],
            "%w": str(self.weekday()),
            "%d": "%02d" % self._day,
            "%b": month_names_abbr[self._month],
            "%B": month_names[self._month],
            "%m": "%02d" % self._month,
            "%y": "%02d" % (self._year % 100),
            "%Y": "%04d" % self._year,
            "%H": "00",
            "%I": "00",
            "%p": am,
            "%M": "00",
            "%S": "00",
            "%f": "000000",
            "%z": "",
            "%Z": "",
            "%j": "%03d" % (self.days_before_month(self._month) + self._day),
            "%U": "%02d" % self.week_of_year(),
            "%W": "%02d" % self.week_of_year(),
            "%X": "00:00:00",
            "%%": "%",
        }

        if "%c" in fmt:
            fmt = utils.replace(fmt, {"%c": self.strftime("%A %d %B %Y")})

        if "%x" in fmt:
            fmt = utils.replace(fmt, {"%x": self.strftime("%y/%m/%d")})

        result = utils.replace(fmt, format_time)

        if locale == "fa":
            result = digits.en_to_fa(result)

        return result
    def ctime(self):
        month_names = MONTH_NAMES_EN if self.locale == "en" else MONTH_NAMES_FA
        day_names = WEEKDAY_NAMES_EN if self.locale == "en" else WEEKDAY_NAMES_FA

        c = "%s %02d %s %d %02d:%02d:%02d" % (
            day_names[self.weekday()],
            self.day,
            month_names[self.month],
            self.year,
            self.hour,
            self.minute,
            self.second,
        )

        if self.locale == "fa":
            c = digits.en_to_fa(c)

        return c
Esempio n. 13
0
    def process_list(self):
        page = pywikibot.Page(self.site, self.FAC)
        pattern = r'(?!\n)\{\{[^}]+\}\}'
        transcludes = re.findall(pattern, page.text)
        if transcludes is not None:
            output = '{| class="wikitable sortable"\n'
            rowid = 1
            for h in self.headers:
                output += '! %s\n' % h
            for t in transcludes:
                pattern = r'(\{\{(' + self.FAC + r')?/|\}\})'
                FACpage = re.sub(pattern, '', t)
                if FACpage == 'سرصفحه':
                    continue
                output += '|-\n| %s\n' % digits.en_to_fa(str(rowid))
                output += self.process_page(FACpage)
                rowid += 1
            output += '|}'

        page = pywikibot.Page(self.site, self.FAC + '/جدول')
        page.text = output
        page.save(summary=self.summary)
Esempio n. 14
0
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# (C) w:fa:User:Reza1615, 2020
# (C) w:fa:User:Huji, 2020
# Distributed under the terms of the CC-BY-SA 3.0

import pywikibot
from persiantools import digits
from datetime import datetime

month_names = [
    "ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت",
    "سپتامبر", "اکتبر", "نوامبر", "دسامبر"
]
summary = "ربات:ساخت رده حذف زمان‌دار"
content = "{{جا:الگو:شروع حذف زمان‌دار}}"

now = datetime.now()
year = digits.en_to_fa(str(now.year))
month = month_names[now.month - 1]
day = digits.en_to_fa(str(now.day))
title = 'رده:صفحه‌های حذف زمان‌دار در %s %s %s' % (day, month, year)

p = pywikibot.Page(pywikibot.getSite("fa"), title)

if not p.exists():
    p.put(content, summary)
Esempio n. 15
0
    def strftime(self, fmt, locale=None):
        if locale is None or locale not in ["fa", "en"]:
            locale = self._locale

        month_names = MONTH_NAMES_EN if locale == "en" else MONTH_NAMES_FA
        month_names_abbr = MONTH_NAMES_ABBR_EN if locale == "en" \
            else MONTH_NAMES_ABBR_FA
        day_names = WEEKDAY_NAMES_EN if locale == "en" \
            else WEEKDAY_NAMES_FA
        day_names_abbr = WEEKDAY_NAMES_ABBR_EN if locale == "en" \
            else WEEKDAY_NAMES_ABBR_FA
        am = "AM" if locale == "en" else "ق.ظ"

        format_time = {
            "%a": day_names_abbr[self.weekday()],
            "%A": day_names[self.weekday()],

            "%w": str(self.weekday()),

            "%d": "%02d" % self._day,

            "%b": month_names_abbr[self._month],
            "%B": month_names[self._month],

            "%m": "%02d" % self._month,

            "%y": "%02d" % (self._year % 100),
            "%Y": "%04d" % self._year,

            "%H": "00",
            "%I": "00",

            "%p": am,

            "%M": "00",

            "%S": "00",

            "%f": "000000",

            "%z": "",
            "%Z": "",

            "%j": "%03d" % (self.days_before_month(self._month) + self._day),

            "%U": "%02d" % self.week_of_year(),
            "%W": "%02d" % self.week_of_year(),

            "%X": "00:00:00",

            "%%": "%",
        }

        if "%c" in fmt:
            fmt = utils.replace(fmt, {"%c": self.strftime("%A %d %B %Y")})

        if "%x" in fmt:
            fmt = utils.replace(fmt, {"%x": self.strftime("%y/%m/%d")})

        result = utils.replace(fmt, format_time)

        if locale == "fa":
            result = digits.en_to_fa(result)

        return result
Esempio n. 16
0
 def tag_date(self):
     return "%s" % (digits.en_to_fa(self.date.__str__()))
Esempio n. 17
0
    async def forward_handler(self, new_forward: NewMessage.Event):
        try:
            print(type(new_forward))
            await new_forward.reply("👌")

            forward_from = await self.client.get_entity(
                new_forward.message.forward.chat.id)
            print(forward_from)

            channel = None
            for auto_channel in self.auto_channels:
                if auto_channel.origin.id == forward_from.id:
                    channel = auto_channel.channel
                    break

            invite_link = ''
            if channel:
                try:
                    # noinspection PyTypeChecker
                    invite_link = (await
                                   self.client(ExportChatInviteRequest(channel)
                                               )).link
                except Exception as e:
                    print(e)

            if not invite_link:
                created_private_channel = await self.client(
                    CreateChannelRequest(forward_from.title + '*',
                                         '',
                                         megagroup=False))
                channel_id = created_private_channel.chats[0].id
                new_channel_access_hash = created_private_channel.chats[
                    0].access_hash
                print(new_channel_access_hash, channel_id)

                channel = await self.client.get_entity(channel_id)

                auto_channel = AutoChannel(channel, forward_from, {})
                self.auto_channels.append(auto_channel)

                db_users.update_one({'_id': self.db_id}, {
                    '$push': {
                        'autoChannels': {
                            'origin': forward_from.id,
                            'channel': channel_id,
                            'messagesMap': [],
                        }
                    }
                })

                # noinspection PyTypeChecker
                invite_link = (await
                               self.client(ExportChatInviteRequest(channel)
                                           )).link
                print(invite_link)
                await self.client.send_message(
                    self.me,
                    "**Your channel is created, but it's not ready yet:**\n%s\n\n"
                    "Go [there](%s) and see the magic process. You should be patient until reach the"
                    "most recent post __(to estimate when, see stamped date on the foot of each "
                    "incoming post)__." % (invite_link, invite_link))

                # pull history from original chat:
                reversed_messages = []
                # Avoid `FloodWaitError` (70 messages per each 5 minutes MAX!):
                async for message in self.client.iter_messages(forward_from,
                                                               limit=600):
                    if type(message) == MessageService:
                        print(message)
                        continue
                    if message.date < new_forward.message.forward.date:
                        break
                    reversed_messages.append(message)

                # send history for new channel:
                messages = reversed(reversed_messages)
                pushed_to_map = []

                try:
                    i = 0
                    for message in messages:
                        i += 1
                        j = i / 2
                        while j.is_integer():
                            print(i)
                            await asyncio.sleep(0.5)
                            j = j / 2

                        date_time_stamp = '`' + en_to_fa(  # Use timestamp-converting to avoid time-zone issues:
                            JalaliDateTime.fromtimestamp(
                                message.date.timestamp()).strftime(
                                    '%Y/%m/%d %H:%M')) + '`'

                        sent_message = await self.send_message(
                            date_time_stamp, message,
                            auto_channel.messages_map, channel, forward_from,
                            False)

                        pushed_to_map.append({
                            'origin': message.id,
                            'channel': sent_message.id
                        })

                    db_users.update_one(
                        {
                            '_id': self.db_id,
                            'autoChannels': {
                                '$elemMatch': {
                                    'channel': channel.id
                                }
                            }
                        }, {
                            '$push': {
                                'autoChannels.$.messagesMap': {
                                    '$each': pushed_to_map
                                }
                            }
                        })
                except FloodWaitError:
                    print(traceback.format_exc(), file=sys.stderr)
                    return

            # noinspection PyUnboundLocalVariable
            await self.set_event_handlers(channel, forward_from,
                                          auto_channel.messages_map)

            self.client.remove_event_handler(forward_from)

            await self.client.send_message(
                self.me, '**Your channel is ready!** 👇\n' + invite_link)
        except:
            print(traceback.format_exc(), file=sys.stderr)
            try:
                await self.client.send_message(self.me,
                                               'Unexpected error # 1894')
            except:
                print(traceback.format_exc(), file=sys.stderr)
Esempio n. 18
0
 def short_date(self, ts):
     return '%s-%s-%s' % (digits.en_to_fa(str(
         ts.year)), digits.en_to_fa(('0' + str(ts.month))[-2:]),
                          digits.en_to_fa(('0' + str(ts.day))[-2:]))
Esempio n. 19
0
def to_fa(value):
    num = int(value)
    a = f'{num:,}'
    return digits.en_to_fa(a)
Esempio n. 20
0
            continue

        starts_with_overlap = [pattern for pattern in exclude_starts_with if line.startswith(pattern)]
        if len(starts_with_overlap) > 0:
            continue

        if len(line.split(" ")) < 6:
            continue

        matching_patterns = [q for q in query_patterns if q in f" {line} "]
        if len(matching_patterns) == 0:
            continue

        line = line.replace("\n", "")

        line = digits.en_to_fa(line)

        if "؟" not in line:
            line = line + "؟"

        if line in already_exported_questions:
            print(f" * already exported: {line}")
            continue

        accepted, accepted_url = has_answer_in_accepted_websites(line)

        if not accepted:
            continue

        counter += 1