【Python】【fishingz】fishingz の Python3 版を作成する (2)

概要

fishingz の Python3 版を作成する プロジェクトというか、Python の勉強。
 
本ページの内容は、fishingz の Python3 版を作成する (1) を class に置き換えただけである。
処理内容については、【fish】fishingz の詳細設計編【fishingz】 の「1.1」 のシーケンス部の実装である。
 

コード

fishingz_py.py

#!/usr/bin/env python3
# 次のコマンドを実行して ConfigParser.py をインストールすること
# pip3 install ConfigParser

import  getopt
import  sys
import  os
import  uuid
import  configparser    # Python 3.6 ではファイル名は configparser.py である
from    collections import OrderedDict


class   Fishingz(object):

    def __init__(self):
        self.home     = os.environ.get("HOME")
        self.user     = os.environ.get("USER")
        self.evtmap   = configparser.ConfigParser()
        self.settings = OrderedDict()
        pass


    def load_userfile(self):
        home    = os.environ.get("HOME")
        iniFile = os.path.join(home, '.fishingz/init.conf')
        try:
            self.evtmap.read(iniFile)    # $HOME/.fishingz/init.conf の内容が self.evtmap に格納される
        except:
            e = traceback.print_exc()
            sys.stderr.write('Cause: {0}'.format(e))
        else:
#           for k, v in self.evtmap.items():
#               #print("{0}=>{1}".format(k,v))
#               for i, d in self.evtmap.items(k):
#                   print("{0}=>{1}".format(i,d))
            pass


    def load_settings(self):
        user    = os.environ.get("USER")
    
        self.settings['FISHINGZ_UUID']      = uuid.uuid4().hex
        self.settings['FISHINGZ_USER_AREA'] = os.path.join('/tmp',user+'.fishingz')
        self.settings['FISHINGZ_WORKDIR']   = os.path.join(self.settings['FISHINGZ_USER_AREA'],
                                                           self.settings['FISHINGZ_UUID'])
        self.settings['FISHINGZ_AVATAR']    = ""
        self.settings['FISHINGZ_D_CMD']     = "cd"


    def verify_settings(self):
        if   'FISHINGZ_D_CMD'     not in self.settings:
            return False
        elif 'FISHINGZ_WORKDIR'   not in self.settings:
            return False
        elif 'FISHINGZ_USER_AREA' not in self.settings:
            return False
        else:
            return True

    def make_avatar(self):
        pass

    def stream(self, *args):
        # fishingz::stream::init 相当の処理開始
        self.load_userfile()  # ファイル種別ごとの処理を定義したテーブル
        self.load_settings()  # fishingz クラスの初期値
    
        retval   = self.verify_settings()    # 設定値が妥当かチェックする。
        if retval != True:
            sys.exit(2)
        else:   # verify ok
            for k, v in self.settings.items():
                print("{0}=>{1}".format(k,v))
    
        # fishingz::stream::setup 相当の処理開始
        self.make_avatar()


if __name__ == '__main__':

    OPT_S_FMT = "iR"
    OPT_L_FMT = ['find-dir', 'find-file', 'find-link', 'find-mru']

    try:
        opts, args = getopt.getopt(sys.argv[1:], OPT_S_FMT, OPT_L_FMT)

    except getopt.GetoptError as err:
        sys.stderr.write(err)
        sys.exit(2)

    for o, a in opts:
        if ( o == "-i" or o == "-R" ):
            print("Option is {0}".format(o))
            pass
        elif o in ('--find-dir', '--find-file', '--find-link', '--find-mru'):
            isOptFindMode  = True
            print("Option is {0}".format(o))
            fgz = Fishingz()
            fgz.stream(o)
        else:
            assert False, "unhandled option"

 

処理内容

class 対応後の動作は以下であり、問題無いかと思う。

% ./fishingz.py  --find-dir
Option is --find-dir
FISHINGZ_UUID=>79ec152348ee4951857a1ca9cd292bb3
FISHINGZ_USER_AREA=>/tmp/neko.fishingz
FISHINGZ_WORKDIR=>/tmp/neko.fishingz/79ec152348ee4951857a1ca9cd292bb3
FISHINGZ_AVATAR=>
FISHINGZ_D_CMD=>cd