Example #1
0
 def get(self):
     if 'clear' in self.request.arguments():
         Status(self.is_test()).clear()
         self.redirect(self.request.path)
     else:
         self.show('admin_main.html', {
             'stts':Status(self.is_test()).get_list(),
             'text':Params().get('view'),
     })
Example #2
0
 def post(self):
     stts = {}
     if 'clear' in self.request.arguments():
         Status(self.is_test()).clear()
     else:
         for name in self.request.arguments():
             stts[name] = self.request.get(name, default_value='')
         stts['last_mod'] = tz.nowjststr()
         Status(self.is_test()).merge(stts)
     self.redirect(self.request.url)
Example #3
0
 def get(self):
     filename = self.request.path.replace('/download/', '')
     task = filename[0:2]
     cat = filename[3:4]
     ts = "%(y)s-%(m)s-%(d)s" % {
         'y':filename[5:9],
         'm':filename[9:11],
         'd':filename[11:13],
     }
     stts = Status()
     if stts.get("ts_ar_%(cat)s" % {'cat':cat})[0:10] != ts:
         self.error(404)
         return
     key = stts.get("key_%(task)s_%(cat)s" % {'cat':cat, 'task':task})
     blob_info = blobstore.BlobInfo(blobstore.BlobKey(key))
     zr = blob_info.open()
     self.response.headers['Content-Type'] = 'application/zip'
     self.response.out.write(zr.read())
     zr.close()
Example #4
0
 def __init__(self, task, cat):
     self.__tsk = task
     self.__cat = cat
     self.__stt = Status()
Example #5
0
class Task():
    """タスク"""

    __tsk = None
    __cat = None
    __stt = None

    def __init__(self, task, cat):
        self.__tsk = task
        self.__cat = cat
        self.__stt = Status()

    def get_task(self):
        """タスク名を取得する。"""
        return self.__tsk

    def get_cat(self):
        """分類(住所/事業所)を取得する。"""
        return self.__cat

    def get_prev(self):
        """データのインプットになるタスク名を取得する。"""
        return Params().get('task_prv', self.__tsk)

    def __get_key(self, name):
        """ステータスのキーを取得する。"""
        return '%(nam)s_%(tsk)s_%(cat)s' % {
            'nam': name,
            'tsk': self.__tsk,
            'cat': self.__cat,
        }

    def __get_key_prev(self, name):
        """インプットデータのステータスのキーを取得する。"""
        return '%(nam)s_%(prv)s_%(cat)s' % {
            'nam': name,
            'prv': self.get_prev(),
            'cat': self.__cat,
        }

    def get_ts(self):
        """日本郵便配布データのタイムスタンプを取得する。"""
        return self.__stt.get('ts_ar_%(cat)s' % {'cat': self.__cat})

    def get_ts_short(self):
        """日本郵便配布データのタイムスタンプを短い書式で取得する。"""
        return self.get_ts().replace('-', '').replace(':',
                                                      '').replace(' ', '')[0:8]

    def get_stt(self, name):
        """ステータスを取得する。"""
        return self.__stt.get(self.__get_key(name))

    def get_stt_prev(self, name):
        """インプットデータのステータスを取得する。"""
        return self.__stt.get(self.__get_key_prev(name))

    def set_stt(self, stt):
        """ステータスを設定する。"""
        dic = {}
        for key in stt.keys():
            dic[self.__get_key(key)] = stt[key]
        self.__stt.merge(dic)

    def kick(self):
        """処理を実行する。"""
        return self.convert()

    def convert(self):
        """データ変換処理を実行する。"""
        stts = {}
        key = self.get_stt_prev('key')
        blob_info = blobstore.BlobInfo(blobstore.BlobKey(key))
        zr = blob_info.open()
        zi = zipfile.ZipFile(zr, 'r')
        if len(zi.infolist()) < 1:
            zi.close()
            zr.close()
            return None
        zw = StringIO.StringIO()
        zo = zipfile.ZipFile(zw, 'w', zipfile.ZIP_DEFLATED)
        self.proc_all(zi, zo, stts)
        zo.close()
        zi.close()
        zr.close()
        con = zw.getvalue()
        stts['csz'] = len(con)
        sha1 = hashlib.sha1()
        sha1.update(con)
        stts['dig'] = sha1.hexdigest()
        stts['key'] = save_blob(
            con, '%(tsk)s_%(cat)s-%(ts)s.zip' % {
                'cat': self.get_cat(),
                'tsk': self.get_task(),
                'ts': self.get_ts_short(),
            })
        self.set_stt(stts)
        return 'ok'

    # can be overidden
    def proc_all(self, zi, zo, stts):
        """全てのインプットを処理する。"""
        dsz = 0
        cnt = 0
        for zip_info in zi.infolist():
            for data in self.proc(zi, zip_info):
                zo.writestr(data[0], data[1], zipfile.ZIP_DEFLATED)
                dsz += len(data[1])
                cnt += 1
            stts['dsz'] = dsz
            stts['cnt'] = cnt

    # to be overidden
    def proc(self, zi, zip_info):
        """1個のインプットを処理する。"""
        pass
