Beispiel #1
0
    def test_create_idx_type_model_permissions(self):

        elastic_dict = elastic_factory.get_elastic_settings_with_user_uploads()
        indexKey = 'CP_STATS_UD'
        user_upload_dict = list(elastic_dict[indexKey]['idx_type'].keys())

        indexName = 'CP_STATS_UD'
        if len(user_upload_dict) > 1:
            indexType = user_upload_dict[0]
        else:
            indexType = 'UD-RANDOMTMPTEST'
            elastic_dict = ElasticSettings.attrs().get('IDX')
            idx_type_dict = {}
            idx_type_dict[indexType] = {
                'label': 'testlabel',
                'type': indexType
            }
            elastic_dict['CP_STATS_UD']['idx_type'] = idx_type_dict

        indexTypeModel = indexKey.lower() + elastic_factory.PERMISSION_MODEL_NAME_TYPE_DELIMITER + indexType.lower() + \
            elastic_factory.PERMISSION_MODEL_TYPE_SUFFIX

        elastic_factory.create_idx_type_model_permissions(
            self.user,
            elastic_dict=elastic_dict,
            indexKey=indexName,
            indexTypeKey=indexType)

        # check if model exists
        db_models = elastic_factory.get_db_models(
            app_label=elastic_factory.PERMISSION_MODEL_APP_NAME, existing=True)
        self.assertIn(indexTypeModel, db_models,
                      ' model exists for ' + indexType)

        # check if permission exists
        content_type = None
        try:
            content_type = ContentType.objects.get(
                model=indexTypeModel.lower(),
                app_label=settings.ELASTIC_PERMISSION_MODEL_APP_NAME)
        except:
            pass

        permissions = None
        perm_code_name = 'can_read_' + indexTypeModel.lower()

        if content_type:
            permissions = Permission.objects.filter(content_type=content_type)
            self.assertIn(perm_code_name,
                          [perm.codename for perm in permissions],
                          'perm present')
            # Request new instance of User
            user = get_object_or_404(User, pk=self.user.id)
            # Permission cache is repopulated from the database
            self.assertTrue(
                user.has_perm(settings.ELASTIC_PERMISSION_MODEL_APP_NAME +
                              '.' + perm_code_name))
    def test_create_idx_type_model_permissions(self):
        elastic_settings_before = ElasticSettings.attrs().get('IDX')
        user_types_before = elastic_settings_before['CP_STATS_UD']['idx_type']
        self.assertEqual({}, user_types_before, 'CP_STATS_UD idx_type is empty')

        idx = "cp:hg19_userdata_bed"
        new_upload_file = "tmp_newly_uploaded_file"
        idx_type = new_upload_file

        os.system("curl -XPUT "+ElasticSettings.url()+"/"+idx+"/_mapping/"+idx_type+" -d '{\"" +
                  idx_type + "\":{ \"properties\" : {\"message\" : {\"type\" : \"string\", \"store\" : true } } }}'")

        os.system("curl -XPUT "+ElasticSettings.url()+"/"+idx+"/"+idx_type+"/_meta -d '{\"label\": \"" +
                  new_upload_file + "\", \"owner\": \""+self.user.username+"\", \"uploaded\": \"" +
                  str(timezone.now())+"\"}'")

        elastic_settings_after = elastic_factory.create_idx_type_model_permissions(self.user,
                                                                                   indexKey='CP_STATS_UD',
                                                                                   indexTypeKey='UD-'+new_upload_file.upper(),  # @IgnorePep8
                                                                                   new_upload_file="tmp_newly_uploaded_file")  # @IgnorePep8

        # elastic_settings_after = elastic_factory.get_elastic_settings_with_user_uploads(elastic_settings_before)
        user_types_after = elastic_settings_after['CP_STATS_UD']['idx_type']
        self.assertTrue(len(user_types_after) > 0, "Has user idx_types ")
        self.assertTrue('UD-TMP_NEWLY_UPLOADED_FILE' in user_types_after)
        self.assertEqual(user_types_after['UD-TMP_NEWLY_UPLOADED_FILE']['type'], 'tmp_newly_uploaded_file')
    def test_create_idx_type_model_permissions(self):
        elastic_settings_before = ElasticSettings.attrs().get('IDX')
        user_types_before = elastic_settings_before['CP_STATS_UD']['idx_type']
        self.assertEqual({}, user_types_before,
                         'CP_STATS_UD idx_type is empty')

        idx = "cp:hg19_userdata_bed"
        new_upload_file = "tmp_newly_uploaded_file"
        idx_type = new_upload_file

        os.system(
            "curl -XPUT " + ElasticSettings.url() + "/" + idx + "/_mapping/" +
            idx_type + " -d '{\"" + idx_type +
            "\":{ \"properties\" : {\"message\" : {\"type\" : \"string\", \"store\" : true } } }}'"
        )

        os.system("curl -XPUT " + ElasticSettings.url() + "/" + idx + "/" +
                  idx_type + "/_meta -d '{\"label\": \"" + new_upload_file +
                  "\", \"owner\": \"" + self.user.username +
                  "\", \"uploaded\": \"" + str(timezone.now()) + "\"}'")

        elastic_settings_after = elastic_factory.create_idx_type_model_permissions(
            self.user,
            indexKey='CP_STATS_UD',
            indexTypeKey='UD-' + new_upload_file.upper(),  # @IgnorePep8
            new_upload_file="tmp_newly_uploaded_file")  # @IgnorePep8

        # elastic_settings_after = elastic_factory.get_elastic_settings_with_user_uploads(elastic_settings_before)
        user_types_after = elastic_settings_after['CP_STATS_UD']['idx_type']
        self.assertTrue(len(user_types_after) > 0, "Has user idx_types ")
        self.assertTrue('UD-TMP_NEWLY_UPLOADED_FILE' in user_types_after)
        self.assertEqual(
            user_types_after['UD-TMP_NEWLY_UPLOADED_FILE']['type'],
            'tmp_newly_uploaded_file')
    def test_create_idx_type_model_permissions(self):

        elastic_dict = elastic_factory.get_elastic_settings_with_user_uploads()
        indexKey = 'CP_STATS_UD'
        user_upload_dict = list(elastic_dict[indexKey]['idx_type'].keys())

        indexName = 'CP_STATS_UD'
        if len(user_upload_dict) > 1:
            indexType = user_upload_dict[0]
        else:
            indexType = 'UD-RANDOMTMPTEST'
            elastic_dict = ElasticSettings.attrs().get('IDX')
            idx_type_dict = {}
            idx_type_dict[indexType] = {'label': 'testlabel', 'type': indexType}
            elastic_dict['CP_STATS_UD']['idx_type'] = idx_type_dict

        indexTypeModel = indexKey.lower() + elastic_factory.PERMISSION_MODEL_NAME_TYPE_DELIMITER + indexType.lower() + \
            elastic_factory.PERMISSION_MODEL_TYPE_SUFFIX

        elastic_factory.create_idx_type_model_permissions(self.user, elastic_dict=elastic_dict,
                                                          indexKey=indexName,
                                                          indexTypeKey=indexType)

        # check if model exists
        db_models = elastic_factory.get_db_models(app_label=elastic_factory.PERMISSION_MODEL_APP_NAME, existing=True)
        self.assertIn(indexTypeModel, db_models,
                      ' model exists for ' + indexType)

        # check if permission exists
        content_type = None
        try:
            content_type = ContentType.objects.get(model=indexTypeModel.lower(),
                                                   app_label=settings.ELASTIC_PERMISSION_MODEL_APP_NAME)
        except:
            pass

        permissions = None
        perm_code_name = 'can_read_' + indexTypeModel.lower()

        if content_type:
            permissions = Permission.objects.filter(content_type=content_type)
            self.assertIn(perm_code_name, [perm.codename for perm in permissions], 'perm present')
            # Request new instance of User
            user = get_object_or_404(User, pk=self.user.id)
            # Permission cache is repopulated from the database
            self.assertTrue(user.has_perm(settings.ELASTIC_PERMISSION_MODEL_APP_NAME + '.' + perm_code_name))
