def create_table(self, table_name, attribute_definitions=None, key_schema=None, read_capacity_units=None, write_capacity_units=None, global_secondary_indexes=None, local_secondary_indexes=None, stream_specification=None):
    '\n        Performs the CreateTable operation\n        '
    operation_kwargs = {TABLE_NAME: table_name, PROVISIONED_THROUGHPUT: {READ_CAPACITY_UNITS: read_capacity_units, WRITE_CAPACITY_UNITS: write_capacity_units}}
    attrs_list = []
    if (attribute_definitions is None):
        raise ValueError('attribute_definitions argument is required')
    for attr in attribute_definitions:
        attrs_list.append({ATTR_NAME: attr.get(pythonic(ATTR_NAME)), ATTR_TYPE: attr.get(pythonic(ATTR_TYPE))})
    operation_kwargs[ATTR_DEFINITIONS] = attrs_list
    if global_secondary_indexes:
        global_secondary_indexes_list = []
        for index in global_secondary_indexes:
            global_secondary_indexes_list.append({INDEX_NAME: index.get(pythonic(INDEX_NAME)), KEY_SCHEMA: sorted(index.get(pythonic(KEY_SCHEMA)), key=(lambda x: x.get(KEY_TYPE))), PROJECTION: index.get(pythonic(PROJECTION)), PROVISIONED_THROUGHPUT: index.get(pythonic(PROVISIONED_THROUGHPUT))})
        operation_kwargs[GLOBAL_SECONDARY_INDEXES] = global_secondary_indexes_list
    if (key_schema is None):
        raise ValueError('key_schema is required')
    key_schema_list = []
    for item in key_schema:
        key_schema_list.append({ATTR_NAME: item.get(pythonic(ATTR_NAME)), KEY_TYPE: str(item.get(pythonic(KEY_TYPE))).upper()})
    operation_kwargs[KEY_SCHEMA] = sorted(key_schema_list, key=(lambda x: x.get(KEY_TYPE)))
    local_secondary_indexes_list = []
    if local_secondary_indexes:
        for index in local_secondary_indexes:
            local_secondary_indexes_list.append({INDEX_NAME: index.get(pythonic(INDEX_NAME)), KEY_SCHEMA: sorted(index.get(pythonic(KEY_SCHEMA)), key=(lambda x: x.get(KEY_TYPE))), PROJECTION: index.get(pythonic(PROJECTION))})
        operation_kwargs[LOCAL_SECONDARY_INDEXES] = local_secondary_indexes_list
    if stream_specification:
        operation_kwargs[STREAM_SPECIFICATION] = {STREAM_ENABLED: stream_specification[pythonic(STREAM_ENABLED)], STREAM_VIEW_TYPE: stream_specification[pythonic(STREAM_VIEW_TYPE)]}
    try:
        data = self.dispatch(CREATE_TABLE, operation_kwargs)
    except BOTOCORE_EXCEPTIONS as e:
        raise TableError('Failed to create table: {0}'.format(e), e)
    return data
Performs the CreateTable operation
def create_table(self, table_name, attribute_definitions=None, key_schema=None, read_capacity_units=None, write_capacity_units=None, global_secondary_indexes=None, local_secondary_indexes=None, stream_specification=None):
    '\n        \n        '
    operation_kwargs = {TABLE_NAME: table_name, PROVISIONED_THROUGHPUT: {READ_CAPACITY_UNITS: read_capacity_units, WRITE_CAPACITY_UNITS: write_capacity_units}}
    attrs_list = []
    if (attribute_definitions is None):
        raise ValueError('attribute_definitions argument is required')
    for attr in attribute_definitions:
        attrs_list.append({ATTR_NAME: attr.get(pythonic(ATTR_NAME)), ATTR_TYPE: attr.get(pythonic(ATTR_TYPE))})
    operation_kwargs[ATTR_DEFINITIONS] = attrs_list
    if global_secondary_indexes:
        global_secondary_indexes_list = []
        for index in global_secondary_indexes:
            global_secondary_indexes_list.append({INDEX_NAME: index.get(pythonic(INDEX_NAME)), KEY_SCHEMA: sorted(index.get(pythonic(KEY_SCHEMA)), key=(lambda x: x.get(KEY_TYPE))), PROJECTION: index.get(pythonic(PROJECTION)), PROVISIONED_THROUGHPUT: index.get(pythonic(PROVISIONED_THROUGHPUT))})
        operation_kwargs[GLOBAL_SECONDARY_INDEXES] = global_secondary_indexes_list
    if (key_schema is None):
        raise ValueError('key_schema is required')
    key_schema_list = []
    for item in key_schema:
        key_schema_list.append({ATTR_NAME: item.get(pythonic(ATTR_NAME)), KEY_TYPE: str(item.get(pythonic(KEY_TYPE))).upper()})
    operation_kwargs[KEY_SCHEMA] = sorted(key_schema_list, key=(lambda x: x.get(KEY_TYPE)))
    local_secondary_indexes_list = []
    if local_secondary_indexes:
        for index in local_secondary_indexes:
            local_secondary_indexes_list.append({INDEX_NAME: index.get(pythonic(INDEX_NAME)), KEY_SCHEMA: sorted(index.get(pythonic(KEY_SCHEMA)), key=(lambda x: x.get(KEY_TYPE))), PROJECTION: index.get(pythonic(PROJECTION))})
        operation_kwargs[LOCAL_SECONDARY_INDEXES] = local_secondary_indexes_list
    if stream_specification:
        operation_kwargs[STREAM_SPECIFICATION] = {STREAM_ENABLED: stream_specification[pythonic(STREAM_ENABLED)], STREAM_VIEW_TYPE: stream_specification[pythonic(STREAM_VIEW_TYPE)]}
    try:
        data = self.dispatch(CREATE_TABLE, operation_kwargs)
    except BOTOCORE_EXCEPTIONS as e:
        raise TableError('Failed to create table: {0}'.format(e), e)
    return data