예제 #1
0
def list_event_by_date(request):
    data = request.data
    if not ('month' in data or 'year' in data):
        return JsonResponse(status=400, data={'message': 'bad request'})
    
    j_month = data['month']
    j_year = data['year']

    start_date = JalaliDate(j_year, j_month, 1)
    end_date = JalaliDate(j_year, j_month, start_date.daysinmonth)

    events = [] 
    for e in Event.objects.filter(date__lte=end_date.todate(), date__gte=start_date.todate()):
        if e.user_event and not e.admin_approved:
            continue
        events.append(EventSerializer(e).data)
    return JsonResponse(status=200, data={'results': events})
예제 #2
0
def validate_date(input_date):
    try:
        input_date = arabic_to_eng_number(input_date)
        date = JalaliDate().strptime(input_date, "%Y%m%d")
        if date < JalaliDate().today():
            message = TextMessage(ReadyText.time_is_past)
            return False, message
        date = date.todate()
        return date, None
    except:
        message = TextMessage(ReadyText.wrong_format)
        return False, message
예제 #3
0
    def test_instantiate(self):

        jdate = JalaliDate(1376, 5, 23)
        self.assertFalse(jdate is None)

        self.assertEqual(JalaliDate(jdate.todate()), jdate)
        self.assertEqual(JalaliDate(jdate), jdate)

        self.assertEqual(JalaliDate(julian_day=2450674), jdate)

        self.assertRaises(ValueError, JalaliDate, MAXYEAR + 1, 5, 23)
        self.assertRaises(ValueError, JalaliDate, MAXYEAR, 13, 23)
        self.assertRaises(ValueError, JalaliDate, MAXYEAR, 12, 30)
예제 #4
0
 def test_algorithm(self):
     min = date(623, 1, 1)
     max_days = 5000
     days = 0
     while True:
         dt = min + timedelta(days=days)
         jd = JalaliDate(dt)
         # print('Processing day: %s' % jd)
         dt2 = jd.todate()
         self.assertEqual(dt, dt2)
         days += 1
         if days > max_days:
             break
예제 #5
0
 def test_algorithm(self):
     min = date(623, 1, 1)
     max_days = 5000
     days = 0
     while True:
         dt = min + timedelta(days=days)
         jd = JalaliDate(dt)
         # print('Processing day: %s' % jd)
         dt2 = jd.todate()
         self.assertEqual(dt, dt2)
         days += 1
         if days > max_days:
             break
예제 #6
0
    def test_instantiate(self):
        
        jdate = JalaliDate(1376, 5, 23)
        self.assertFalse(jdate is None)

        self.assertEqual(JalaliDate(jdate.todate()), jdate)
        self.assertEqual(JalaliDate(jdate), jdate)

        self.assertEqual(JalaliDate(julian_day=2450674), jdate)

        self.assertRaises(ValueError, JalaliDate, MAXYEAR + 1, 5, 23)
        self.assertRaises(ValueError, JalaliDate, MAXYEAR, 13, 23)
        self.assertRaises(ValueError, JalaliDate, MAXYEAR, 12, 30)
예제 #7
0
 def test_operators(self):
     invalid_object = dict(a=2)
     d1 = JalaliDate(1361, 6, 15)
     d2 = JalaliDate(1361, 6, 16)
     self.assertRaises(TypeError, d1.__add__, invalid_object)
     self.assertRaises(TypeError, d1.__sub__, invalid_object)
     self.assertRaises(TypeError, d1.__lt__, invalid_object)
     self.assertRaises(TypeError, d1.__gt__, invalid_object)
     self.assertRaises(TypeError, d1.__eq__, invalid_object)
     self.assertFalse(d1 == 0)
     self.assertTrue(d1 == d1.todate())
     self.assertTrue(d1 < d2)
     self.assertTrue(d1 <= d1.copy())
     self.assertFalse(d1 > d2)
     self.assertTrue(d1 >= d1.copy())
예제 #8
0
 def test_operators(self):
     invalid_object = dict(a=2)
     d1 = JalaliDate(1361, 6, 15)
     d2 = JalaliDate(1361, 6, 16)
     self.assertRaises(TypeError, d1.__add__, invalid_object)
     self.assertRaises(TypeError, d1.__sub__, invalid_object)
     self.assertRaises(TypeError, d1.__lt__, invalid_object)
     self.assertRaises(TypeError, d1.__gt__, invalid_object)
     self.assertRaises(TypeError, d1.__eq__, invalid_object)
     self.assertFalse(d1 == 0)
     self.assertTrue(d1 == d1.todate())
     self.assertTrue(d1 < d2)
     self.assertTrue(d1 <= d1.copy())
     self.assertFalse(d1 > d2)
     self.assertTrue(d1 >= d1.copy())