Example #6
0
 def __init__(self, task, cat):
     self.__tsk = task
     self.__cat = cat
     self.__stt = Status()
Example #7
0
class Task():
    """タスク"""
    
    __tsk = None
    __cat = None
    __stt = None

    def __init__(self, task, cat):
        self.__tsk = task
        self.__cat = cat
        self.__stt = Status()

    def get_task(self):
        """タスク名を取得する。"""
        return self.__tsk
    
    def get_cat(self):
        """分類(住所/事業所)を取得する。"""
        return self.__cat
    
    def get_prev(self):
        """データのインプットになるタスク名を取得する。"""
        return Params().get('task_prv', self.__tsk)
        
    def __get_key(self, name):
        """ステータスのキーを取得する。"""
        return '%(nam)s_%(tsk)s_%(cat)s' % {
            'nam':name,
            'tsk':self.__tsk,
            'cat':self.__cat,
        }
        
    def __get_key_prev(self, name):
        """インプットデータのステータスのキーを取得する。"""
        return '%(nam)s_%(prv)s_%(cat)s' % {
            'nam':name,
            'prv':self.get_prev(),
            'cat':self.__cat,
        }
        
    def get_ts(self):
        """日本郵便配布データのタイムスタンプを取得する。"""
        return self.__stt.get('ts_ar_%(cat)s' % {'cat':self.__cat})

    def get_ts_short(self):
        """日本郵便配布データのタイムスタンプを短い書式で取得する。"""
        return self.get_ts().replace('-', '').replace(':', '').replace(' ', '')[0:8]
    
    def get_stt(self, name):
        """ステータスを取得する。"""
        return self.__stt.get(self.__get_key(name))
        
    def get_stt_prev(self, name):
        """インプットデータのステータスを取得する。"""
        return self.__stt.get(self.__get_key_prev(name))

    def set_stt(self, stt):
        """ステータスを設定する。"""
        dic = {}
        for key in stt.keys():
            dic[self.__get_key(key)] = stt[key]
        self.__stt.merge(dic)
    
    def kick(self):
        """処理を実行する。"""
        return self.convert()
    
    def convert(self):
        """データ変換処理を実行する。"""
        stts = {}
        key = self.get_stt_prev('key')
        blob_info = blobstore.BlobInfo(blobstore.BlobKey(key))
        zr = blob_info.open()
        zi = zipfile.ZipFile(zr, 'r')
        if len(zi.infolist()) < 1:
            zi.close()
            zr.close()
            return None
        zw = StringIO.StringIO()
        zo = zipfile.ZipFile(zw, 'w', zipfile.ZIP_DEFLATED)
        self.proc_all(zi, zo, stts)
        zo.close()
        zi.close()
        zr.close()
        con = zw.getvalue()
        stts['csz'] = len(con)
        sha1 = hashlib.sha1()
        sha1.update(con)
        stts['dig'] = sha1.hexdigest()
        stts['key'] = save_blob(con, '%(tsk)s_%(cat)s-%(ts)s.zip' % {
            'cat':self.get_cat(),
            'tsk':self.get_task(),
            'ts':self.get_ts_short(),
        })
        self.set_stt(stts)
        return 'ok'

    # can be overidden
    def proc_all(self, zi, zo, stts):
        """全てのインプットを処理する。"""
        dsz = 0
        cnt = 0
        for zip_info in zi.infolist():
            for data in self.proc(zi, zip_info):
                zo.writestr(data[0], data[1], zipfile.ZIP_DEFLATED)
                dsz += len(data[1])
                cnt += 1
            stts['dsz'] = dsz
            stts['cnt'] = cnt
    
    # to be overidden
    def proc(self, zi, zip_info):
        """1個のインプットを処理する。"""
        pass