Beispiel #5
0
def chicpeaFileUpload(request, url):
    filesDict = request.FILES
    user = request.user
    files = filesDict.getlist("files[]")
    snpTracks = list()
    idx = ElasticSettings.idx('CP_STATS_UD')

    for f in files:
        line = f.readlines()[0].decode()
        if line.startswith("#"):
            line = f.readlines()[1].decode()

        parts = re.split("\t", line)
        if re.match("\s", line):
            parts = re.split("\s", line)

        if len(parts) != 5:
            logger.warn("WARNING: unexpected number of columns ("+len(parts)+"): "+line)
            continue

        f.seek(0)
        bedFile = NamedTemporaryFile(delete=False)
        bedFile.write(f.read())
        bedFile.close()
        idx_type = os.path.basename(bedFile.name)
        snpTracks.append({"value": "ud-"+idx_type, "text":  f.name})
        os.system("curl -XDELETE '"+ElasticSettings.url()+"/"+idx+"/"+idx_type+"'")
        call_command("index_search", indexName=idx, indexType=idx_type, indexBED=bedFile.name)
        logger.debug("index_search --indexName "+idx+" --indexType "+idx_type+" --indexBED "+bedFile.name)
        os.system("curl -XPUT "+ElasticSettings.url()+"/"+idx+"/"+idx_type+"/_meta -d '{\"label\": \"" + f.name +
                  "\", \"owner\": \""+user.username+"\", \"uploaded\": \""+str(timezone.now())+"\"}'")
        bedFile.delete
        elastic_factory.create_idx_type_model_permissions(user, indexKey='CP_STATS_UD',
                                                          indexTypeKey='UD-'+idx_type.upper())

    context = dict()
    context['userSNPTracks'] = snpTracks

    return HttpResponse(json.dumps(context), content_type="application/json")
