Esempio n. 1
0
def main():
    parser = argparse.ArgumentParser()

    parser.add_argument('-c', '--config', default=None, required=True,
                        help='Storages configuration file.')
    parser.add_argument('--info', '-v', action='store_true', help='info mode')
    parser.add_argument('--verbose', '-vv', action='store_true', help='verbose mode')

    subparsers = parser.add_subparsers(help='command help', dest='cmd')
    subparsers.required = True

    parser_list = subparsers.add_parser('list', help='list file on a storage')
    parser_list.add_argument('--recursive', '-r', action='store_true', help='recursive listing')
    parser_list.add_argument('storage', type=resolvedpath, help='path to list')

    parser_get = subparsers.add_parser('get', help='download a file or directory')
    parser_get.add_argument('storage', type=resolvedpath,
                            help='path to file or directory to download, directory must ends with /')
    parser_get.add_argument('local', type=str, help='local path')

    parser_get = subparsers.add_parser('push', help='upload a file or directory')
    parser_get.add_argument('local', type=str, help='local path to file or directory to upload')
    parser_get.add_argument('storage', type=resolvedpath,
                            help='remote path')

    parser_stat = subparsers.add_parser('stat', help='returns stat on a remote file/directory')
    parser_stat.add_argument('storage', type=resolvedpath, help='remote path')

    args = parser.parse_args()
    if args.info:
        logging.basicConfig(level=logging.INFO)
    if args.verbose:
        logging.basicConfig(level=logging.DEBUG)

    with open(args.config) as jsonf:
        config = json.load(jsonf)
        # support configuration from automatic tests
        if 'storages' in config:
            config = config['storages']
        client = StorageClient(config=config)

    if args.cmd == "list":
        listdir = client.listdir(args.storage, args.recursive)
        for k in sorted(listdir.keys()):
            if listdir[k].get("is_dir"):
                print("dir", k)
            else:
                date = datetime.fromtimestamp(listdir[k]["last_modified"])
                print("   ", "%10d" % listdir[k]["size"], date.strftime("%Y-%m-%dT%H:%M:%S"), k)
    elif args.cmd == "get":
        directory = args.storage.endswith('/')
        if directory:
            if os.path.isfile(args.local):
                raise ValueError("%s should be a directory", args.local)
            client.get_directory(args.storage, args.local)
        else:
            client.get_file(args.storage, args.local)
    elif args.cmd == "push":
        client.push(args.local, args.storage)
    elif args.cmd == "stat":
        print(client.stat(args.storage))
