Ejemplo n.º 1
0
def get_batched(context, portal_type=None, uid=None, endpoint=None, **kw):
    """Get batched results
    """
    # TODO: to move to baobab lims jsonapi -----
    pm = getToolByName(context, 'portal_membership')
    roles = pm.getAuthenticatedMember().getRoles()
    if 'EMS' in roles or uid == "allowSharing":
        uid = None
        if portal_type == 'Sample':
            kw['object_provides'] = ISharableSample.__identifier__
            req.get_request().form["catalog"] = "portal_catalog"
        else:
            raise Unauthorized(
                "You don't have access permission to {}".format(portal_type))

    # TODO: ------
    # fetch the catalog results
    results = get_search_results(portal_type=portal_type, uid=uid, **kw)

    # fetch the batch params from the request
    size = req.get_batch_size()
    start = req.get_batch_start()

    # check for existing complete flag
    complete = req.get_complete(default=_marker)
    if complete is _marker:
        # if the uid is given, get the complete information set
        complete = uid and True or False

    # return a batched record
    return get_batch(results,
                     size,
                     start,
                     endpoint=endpoint,
                     complete=complete)
Ejemplo n.º 2
0
def create_sample_type(container, portal_type, **data):
    """
    create a sample type
    :param container:
    :param portal_type
    :param data:
    :return: sample type object
    """

    container = get_object(container)
    request = req.get_request()

    retention_days = int(data.pop('RetentionDays', '0'))
    retention_hours = int(data.pop('RetentionHours', '0'))
    retention_minutes = int(data.pop('RetentionMinutes', '0'))

    retention_period = {
        'days': retention_days,
        'hours': retention_hours,
        'minutes': retention_minutes
    }

    data['RetentionPeriod'] = retention_period

    values = {
        "title": data.get('title', ''),
        "description": data.get("description", ""),
        "RetentionPeriod": retention_period,
        "Hazardous": data.get("Hazardous"),
        "Prefix": data.get('Prefix'),
        "MinimumVolume": data.get('MinimumVolume'),
    }

    return create_smp_type(container, request, values)
Ejemplo n.º 3
0
def get_batched(context, portal_type=None, uid=None, endpoint=None, **kw):
    """Get batched results
    """
    # TODO: to move to baobab lims jsonapi -----
    pm = getToolByName(context, 'portal_membership')
    roles = pm.getAuthenticatedMember().getRoles()
    if 'EMS' in roles or uid == "allowSharing":
        uid = None
        if portal_type == 'Sample':
            kw['object_provides'] = ISharableSample.__identifier__
            req.get_request().form["catalog"] = "portal_catalog"
        else:
            raise Unauthorized("You don't have access permission to {}".format(portal_type))

    # TODO: ------
    # fetch the catalog results
    results = get_search_results(portal_type=portal_type, uid=uid, **kw)

    # fetch the batch params from the request
    size = req.get_batch_size()
    start = req.get_batch_start()

    # check for existing complete flag
    complete = req.get_complete(default=_marker)
    if complete is _marker:
        # if the uid is given, get the complete information set
        complete = uid and True or False

    # return a batched record
    return get_batch(results, size, start, endpoint=endpoint,
                     complete=complete)
Ejemplo n.º 4
0
 def make_prev_url(self):
     if self.batch.previous is not None:
         return None
     request = req.get_request()
     params = request.form
     params["b_start"] = max(self.batch.numpages - 2, 0) * self.batch.size
     return "%s?%s" % (request.URL, urllib.urlencode(params))
Ejemplo n.º 5
0
 def make_next_url(self):
     if self.batch.next is not None:
         return None
     request = req.get_request()
     params = request.form
     params["b_start"] = self.batch.numpages * self.batch.size
     return "%s?%s" % (request.URL, urllib.urlencode(params))
Ejemplo n.º 6
0
 def make_next_url(self):
     if not self.batch.has_next:
         return None
     request = req.get_request()
     params = request.form
     params["b_start"] = self.batch.pagenumber * self.batch.pagesize
     return "%s?%s" % (request.URL, urllib.urlencode(params))
