Package: nse-workday
nse_workdayA library to calculate holidays, workdays and some other functions based
on NSE trading holidays from 2010 - 2024.It can be installed by:pip install nse-workdayfromnse_workdayimport*get_new_holidays(mode='test')Retrieves list of latest holidays from nse and save it if fetched list
year > last available holidays year in libraryArgs::mode = 'test' / 'normal' . Default 'test' (will not save data.).get_new_holidays(mode='normal')No Dates to Exclude
Exceptional Trading Dates (Saturday/Sunday):: ['12-11-2023']
Holidays list :: ['26-01-2023', '07-03-2023', '30-03-2023', '04-04-2023', '07-04-2023', '14-04-2023', '01-05-2023', '29-06-2023', '15-08-2023', '19-09-2023', '02-10-2023', '24-10-2023', '14-11-2023', '27-11-2023', '25-12-2023']
Data already existsupdate_holiday(dates_set = 'holidays')Modify / Add / Remove a date from holidays or exceptions list (
Exception :: Trading days in Saturday/ Sunday)Args::dates_set : 'holidays' / 'exceptions' . Default 'holidays'The date should be entered in dd-mm-yyyy format.update_holiday()Select an option:
1. Modify a date 
2. Add a date 
3. Remove a date
Enter option number: 1
Enter old Date to remove (dd-mm-yyyy): 28-06-2023
Enter the new Date to add (dd-mm-yyyy): 29-06-2023
Do you want to save modified date list?  (Y/N): y
Data saved successfullyisHoliday(input_date)Check the given date is holiday or not . Return Boolean.Args::input_date : date in %d-%m-%Y/ datetime.date / datetime.datetime formatisHoliday(input_date="29-06-2023")TrueAll below functions returns datetime.datetime item / list.workday(input_date, direction)Will return the nearest workday in the given direction if the input_date
is holiday. If not, will return the sameArgs ::input_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

direction : 'next' / 'prev'workday(input_date="29-06-2023",direction='prev')datetime.datetime(2023, 6, 28, 0, 0)get_holidays_list(start_date, end_date)Returns all holidays as a list within the given rangeArgs::start_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

end_date : date in %d-%m-%Y / datetime.date / datetime.datetime formatget_holidays_list(start_date="20-6-2023",end_date="30-6-2023")[datetime.datetime(2023, 6, 24, 0, 0),
 datetime.datetime(2023, 6, 25, 0, 0),
 datetime.datetime(2023, 6, 29, 0, 0)]get_workdays_list(start_date, end_date)Returns all workdays as a list within the given rangeArgs::start_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

end_date : date in %d-%m-%Y / datetime.date / datetime.datetime formatget_workdays_list(start_date="20-6-2023",end_date="30-6-2023")[datetime.datetime(2023, 6, 20, 0, 0),
 datetime.datetime(2023, 6, 21, 0, 0),
 datetime.datetime(2023, 6, 22, 0, 0),
 datetime.datetime(2023, 6, 23, 0, 0),
 datetime.datetime(2023, 6, 26, 0, 0),
 datetime.datetime(2023, 6, 27, 0, 0),
 datetime.datetime(2023, 6, 28, 0, 0),
 datetime.datetime(2023, 6, 30, 0, 0)]get_month_weekdays(input_date, required_weekday, filtered=True)Return all occurences of the required weekday from the given date monthArgs::input_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

required_weekday : Weekday name (eg. 'Sunday'/'sunday').    

filtered : bool . Default True ( Will return the previous work day if a required weekday is holiday.)get_month_weekdays(input_date="21-6-2023",required_weekday='thursday')[datetime.datetime(2023, 6, 1, 0, 0),
 datetime.datetime(2023, 6, 8, 0, 0),
 datetime.datetime(2023, 6, 15, 0, 0),
 datetime.datetime(2023, 6, 22, 0, 0),
 datetime.datetime(2023, 6, 28, 0, 0)]month_last_weekday(input_date, last_weekday, filtered=True)Return last occurence of the required weekday from the given date monthArgs::input_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

last_weekday : Weekday name (eg. 'Sunday'/'sunday').    

filtered : bool . Default True (Will return the previous work day if a last weekday is holiday.)month_last_weekday(input_date="21-6-2023",last_weekday='thursday')datetime.datetime(2023, 6, 28, 0, 0)get_weekdays(start_date, end_date, required_weekday, filtered=True)Return all occurences of the required weekday from the given rangeArgs::start_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

end_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

required_weekday : Weekday name (eg. 'Sunday'/'sunday').    

filtered : bool . Default True ( Will return the previous work day if a required weekday is holiday.)get_weekdays(start_date="21-3-2023",end_date="30-6-2023",required_weekday='friday')[datetime.datetime(2023, 3, 24, 0, 0),
 datetime.datetime(2023, 3, 31, 0, 0),
 datetime.datetime(2023, 4, 6, 0, 0),
 datetime.datetime(2023, 4, 13, 0, 0),
 datetime.datetime(2023, 4, 21, 0, 0),
 datetime.datetime(2023, 4, 28, 0, 0),
 datetime.datetime(2023, 5, 5, 0, 0),
 datetime.datetime(2023, 5, 12, 0, 0),
 datetime.datetime(2023, 5, 19, 0, 0),
 datetime.datetime(2023, 5, 26, 0, 0),
 datetime.datetime(2023, 6, 2, 0, 0),
 datetime.datetime(2023, 6, 9, 0, 0),
 datetime.datetime(2023, 6, 16, 0, 0),
 datetime.datetime(2023, 6, 23, 0, 0),
 datetime.datetime(2023, 6, 30, 0, 0)]