Esempio n. 2
0
def main():
    parser = argparse.ArgumentParser()

    parser.add_argument('-c',
                        '--config',
                        default=None,
                        required=True,
                        help='Storages configuration file.')
    parser.add_argument('--info', '-v', action='store_true', help='info mode')
    parser.add_argument('--verbose',
                        '-vv',
                        action='store_true',
                        help='verbose mode')

    subparsers = parser.add_subparsers(help='command help', dest='cmd')
    subparsers.required = True

    parser_list = subparsers.add_parser('list', help='list file on a storage')
    parser_list.add_argument('--recursive',
                             '-r',
                             action='store_true',
                             help='recursive listing')
    parser_list.add_argument('storage', type=resolvedpath, help='path to list')

    parser_get = subparsers.add_parser('get',
                                       help='download a file or directory')
    parser_get.add_argument(
        'storage',
        type=resolvedpath,
        help='path to file or directory to download, directory must ends with /'
    )
    parser_get.add_argument('local', type=str, help='local path')

    parser_get = subparsers.add_parser('push',
                                       help='upload a file or directory')
    parser_get.add_argument('local',
                            type=str,
                            help='local path to file or directory to upload')
    parser_get.add_argument(
        'storage',
        type=resolvedpath,
        help='path to file or directory to download, directory must ends with /'
    )

    parser_get = subparsers.add_parser('delete', help='delete a corpus')
    parser_get.add_argument(
        'storage',
        type=resolvedpath,
        help='path to file or directory to download, directory must ends with /'
    )
    parser_get.add_argument('corpusId', type=str, help='corpus id')

    parser_stat = subparsers.add_parser(
        'stat', help='returns stat on a remote file/directory')
    parser_stat.add_argument(
        'storage',
        type=resolvedpath,
        help='path to file or directory to download, directory must ends with /'
    )

    parser_get = subparsers.add_parser(
        'stream_corpus_manager',
        help='Export a corpus in TMX(default) or biText')
    parser_get.add_argument(
        'storage',
        type=resolvedpath,
        help='path to file or directory to download, directory must ends with /'
    )
    parser_get.add_argument('corpusId', type=str, help='corpus id')
    parser_get.add_argument(
        'format',
        type=check_format,
        help='Format of the corpus (application/x-tmx+xml, text/bitext)')

    parser_search = subparsers.add_parser(
        'search', help='list corpus segments identified '
        'by corpus id')
    parser_search.add_argument('storage',
                               type=resolvedpath,
                               help='remote path')
    parser_search.add_argument('id', help='remote id')
    parser_search.add_argument('search_query',
                               type=resolvedjson,
                               help='query text for search')
    parser_search.add_argument('skip',
                               default=0,
                               help='number of segments skip (default 0)')
    parser_search.add_argument(
        'limit',
        default=0,
        help='number of segments returned (default 0 meaning all)')

    parser_search = subparsers.add_parser(
        'seg_delete', help='Delete segments identified by id')
    parser_search.add_argument('storage',
                               type=resolvedpath,
                               help='remote path')
    parser_search.add_argument('corpus_id', help='corpus id')
    parser_search.add_argument('ids', help='list segment id')

    parser_stream = subparsers.add_parser(
        'stream', help='print out specific corpus by name')
    parser_stream.add_argument('storage',
                               type=resolvedpath,
                               help='remote path')

    args = parser.parse_args()
    if args.info:
        logging.basicConfig(level=logging.INFO)
    if args.verbose:
        logging.basicConfig(level=logging.DEBUG)

    with open(args.config) as jsonf:
        config = json.load(jsonf)
        # support configuration from automatic tests
        if 'storages' in config:
            config = config['storages']
        client = StorageClient(config=config)

    if args.cmd == "list":
        listdir = client.listdir(args.storage, args.recursive)
        for k in sorted(listdir.keys()):
            if listdir[k].get("is_dir"):
                print("dir", k)
            else:
                date = datetime.fromtimestamp(listdir[k]["last_modified"])
                if "entries" in listdir[k]:
                    size = listdir[k]["entries"]
                else:
                    size = listdir[k]["size"]
                print("   ", "%10d" % size, date.strftime("%Y-%m-%dT%H:%M:%S"),
                      k)
    elif args.cmd == "get":
        directory = args.storage.endswith('/')
        if directory:
            if os.path.isfile(args.local):
                raise ValueError("%s should be a directory" % args.local)
            client.get_directory(args.storage, args.local)
        else:
            client.get_file(args.storage, args.local)
    elif args.cmd == "push":
        client.push(args.local, args.storage)
    elif args.cmd == "delete":
        client.delete_corpus_manager(args.storage, args.corpusId)
    elif args.cmd == "stat":
        print(client.stat(args.storage))
    elif args.cmd == "stream_corpus_manager":
        byte_result = b''
        for chunk in client.stream_corpus_manager(args.storage, args.corpusId,
                                                  args.format):
            if chunk:
                byte_result += chunk
        sys.stdout.write(byte_result.decode("utf-8"))
    elif args.cmd == "stream":
        byte_result = b''
        for chunk in client.stream(args.storage):
            if chunk:
                byte_result += chunk
        sys.stdout.write(byte_result.decode("utf-8"))
    elif args.cmd == "search":
        print(
            client.search(args.storage, args.id, args.search_query, args.skip,
                          args.limit))
    elif args.cmd == "seg_delete":
        print(client.seg_delete(args.storage, args.corpus_id, args.ids))
    elif args.cmd == "seg_add":
        print(client.seg_add(args.storage, args.corpus_id, args.ids))