Ejemplo n.º 7
0
 def make_prev_url(self):
     if not self.batch.has_previous:
         return None
     request = req.get_request()
     params = request.form
     pagesize = self.batch.pagesize
     pagenumber = self.batch.pagenumber
     params["b_start"] = max(pagenumber - 2, 0) * pagesize
     return "%s?%s" % (request.URL, urllib.urlencode(params))
Ejemplo n.º 8
0
def create_analysisrequest(container, **data):
    """Create a minimun viable AnalysisRequest

    :param container: A single folderish catalog brain or content object
    :type container: ATContentType/DexterityContentType/CatalogBrain
    """
    container = get_object(container)
    request = req.get_request()
    # we need to resolve the SampleType to a full object
    sample_type = data.get("SampleType", None)
    if sample_type is None:
        fail(400, "Please provide a SampleType")

    # TODO We should handle the same values as in the DataManager for this field
    #      (UID, path, objects, dictionaries ...)
    results = search(portal_type="SampleType", title=sample_type)

    values = {
        "Analyses": data.get("Analyses", []),
        "SampleType": results and get_object(results[0]) or None,
    }

    return create_ar(container, request, values)
Ejemplo n.º 9
0
def create_analysisrequest(container, **data):
    """Create a minimun viable AnalysisRequest

    :param container: A single folderish catalog brain or content object
    :type container: ATContentType/DexterityContentType/CatalogBrain
    """
    container = get_object(container)
    request = req.get_request()
    # we need to resolve the SampleType to a full object
    sample_type = data.get("SampleType", None)
    if sample_type is None:
        fail(400, "Please provide a SampleType")

    # TODO We should handle the same values as in the DataManager for this field
    #      (UID, path, objects, dictionaries ...)
    results = search(portal_type="SampleType", title=sample_type)

    values = {
        "Analyses": data.get("Analyses", []),
        "SampleType": results and get_object(results[0]) or None,
    }

    return create_ar(container, request, values)
Ejemplo n.º 10
0
def create_sample(container, **data):
    """
    create a sample from here that doesnt go via api create
    :param container:
    :param data:
    :return: Sample object
    """
    container = get_object(container)
    request = req.get_request()
    # we need to resolve the SampleType to a full object
    sample_type = data.get("SampleType", None)
    if sample_type is None:
        fail(400, "Please provide a SampleType")

    # TODO We should handle the same values as in the DataManager for this field
    #      (UID, path, objects, dictionaries ...)
    sample_type_results = search(portal_type="SampleType", title=sample_type)
    if not sample_type_results:
        sample_type_results = search(portal_type="SampleType", uid=sample_type)

    # StorageLocation
    storage_location = data.get("StorageLocation", None)
    if storage_location is None:
        fail(400, "Please provide a StorageLocation")

    linked_sample_list = search(portal_type="Sample",
                                title=data.get('LinkedSample', ''))
    linked_sample = linked_sample_list and linked_sample_list[0].getObject(
    ) or None

    try:
        volume = str(data.get('Volume'))
        float_volume = float(volume)
        if not float_volume:
            fail(400, "Please provide a correct Volume")
    except:
        raise

    # TODO We should handle the same values as in the DataManager for this field
    #      (UID, path, objects, dictionaries ...)
    storage_location_results = search(portal_type='StoragePosition',
                                      Title=storage_location)
    if not storage_location_results:
        storage_location_results = search(portal_type='StoragePosition',
                                          uid=storage_location)

    # set the values and call the create function
    values = {
        "title":
        data.get('title', ''),
        "description":
        data.get("description", ""),
        "Project":
        container,  #because the container is in fact the project this sample belongs to.
        "AllowSharing":
        data.get('AllowSharing', 0),
        "StorageLocation":
        storage_location_results and get_object(storage_location_results[0])
        or None,
        "SampleType":
        sample_type_results and get_object(sample_type_results[0]) or None,
        "SubjectID":
        data.get("SubjectID", ""),
        "Barcode":
        data.get("Barcode", ""),
        "Volume":
        volume,
        "Unit":
        data.get("Unit", ""),
        "LinkedSample":
        linked_sample,
        "DateCreated":
        data.get("DateCreated", ""),
    }

    api_source = data.get('APISource', None)
    if api_source:
        values['APISource'] = api_source

    return create_smp(container, request, values)