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))
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")
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")