def compute_clusters(project_id,
                     column,
                     clusterer_type='binning',
                     function=None,
                     params=None):
    # returns a list of cluters of {'value';..., 'count':...}
    return refine.RefineProject(refine.RefineServer(),
                                project_id).compute_clusters(
                                    column, clusterer_type, function, params)
def reconcile(project_id,
              column,
              service,
              reconciliation_type=None,
              reconciliation_config=None):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).reconcile(column, service,
                                                      reconciliation_type,
                                                      reconciliation_config)
def export_templating(project_id):
    # export templating: return a fileobject of a project's data
    return refine.RefineProject(refine.RefineServer(),
                                project_id).export_templating(
                                    export_format='txt',
                                    engine='',
                                    prefix='',
                                    template='',
                                    rowSeparator='',
                                    suffix='')
def text_transform(project_id,
                   column,
                   expression,
                   on_error='set-to-blank',
                   repeat=False,
                   repeat_count=10):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).text_transform(
                                    column, expression, on_error, repeat,
                                    repeat_count)
def split_column(project_id,
                 column,
                 separator=',',
                 mode='separator',
                 regex=False,
                 guess_cell_type=True,
                 remove_original_column=True):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).split_column(
                                    column, separator, mode, regex,
                                    guess_cell_type, remove_original_column)
def transpose_columns_into_rows(project_id,
                                start_column,
                                column_count,
                                combined_column_name,
                                separator=':',
                                prepend_column_name=True,
                                ignore_blank_cells=True):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).transpose_columns_into_rows(
                                    start_column, column_count,
                                    combined_column_name, separator,
                                    prepend_column_name, ignore_blank_cells)
def do_raw(project_id, command, data):
    # do_raw :  issue a command to the server & return a response object
    return refine.RefineProject(refine.RefineServer(),
                                project_id).do_raw(command, data)
def project_url(project_id):
    # project_url
    return refine.RefineProject(refine.RefineServer(),
                                project_id).project_url()
def list_objects():
    # list projects
    return refine.Refine(refine.RefineServer()).list_projects()
def add_column(project_id, column, new_column, expression='value'):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).add_column(column, new_column,
                                                       expression)
def rename_column(project_id, column, new_column):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).rename_column(column, new_column)
def export(project_id, export_format='tsv'):
    # export : return a fileobject of a project's data.
    return refine.RefineProject(refine.RefineServer(),
                                project_id).export(export_format)
def get_preference(project_id, name):
    # get preference: returns the (JSON) value of a given preference setting.
    return refine.RefineProject(refine.RefineServer(),
                                project_id).get_preference(name)
def transpose_rows_into_columns(project_id, column, row_count):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).transpose_rows_into_columns(
                                    column, row_count)
def project_name(project_id):
    # functions in RefineProject:
    # project_name
    return refine.RefineProject(refine.RefineServer(),
                                project_id).project_name()
def fill_down(project_id, column):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).fill_down(column)
def blank_down(project_id, column):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).blank_down(column)
def move_column(project_id, column, index):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).move_column(column, index)
def reorder_columns(project_id, new_column_order):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).reorder_columns(new_column_order)
def do_json(project_id, command, data):
    # do_json: issue a command to the server, parse & return encoded JSON.
    return refine.RefineProject(refine.RefineServer(),
                                project_id).do_json(command, data)
def get_models(project_id):
    # get_models: fill out column metadata.
    # Column structure is a list of columns in their order.
    # The cellIndex is an index for that column's data into the list returned from get_rows().
    return refine.RefineProject(refine.RefineServer(), project_id).get_models()
def create_project(project_path, project_name):
    # create a new project
    projectID = refine.Refine(refine.RefineServer()).new_project(
        project_path, project_name, project_format='.csv')[1]
    return projectID
def apply_operations(project_id, file_path):
    # apply operations: apply the json file
    return refine.RefineProject(refine.RefineServer(),
                                project_id).apply_operations(file_path)
def delete(project_id):
    # delete the project
    return refine.RefineProject(refine.RefineServer(), project_id).delete()
def guess_types_of_column(project_id, column, service):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).guess_types_of_column(
                                    column, service)
def get_project_name(project_id):
    # get the project name
    return refine.Refine(refine.RefineServer()).get_project_name(project_id)
def export_rows(project_id, **kwargs):
    # return an iterable of parsed rows of a project's data
    return refine.RefineProject(refine.RefineServer(),
                                project_id).export_rows(**kwargs)
def get_reconciliation_services(project_id):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).get_reconciliation_services()
def compute_facets(project_id, facets=None):
    return refine.RefineProject(refine.RefineServer(),
                                project_id).compute_facets(facets)
def get_reconciliation_service_by_name_or_url(project_id, name):
    return refine.RefineProject(
        refine.RefineServer(),
        project_id).get_reconciliation_service_by_name_or_url(name)