예제 #9
0
async def j2g(y: int, m: int, d: int, request: Request, iso: bool = False):
    arg_check(("y", "m", "d", "iso"), request.query_params.keys())

    if y not in range(*j_year_range):
        raise HTTPException(status_code=404)

    try:
        j = JalaliDate(year=y, month=m, day=d)
        g = j.todate()
        if iso:
            return {"g": g.isoformat()}
        return {
            "g": {
                "y": g.year,
                "m": g.month,
                "d": g.day
            },
        }
    except Exception:
        raise HTTPException(status_code=404)
예제 #10
0
def add_reminder_to_db(reminder):
    print(reminder)
    reminder_obj = Reminder(reminder.get(Attr.peer_id), reminder.get(Attr.peer_access_hash),
                            reminder.get(Attr.type), reminder.get(Attr.card_number),
                            reminder.get(Attr.money_amount),
                            reminder.get(Attr.text), reminder.get(Attr.file_id),
                            reminder.get(Attr.file_access_hash),
                            reminder.get(Attr.file_size))
    session.add(reminder_obj)

    date = reminder.get(Attr.date)
    time = reminder.get(Attr.time)
    print(type(date), date)
    print(type(time), time)
    remind_datetime = datetime.datetime.combine(date, time)
    if reminder.get(Attr.periodic_type) != ReadyText.monthly:
        time_delta = time_delta_func(reminder.get(Attr.periodic_type))
        for i in range(reminder[Attr.iterate_number] + 1):
            message = Message(reminder_obj, sending_time=(remind_datetime + time_delta * i))
            session.add(message)
    else:
        time_delta = time_delta_func(reminder.get(Attr.periodic_type))
        for i in range(reminder[Attr.iterate_number] + 1):
            s_date = remind_datetime + time_delta * i
            day = remind_datetime.day
            sending_time = None
            is_valid_date = False
            while is_valid_date is False:
                is_valid_date = True
                try:
                    sending_time = JalaliDate(s_date.year, s_date.month, day)
                except ValueError:
                    is_valid_date = False
                day -= 1
            message = Message(reminder_obj, sending_time=sending_time.todate())
            session.add(message)
    session.commit()
