Create a new object uploading files from a directory as bitstreams::

    usage: cdstar create [options] <DIR>

    options:
        --metadata=<JSON>    Path to metadata in JSON, or JSON literal.
        --include=<PATTERNS> comma-separated list of filename patterns to include.
        --exclude=<PATTERNS> comma-separated list of filename patterns to exclude.

def c_create(api, args, verbose=False):
    """
Create a new object uploading files from a directory as bitstreams::

    usage: cdstar create [options] <DIR>

    options:
        --metadata=<JSON>    Path to metadata in JSON, or JSON literal.
        --include=<PATTERNS> comma-separated list of filename patterns to include.
        --exclude=<PATTERNS> comma-separated list of filename patterns to exclude.
"""
    def patterns(opt):
        res = _split(opt)
        if res:
            return r'|'.join([fnmatch.translate(x) for x in res])

    includes = patterns(args['--include'])
    excludes = patterns(args['--exclude'])

    obj = api.get_object()
    if verbose:
        yield 'object created at'
        yield api.url(obj)

    if set_metadata(args['--metadata'], obj):
        if verbose:
            yield 'adding metadata'
            yield api.url(obj.metadata)

    for root, dirs, files in os.walk(args['<DIR>']):
        # exclude/include files
        files = [os.path.join(root, f) for f in files]
        if excludes:
            files = [f for f in files if not re.match(excludes, f)]
        if includes:
            files = [f for f in files if re.match(includes, f)]

        for fname in files:
            bitstream = obj.add_bitstream(fname=fname)
            if verbose:
                yield 'adding bitstream'
                yield api.url(bitstream)

    yield api.url(obj)