Beispiel #6
0
def chicpeaFileUpload(request, url):
    filesDict = request.FILES
    user = request.user
    files = filesDict.getlist("files[]")
    snpTracks = list()
    idx = ElasticSettings.idx('CP_STATS_UD')

    for f in files:
        line = f.readlines()[0].decode()
        if line.startswith("#"):
            line = f.readlines()[1].decode()

        parts = re.split("\t", line)
        if re.match("\s", line):
            parts = re.split("\s", line)

        if len(parts) != 5:
            logger.warn("WARNING: unexpected number of columns ("+len(parts)+"): "+line)
            continue

        f.seek(0)
        bedFile = NamedTemporaryFile(delete=False)
        bedFile.write(f.read())
        bedFile.close()
        idx_type = os.path.basename(bedFile.name)
        snpTracks.append({"value": "ud-"+idx_type, "text":  f.name})
        os.system("curl -XDELETE '"+ElasticSettings.url()+"/"+idx+"/"+idx_type+"'")
        call_command("index_search", indexName=idx, indexType=idx_type, indexBED=bedFile.name)
        logger.debug("index_search --indexName "+idx+" --indexType "+idx_type+" --indexBED "+bedFile.name)
        os.system("curl -XPUT "+ElasticSettings.url()+"/"+idx+"/"+idx_type+"/_meta -d '{\"label\": \"" + f.name +
                  "\", \"owner\": \""+user.username+"\", \"uploaded\": \""+str(timezone.now())+"\"}'")
        bedFile.delete
        elastic_factory.create_idx_type_model_permissions(user, indexKey='CP_STATS_UD',
                                                          indexTypeKey='UD-'+idx_type.upper())

    context = dict()
    context['userSNPTracks'] = snpTracks

    return HttpResponse(json.dumps(context), content_type="application/json")