예제 #1
0
def prepare():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')

    # get package by name or id
    context = {'model': model, 'user': c.user}
    ckanPackage = logic.get_action('package_show')(context, {'id': package_id})

    if ckanPackage == None:
        raise Exception('Invalid package ID')

    force = request.params.get('force')
    clean = request.params.get('clean')
    if force == None:
        force = False

    # remove old unused packages
    workspace.clean(current_package_id=package_id)

    if clean == "true":
        workspace.cleanPackage(ckanPackage.get("id"))

    result = workspace.prepare(ckanPackage.get("id"), force)

    if clean == "true":
        result['cleaned'] = True

    return jsonStringify(result)
예제 #2
0
def process():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')
    hasAccess(package_id)

    if hasAppliedDoi(package_id):
        return {'error':True, 'message':'Cannot edit resource of package with applied DOI'}

    sheet_id = request.params.get('sheet_id')
    resource_id = request.params.get('resource_id')
    ids = request.params.get('resource_ids')

    if sheet_id == "":
        sheet_id = None

    try:
        options = json.loads(request.params.get('options'))
    except:
        options = {}

    # option, if a resource id and a datasheet id are passed, then the full 'merged' view will be return

    # only allow specified options
    safeOptions = {}
    for option in parseOptions:
        if option in options:
            safeOptions[option] = options[option]

    # see if we are editing multiple files or just one
    result = []
    if ids is not None:
        ids = json.loads(ids)
        for resource_id in ids:
            workspace.prepareFile(package_id, resource_id, sheet_id, safeOptions)
            result.append(query.getResource(resource_id))
    else:
        workspace.prepareFile(package_id, resource_id, sheet_id, safeOptions)
        result = query.getResource(resource_id, sheet_id)

    # update the dataset, so the metadata timestamp changes
    context = {'model': model, 'user': c.user}
    pkg = logic.get_action('package_show')(context, {'id': package_id})

    # use this counter to poke the dataset.  This will update the last modified timestamps
    # required for 'updated since last pushed UI'
    resourceUpdateCount = utils.getPackageExtra('resourceUpdateCount', pkg)
    if resourceUpdateCount is None:
        resourceUpdateCount = 1
    else:
        resourceUpdateCount = int(resourceUpdateCount) + 1
    utils.setPackageExtra('resourceUpdateCount', resourceUpdateCount, pkg)
    pkg = logic.get_action('package_update')(context, pkg)

    result = {
        'metadata_modified' : pkg.get('metadata_modified'),
        'result' : result
    }

    return jsonStringify(result)
예제 #3
0
def suggestAttributeName():
    response.headers["Content-Type"] = "application/json"

    name = request.params.get('name')
    if name is None:
        name = ""

    return jsonStringify(top.suggest(name))
예제 #4
0
def suggestGCMD():
    response.headers["Content-Type"] = "application/json"

    query = request.params.get('query')
    if query is None:
        query = ""

    return jsonStringify(gcmd.suggest(query))
예제 #5
0
def get():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')
    resource_id = request.params.get('resource_id')
    sheet_id = request.params.get('sheet_id')

    return jsonStringify(query.get(package_id, resource_id, sheet_id, _getIndex(), showProcessInfo=True))
예제 #6
0
def get():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')

    # get package by name or id
    context = {'model': model, 'user': c.user}
    ckanPackage = logic.get_action('package_show')(context, {'id': package_id})

    return jsonStringify(workspaceQuery.get(ckanPackage.get("id")))
예제 #7
0
def getSpectraCount():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')
    resource_id = request.params.get('resource_id')
    sheet_id = request.params.get('sheet_id')

    if sheet_id == "":
        sheet_id = None

    return jsonStringify(query.total(package_id, resource_id, sheet_id))
예제 #8
0
def getMetadataChunk():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')
    resource_id = request.params.get('resource_id')
    sheet_id = request.params.get('sheet_id')

    if sheet_id == "":
        sheet_id = None

    return jsonStringify(query.getMetadataChunk(package_id, resource_id, sheet_id, _getIndex()))
예제 #9
0
def deleteMany():
    response.headers["Content-Type"] = "application/json"

    params = utils.get_request_data(request)
    ids = params.get('ids')

    resp = []

    for id in ids:
        resp.append(_delete({'id': id}))

    return jsonStringify(resp)
예제 #10
0
def get():
    response.headers["Content-Type"] = "application/json"

    pid = request.params.get('package_id')
    rid = request.params.get('resource_id')
    sid = request.params.get('sheet_id')

    if sid == "":
        sid = None

    hasAccess(pid)

    return jsonStringify(query.getResource(rid, sid))
예제 #11
0
def suggestOverview():
    response.headers["Content-Type"] = "application/json"

    params = {}
    try:
        keys = request.POST.keys()
        if 'names' in keys:
            params['names'] = request.POST['names']
    except Exception as e:
        params = {'names': request.params.get('names')}

    if params.get('names') is None:
        raise Exception('Name list not provided')

    return jsonStringify(top.overview(json.loads(params.get('names'))))
예제 #12
0
def verifyWorkspace(collections):
    if not isAdmin():
        raise Exception('Nope.')

    packages = collections.get('package').find({},{"packageId":1,"prepared":1,"lastTouched":1})
    packageInfo = {}
    ids = []
    repeatPackages = []
    pCount = 0
    for package in packages:
        packageInfo[package.get("packageId")] = {
            "prepared" : package.get("prepared"),
            "lastTouched" : package.get("lastTouched"),
            "workspaceSpectra" : collections.get('spectra').count({"packageId": package.get("packageId")})
        }

        if package.get("packageId") in ids:
            repeatPackages.append(package.get("packageId"))
        else:
            pCount += 1
            ids.append(package.get("packageId"))

    resources = collections.get('resource').find({},{"resourceId":1,"sheetId": 1})
    ids = []
    repeatResources = []
    rCount = 0
    for resource in resources:
        id = "%s %s" % (resource.get("resourceId"), resource.get("sheetId"))
        if id in ids:
            repeatResources.append(id)
        else:
            rCount += 1
            ids.append(id)

    return jsonStringify({
        "packageCount" : pCount,
        "resourceCount" : rCount,
        "spectraCount" : collections.get('spectra').count({"type": "data"}),
        "metadataCount" : collections.get('spectra').count({"type": "metadata"}),
        "repeats" : {
            "resources" : repeatResources,
            "packages" : repeatPackages
        },
        "packageInfo" : packageInfo
    })
예제 #13
0
def pushToSearch():
    response.headers["Content-Type"] = "application/json"

    package_id = request.params.get('package_id')
    email = request.params.get('email')
    if email is None:
        email = "false"

    context = {'model': model, 'user': c.user}
    ckanPackage = logic.get_action('package_show')(context, {"id": package_id})

    if email == True or email.lower() == "true":
        email = True
    else:
        email = False

    push = Push()

    return jsonStringify(push.run(ckanPackage, email, c.userobj.email, c.userobj.display_name))
예제 #14
0
def fixUnits():
    if not isAdmin():
        raise Exception('Nope.')

    return jsonStringify(runFixUnits())
예제 #15
0
def upgrade():
    if not isAdmin():
        raise Exception('Nope.')

    return jsonStringify(runUpgrade())