source: holiday-manager/trunk/fuentes/holiday-manager/python3-holidaymanager/HolidayManager.py @ 7133

Last change on this file since 7133 was 7133, checked in by jrpelegrina, 19 months ago

Fix code

File size: 5.1 KB
Line 
1#!/usr/bin/env python3
2
3import os
4import sys
5import json
6import codecs
7import time
8import shutil
9from datetime import datetime, date,timedelta
10import copy
11
12
13class HolidayManager(object):
14
15        def __init__(self):
16
17                super(HolidayManager, self).__init__()
18
19                self.dbg=0
20                self.config_dir=os.path.expanduser("/etc/manageHolidays/")
21                self.config_file=os.path.join(self.config_dir,"holiday_list")
22                self.block_file=os.path.join(self.config_dir,"holiday_tmp")
23                #self.read_conf()
24
25        #def __init__
26
27
28        def _debug(self,function,msg):
29
30                if self.dbg==1:
31                        print("[MANAGE HOLIDAYS]: "+ str(function) + str(msg))
32
33        #def _debug             
34
35        def _create_conf(self,config_folder,file):
36
37                if not os.path.exists(config_folder):
38                        os.makedirs(config_folder)     
39
40                var={} 
41                with codecs.open(file,'w',encoding="utf-8") as f:
42                        json.dump(var,f,ensure_ascii=False)
43                        f.close()       
44       
45        #def _create_conf               
46
47        def read_conf(self):
48               
49                '''
50                        code=4: Read file correctly
51                        code=5: Error in read file
52
53                '''
54                if not os.path.exists(self.config_file):
55                        self._create_conf(self.config_dir,self.config_file)
56
57                try:
58                        f=open(self.config_file)
59                        self.holiday_list=json.load(f)
60                        return {"status":True,"code":4,"info":self.holiday_list}
61                except Exception as e: 
62                        self._debug("Read configuration file: ",str(e))
63                        return {"status":False,"code":5,"info":self.holiday_list}
64
65                f.close()       
66
67        #def read_conf 
68
69
70        def _write_conf(self,info):
71               
72                '''
73                        code=1: Block for another user
74                        code=2: Correcty write
75                        code=3: error when write a holiday_list
76
77                '''
78                if os.path.exists(self.block_file):
79                        return {"status":False,"code":1,"info":""}
80                else:
81                        self._create_conf(self.config_dir,self.block_file)
82                        try:   
83                                with codecs.open(self.block_file,'w',encoding="utf-8") as f:
84                                        json.dump(info,f,ensure_ascii=False)
85                                        f.close()       
86                                        return {"status":True,"code":2,"info":""}
87                        except Exception as e:
88                                self._debug("Write configuration file: ",str(e))
89                                return {"status":False,"code":3,"info":str(e)}
90
91
92        #def _write_conf       
93
94
95        def add_day(self,day,description):
96
97                '''
98                        Format to day arg:
99                                -day="dd/mm/yyyy"
100                                -interval="dd/mm/yyyy-dd/mm/yyyy"
101                '''             
102
103                info=self.holiday_list.copy()
104                info[day]={}
105                info[day]["description"]=description
106               
107                result=self._write_conf(info)
108               
109                if result["status"]:
110                        shutil.move(self.block_file,self.config_file)
111                        self.holiday_list=info
112                       
113                return result   
114
115        #def add_day
116
117               
118        def _get_interval_id(self):
119
120                interval=[]
121                for item in self.holiday_list:
122                        if self.holiday_list[item]["intervalId"]!="":
123                                interval.append(int(self.holiday_list[item]["intervalId"]))
124
125                if len(interval)>0:
126                        next_intervalId=max(interval)+1
127                       
128                else:
129                        next_intervalId=0
130
131                return next_intervalId 
132
133        #def _get_interval_id
134
135
136        def delete_day(self,day):
137
138                '''
139                        Format to day arg:
140                                -day="dd/mm/yyyy"
141                                -interval="dd/mm/yyyy-dd/mm/yyyy"
142                '''     
143                info=self.holiday_list.copy()
144
145                try:
146                        info.pop(day)
147                except Exception as e:
148                        self._debug("Delete day: ",str(e))
149                pass
150
151                result=self._write_conf(info)
152
153                if result["status"]:
154                        shutil.move(self.block_file,self.config_file)
155                        self.holiday_list=info
156
157                return result   
158                               
159        #def delete_day                 
160
161
162        def get_days_inrange(self,day):
163
164                list_days=[]
165                tmp=day.split("-")
166                date1=datetime.strptime(tmp[0],'%d/%m/%Y')
167                date2=datetime.strptime(tmp[1],'%d/%m/%Y')
168                delta=date2-date1
169                for i in range(delta.days + 1):
170                        tmp_day=(date1 + timedelta(days=i)).strftime('%d/%m/%Y')
171                        list_days.append(tmp_day)
172
173                return list_days       
174
175        #def get_days_inrange   
176
177        def is_holiday(self,day):
178
179                holiday_days=[]
180                if os.path.exists(self.config_file):
181                        self.read_conf()
182
183                for item in self.holiday_list:
184                        tmp_list=[]
185                        if "-" in item:
186                                tmp_list=self.get_days_inrange(item)
187                                holiday_days=holiday_days+tmp_list
188                        else:
189                                holiday_days.append(item)
190
191
192                if day in holiday_days:
193                        return True
194                else:
195                        return False
196                               
197
198        #def is_holiday
199
200
201        def reset_holiday_list(self):
202               
203                info={}
204               
205                result=self._write_conf(info)
206
207                if result["status"]:
208                        shutil.move(self.block_file,self.config_file)
209                        self.holiday_list=info
210
211                return result   
212
213        #def reset_holiday_list
214
215
216        def import_holiday_list(self,orig_path):
217               
218                '''
219                        code=6: Import correctly
220                        code=7: Block for another user
221                        code=8: Error in import
222                        code=9: Orig file not exits
223                '''
224                if os.path.exists(orig_path):
225                        try:
226                                f=open(orig_path)
227                                read=json.load(f)
228                                if not os.path.exists(self.block_file):
229                                        shutil.copyfile(orig_path,self.config_file)
230                                        f.close()
231                                        return {"status":True,"code":6,"info":""}
232                                else:
233                                        return {"status":False,"code":7,"info":""}
234       
235                        except Exception as e:
236                                self._debug("Import holiday list: ",str(e))
237                                return {"status":False,"code":8,"info":str(e)}
238
239
240                return {"status":False,"code":9,"info":""}
241               
242       
243        #def import_holiday_list
244               
245       
246        def export_holiday_list(self,dest_path):
247
248                '''
249                        code=10: Export correcty
250                        code=11: Error in export
251                '''
252
253                try:
254                        if os.path.exists(self.config_file):
255                                shutil.copy2(self.config_file,dest_path)
256                               
257                                return {"status":True,"code":10,"info":""}
258
259                except Exception as e:         
260                        self._debug("Export holiday list: ",str(e))
261                        return {"status":False,"code":11,"info":str(e)}
262
263                       
264
265        #def export_holiday_list       
266
267#Class HolidayManager   
Note: See TracBrowser for help on using the repository browser.