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
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, "۰۹۸۷۶۵۴۳۲۱")
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)
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
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)
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))
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
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)
#!/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)
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 tag_date(self): return "%s" % (digits.en_to_fa(self.date.__str__()))
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)
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:]))
def to_fa(value): num = int(value) a = f'{num:,}' return digits.en_to_fa(a)
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