예제 #11
0
    def run(self):
        logger.info("run-triggered")
        if os.path.exists(f'{self.excel_location}/crawlstat'):
            with open(f'{self.excel_location}/crawlstat', 'r') as statfile:
                lines = statfile.readlines()
                year, month, day = lines[3].split("-")
                crawl_start_date = JalaliDate(year, month, day)
            logger.info(
                f"statefile: {str(crawl_start_date)}  {year}-{month}-{day}")
        else:
            year, month, day = self.START_DATE.split("-")
            crawl_start_date = JalaliDate(year, month, day)
        self.dm = DataModel()
        self.dm.restore_from_pystore()
        logger.info("restore done")
        if len(self.dm.df) == 0:
            conv_start_date = self.START_DATE
        else:
            index_list = list(set(self.dm.df.index.get_level_values("date")))
            index_list.sort()
            last_ind = index_list[-1]
            conv_start_date = f'''{last_ind.year}-{last_ind.month}-{last_ind.day} '''
        st_year, st_month, st_day = conv_start_date.split("-")
        st = JalaliDate(st_year, st_month, st_day) + timedelta(days=1)
        logger.info(f"start date: {str(st)}")
        while st <= crawl_start_date:
            excel_file = f'{self.excel_location}/{st.year}-{st.month}-{st.day}.xlsx'
            logger.debug(f'excel_file: {excel_file}')
            if os.path.isfile(excel_file):
                logger.debug(f'found: {st.year}-{st.month}-{st.day}')
                self.q_xls.put([f'{st.year}-{st.month}-{st.day}'])
            st = st + timedelta(days=1)

        logger.info("preparing done")
        for i in range(self.NUM_CONV_THREAD):
            self.conv_workers.append(
                multiprocessing.Process(
                    target=self.converter.converting_thread,
                    args=(f'Thread-{i}', self.q_xls, self.q_dfs,
                          self.q_errors)))
            self.conv_workers[i].start()
        logger.info("df conv started")
        models = [
            SignalUSD(),
            SignalPound(),
            SignalYuan(),
            SignalEuro(),
            SignalYen100(),
            SignalRub(),
            SignalDeram(),
            SignalNGas(),
            SignalBrent(),
            SignalGasOil(),
            SignalPetrol(),
            SignalWTI(),
            SignalOnsSilver(),
            SignalOnsPalladium(),
            SignalOnsPlatinum(),
            SignalOnsGold(),
            SignalElementCopper(),
            SignalElementZinc(),
            SignalElementAluminum(),
            SignalElementLead(),
            SignalEthereum(),
            SignalBitcoin(),
            SignalXRP(),
            StockMeta(),
            StockShareHolder(),
        ]
        self.data_model_updater_workers.append(
            multiprocessing.Process(target=self.data_models_updater,
                                    args=(f'Thread-singal-data', models)))
        self.data_model_updater_workers.append(
            multiprocessing.Process(target=self.data_models_updater,
                                    args=(f'Thread-client-data',
                                          [StockClientsData(use_proxy=True)])))
        self.data_model_updater_workers.append(
            multiprocessing.Process(target=self.data_models_updater,
                                    args=(f'Thread-data-model-tgju', [
                                        GeneralTGJUData(name, use_proxy=True)
                                        for name in GeneralTGJUData.DATA_TYPES
                                    ])))
        for worker in self.data_model_updater_workers:
            worker.start()
        logger.info(f'done running data model updater')
        self.crawl_thread = multiprocessing.Process(
            target=self.crawler.crawling_thread,
            args=("Thread-crawl", crawl_start_date.todate(), self.q_xls))
        time.sleep(60)
        self.crawl_thread.start()
        logger.info("df crawler started")
        all_dfs = []
        while True:
            dftmp, nametmp = self.q_dfs.get()
            logger.info(f'got a df: {nametmp}')
            year, month, day = nametmp.split("-")
            date = JalaliDate(year, month, day).todate()
            yearlist = np.full(len(dftmp), year).tolist()
            monthlist = np.full(len(dftmp), month).tolist()
            daylist = np.full(len(dftmp), day).tolist()
            datelist = np.full(len(dftmp), date).tolist()
            dftmp["year"] = yearlist
            dftmp["month"] = monthlist
            dftmp["day"] = daylist
            dftmp["date"] = datelist
            dftmp["date"] = pd.to_datetime(dftmp["date"])
            dftmp["symbol"] = dftmp.symbol.apply(str)
            dftmp["name"] = dftmp["name"].apply(str)
            dftmp = dftmp.astype({"year": int, "month": int, "day": int})
            dftmp = dftmp.set_index(['symbol', 'date'])
            all_dfs.append(dftmp)
            self.q_dfs.task_done()
            logger.debug(
                f'added df: {nametmp}---{str(date)} with len({len(dftmp)}) all:{len(self.dm.df)}',
                feature="f-strings")
            logger.debug(f'df left: {self.q_dfs.qsize()}', feature="f-strings")
            if self.q_dfs.empty() or self.q_dfs.qsize() == 0:
                try:
                    dm_new = DataModel()
                    dm_new.read_from_df(pd.concat(all_dfs).sort_index())
                    self.dm.df = self.dm.df.append(dm_new.df)
                    all_dfs = []
                    self.dm.update_df_extensions()
                    logger.info(f'storing in pystore')
                    self.dm.store_in_pystore()
                    logger.info(f'stored in pystore')
                    self.dm.save_to_csvs()
                    logger.info(f'stored in file')
                except:
                    logger.exception(f'cant save df')
예제 #12
0
 def test_to_from_date(self):
     jdate = JalaliDate(self.leap_year, 12, 23)
     jdate2 = JalaliDate.from_date(jdate.todate())
     self.assertEqual(jdate, jdate2)
예제 #13
0
from khayyam import JalaliDate

import khayyam_api._info as info
from khayyam_api.main import app

launch_date_j = JalaliDate(1399, 2, 18)
launch_date_g = launch_date_j.todate()

about_khayyam_api = {
    "name":
    info.__project_name__,
    "version":
    info.__version__,
    "description":
    info.__description__,
    "repo":
    info.__repo__,
    "live_since":
    f"{launch_date_j.isoformat()} ({launch_date_g.isoformat()})",
    "author": {
        "name": info.__author__,
        "contact": {
            "email": info.__email__,
            "linkedin": info.__linkedin__
        },
    },
    "how_to_use":
    app.docs_url,
    "routes":
    tuple(app.openapi()["paths"]),
    "license":
예제 #14
0
파일: admin.py 프로젝트: mujad/sample
def format_date(date):
    year, month, day = date.split('/')
    jdate = JalaliDate(year=year, month=month, day=day)
    return jdate.todate()
예제 #15
0
 def test_to_from_date(self):
     jdate = JalaliDate(self.leap_year, 12, 23)
     jdate2 = JalaliDate(jdate.todate())
     self.assertEqual(jdate, jdate2)