मेरे पास घटनाओं की एक श्रृंखला है, जो उनकी घटना की आवृत्ति द्वारा निर्धारित की जाती है, उदाहरण के लिए, साप्ताहिक (हर मंगलवार की तरह), मासिक (हर दूसरे नंबर), आदि। घटनाओं के अनुक्रम के लिए एक प्रारंभ तिथि है और एक समाप्ति तिथि निर्दिष्ट की जा सकती है या छोड़ा गया है।

उदाहरण:

event = Event(
    name='go to the office', 
    startday='13.10.2020', 
    schedule=Schedule(type='weekly', details={'day':'Tuesday'})
)

यह केवल एक उदाहरण इंटरफ़ेस है, जिसे उपकरण द्वारा आवश्यक होने पर समायोजित किया जा सकता है

कार्य ही यह है कि मुझे एक निश्चित प्रारंभ-अंत समय अंतराल के साथ एक प्रश्न बनाने की आवश्यकता है और अंतराल में सभी घटनाएं प्राप्त करें।

इसलिए, सवाल यह है कि क्या कोई पुस्तकालय है जो ऐसी समस्याओं का समाधान करता है, या मुझे पहिया को फिर से शुरू करना है?

मुझे इसे Django आधारित परियोजना में करना है, इसलिए यदि Django आधारित समाधान अधिक सुविधाजनक है।

1
Aleksey 13 अक्टूबर 2020, 13:32

1 उत्तर

सबसे बढ़िया उत्तर

मुझे python- से डेटुटिल यह बार-बार (पुनरावर्ती) ईवेंट बना सकता है और के बीच () विधि से उनसे पूछताछ कर सकता है।

# pip install python-dateutil
from functools import reduce
from operator import itemgetter
from datetime import datetime
from dateutil.rrule import (
    rrule,
    WEEKLY,
    DAILY,
    MO, TU, WE, TH, FR, SA, SU
)

events = [
    {
        'type': 'task',
        'rule': rrule(
            WEEKLY,
            dtstart=datetime(year=2020, month=10, day=13),
        ),
        'name': 'Clean room'
    },
    {
        'type': 'party',
        'rule': rrule(
            WEEKLY,
            dtstart=datetime(year=2020, month=10, day=13),
            until=datetime(year=2020, month=12, day=13),
            byweekday=(SA, SU), wkst=MO,
        ),
        'name': 'Dance',
        'participants': ['Willy', 'Sue'],
    },
    {
        'type': 'meditation',
        'rule': rrule(
            DAILY,
            interval=2,
            dtstart=datetime(year=2020, month=10, day=13),
            until=datetime(year=2020, month=12, day=13)
        ),
        'name': 'Think out',
        'location': 'outside',
    },
]


def main():
    all_events = timeline(
        events,
        startday=datetime(year=2010, month=1, day=1),
        endday=datetime(year=2020, month=11, day=1)
    )

    print('Timeline\n---')
    for event in all_events:
        print_event(event)


def timeline(events, startday, endday):
    all_events = reduce(
        lambda all_events, event:
            all_events + events_list(event, startday, endday),
        events,
        []
    )

    return sorted(all_events, key=itemgetter('date'))


def events_list(event, startday, endday):

    dates = event['rule'].between(startday, endday, inc=True)
    inner_events = [{'date': date, 'event': event} for date in dates]

    return inner_events


def print_event(event):
    print(
        f'{event["date"]}: {event["event"]["name"]} ({event["event"]["type"]})'
    )


if __name__ == "__main__":
    main()

आउटपुट:

Timeline
---
2020-10-13 00:00:00: Clean room (task)
2020-10-13 00:00:00: Think out (meditation)
2020-10-15 00:00:00: Think out (meditation)
2020-10-17 00:00:00: Dance (party)
2020-10-17 00:00:00: Think out (meditation)
2020-10-18 00:00:00: Dance (party)
2020-10-19 00:00:00: Think out (meditation)
2020-10-20 00:00:00: Clean room (task)
2020-10-21 00:00:00: Think out (meditation)
2020-10-23 00:00:00: Think out (meditation)
2020-10-24 00:00:00: Dance (party)
2020-10-25 00:00:00: Dance (party)
2020-10-25 00:00:00: Think out (meditation)
2020-10-27 00:00:00: Clean room (task)
2020-10-27 00:00:00: Think out (meditation)
2020-10-29 00:00:00: Think out (meditation)
2020-10-31 00:00:00: Dance (party)
2020-10-31 00:00:00: Think out (meditation)
2020-11-01 00:00:00: Dance (party)
1
Aleksey 16 अक्टूबर 2020, 10:47