diff -ur v20/site_ut.py v21/site_ut.py --- v20/site_ut.py 2020-04-26 00:30:19.000000000 +0900 +++ v21/site_ut.py 2020-04-29 15:51:28.000000000 +0900 @@ -146,7 +146,7 @@ cmd = 'wget -q {}/{}'.format( url, path ) if dir_: - cmd = '( cd {} ; {} )'.format( dir_ ) + cmd = '( cd {} ; {} )'.format( dir_, cmd ) if call( cmd, 'err' ) != 'err': return True @@ -165,29 +165,64 @@ if s: dbg.out( s, '' ) +def do_cmd(site, cmds): + st = site.get() # default + + cmd = arg.get_name_args( cmds ) + + + def put_(path): + put( st.url, path, st.lmt_size ) + + def get_(path): + dbg.out('url={} path={} curr={}'.format( st.url, path, os.getcwd() ) ) + if not get( st.url, path ): + sys.exit( 1 ) + + def exists(path): + s = '{}/{}'.format( st.url, path ) + r = exists_url( s ) + h = 'found' if r else 'not found' + dbg.out( h + ' ' + s ) + if not r: + sys.exit( 1 ) + + def cat_(path): + cat( st.url, path ) + + fs = empty.new( put=put_, get=get_, exists=exists, cat=cat_ ) + + + bak = os.getcwd() + C = cmd.opts.get( 'C' ) + if C: + os.chdir( C ) + + if hasattr( fs, cmd.name ): + func = getattr( fs, cmd.name ) + func( *cmd.args ) + + if C: + os.chdir( bak ) + if __name__ == "__main__": site = new( 'ftp_ut.yaml' ) - cmds = ( 'put', 'get', 'exists', 'cat' ) + + cmd_new = arg.cmd_new + s = '"-C dir" is load yaml and ( cd dir ; ... )' + cmds = [ + cmd_new( 'put', [ 'path' ], opts={ 'C': '' }, comment=s ), + cmd_new( 'get', [ 'path' ], opts={ 'C': '' }, comment=s ), + cmd_new( 'exists', [ 'path' ], opts={ 'C': '' }, comment=s ), + cmd_new( 'cat', [ 'path' ], opts={ 'C': '' }, comment=s ), + ] + + names = list( map( lambda cmd: cmd.name, cmds ) ) + a = arg.new() k = a.pop() - if k in cmds: - st = site.get() # default - path = a.pop() - if path: - if k == 'put': - put( st.url, path, st.lmt_size ) - elif k == 'get': - if not get( st.url, path ): - sys.exit( 1 ) - elif k == 'exists': - s = '{}/{}'.format( st.url, path ) - r = exists_url( s ) - h = 'found' if r else 'not found' - dbg.out( h + ' ' + s ) - if not r: - sys.exit( 1 ) - elif k == 'cat': - cat( st.url, path ) + if k in names: + do_cmd( site, cmds ) else: st = site.get( k ) if st: