def handle(self, *args, **options): data = collections.defaultdict(dict) for model in lookuplists.lookuplists(): content_type = ContentType.objects.get_for_model(model) items = [] for item in model.objects.all(): synonyms = [ s.name for s in Synonym.objects.filter(content_type=content_type, object_id=item.id) ] entry = {'name': item.name, 'synonyms': synonyms} if item.code and item.system: entry['coding'] = { 'code': item.code, 'system': item.system } items.append(entry) data[model.__name__.lower()] = items if options.get('many_files', False): self.write_to_many_files(data) else: self._to_json(data) return
def test_includes_subclasses_of_abstract_lookuplists(self): """ make sure we include things that don't directly inherit from lookup lists """ all_lists = list(lookuplists()) self.assertIn(GhostHat, all_lists)
def delete(self): write('Deleting Synonyms') for item in Synonym.objects.all(): item.delete() write('Deleting Lookuplists') for model in lookuplists.lookuplists(): for item in model.objects.all(): item.delete()
def from_component(self, component): # Start with the initial lookuplists.json filename = ffs.Path(LOOKUPLIST_LOCATION.format(component.directory())) self.load(self.from_path(filename)) # then work throught the lookuplists we know about for lookuplist in lookuplists.lookuplists(): path = ffs.Path( os.path.join(component.directory(), 'data', 'lookuplists', '{}.json'.format(lookuplist.get_api_name()))) self.load(self.from_path(path))
def from_component(self, component): # Start with the initial lookuplists.json filename = ffs.Path(LOOKUPLIST_LOCATION.format(component.directory())) self.load(self.from_path(filename)) # then work throught the lookuplists we know about for lookuplist in lookuplists.lookuplists(): path = ffs.Path(os.path.join( component.directory(), 'data', 'lookuplists', '{}.json'.format(lookuplist.get_api_name()) )) self.load(self.from_path(path))
def list(self, request): data = {} subclasses = list(lookuplists.lookuplists()) for model in subclasses: options = list(model.objects.all().values_list("name", flat=True)) data[model.get_api_name()] = options model_to_ct = ContentType.objects.get_for_models(*subclasses) for model, ct in model_to_ct.items(): synonyms = Synonym.objects.filter(content_type=ct).values_list( "name", flat=True) data[model.get_api_name()].extend(synonyms) for name in data: data[name].sort() return json_response(data)
def retrieve(self, request, pk=None): the_list = None for lookuplist in lookuplists.lookuplists(): if lookuplist.get_api_name() == pk: the_list = lookuplist break if the_list: values = list(the_list.objects.all().values_list('name', flat=True)) ct = ContentType.objects.get_for_model(the_list) synonyms = Synonym.objects.filter(content_type=ct).values_list( 'name', flat=True) values += list(synonyms) return json_response(values) return json_response({'error': 'Item does not exist'}, status_code=status.HTTP_404_NOT_FOUND)
def list(self, request): data = {} subclasses = list(lookuplists.lookuplists()) for model in subclasses: options = list(model.objects.all().values_list("name", flat=True)) data[model.get_api_name()] = options model_to_ct = ContentType.objects.get_for_models( *subclasses ) for model, ct in model_to_ct.items(): synonyms = Synonym.objects.filter(content_type=ct).values_list( "name", flat=True ) data[model.get_api_name()].extend(synonyms) for name in data: data[name].sort() return json_response(data)
def retrieve(self, request, pk=None): the_list = None for lookuplist in lookuplists.lookuplists(): if lookuplist.get_api_name() == pk: the_list = lookuplist break if the_list: values = list( the_list.objects.all().values_list('name', flat=True) ) ct = ContentType.objects.get_for_model(the_list) synonyms = Synonym.objects.filter(content_type=ct).values_list( 'name', flat=True ) values += list(synonyms) return json_response(values) return json_response( {'error': 'Item does not exist'}, status_code=status.HTTP_404_NOT_FOUND )
def handle(self, *args, **options): data = collections.defaultdict(dict) for model in lookuplists.lookuplists(): content_type = ContentType.objects.get_for_model(model) items = [] for item in model.objects.all(): synonyms = [s.name for s in Synonym.objects.filter(content_type=content_type, object_id=item.id)] entry = {'name': item.name, 'synonyms': synonyms} if item.code and item.system: entry['coding'] = { 'code' : item.code, 'system': item.system } items.append(entry) data[model.__name__.lower()] = items if options.get('many_files', False): self.write_to_many_files(data) else: self._to_json(data) return
object_class = self.instance.__class__ name = self.cleaned_data["name"] if synonym_exists(object_class, name): raise ValidationError("A synonym of that name already exists") return self.cleaned_data["name"] class OptionAdmin(admin.ModelAdmin): form = LookupListForm ordering = ['name'] search_fields = ['name'] inlines = [SynonymInline] for model in lookuplists(): admin.site.register(model, OptionAdmin) admin.site.register(User, UserProfileAdmin) admin.site.register(models.Patient, PatientAdmin) admin.site.register(models.Episode, EpisodeAdmin) admin.site.register(models.Tagging, TaggingAdmin) for subclass in patient_subrecords(): if not subclass._meta.abstract and not getattr(subclass, "_no_admin", False): admin.site.register(subclass, PatientSubrecordAdmin) for subclass in episode_subrecords(): if not subclass._meta.abstract and not getattr(subclass, "_no_admin", False):
if synonym_exists(object_class, name): raise ValidationError( "A synonym of that name already exists" ) return self.cleaned_data["name"] class OptionAdmin(admin.ModelAdmin): form = LookupListForm ordering = ['name'] search_fields = ['name'] inlines = [SynonymInline] for model in lookuplists(): admin.site.register(model, OptionAdmin) admin.site.register(User, UserProfileAdmin) admin.site.register(models.Patient, PatientAdmin) admin.site.register(models.Episode, EpisodeAdmin) admin.site.register(models.Tagging, TaggingAdmin) for subclass in patient_subrecords(): if not subclass._meta.abstract and not getattr( subclass, "_no_admin", False): admin.site.register(subclass, PatientSubrecordAdmin) for subclass in episode_subrecords(): if not subclass._meta.abstract and not getattr(
def test_ignores_abstract(self): """ ignore models where meta.abstract == true """ all_lists = list(lookuplists()) self.assertNotIn(EtherialHat, all_lists)
def test_lookuplists(self): all_lists = list(lookuplists()) self.assertIn(Hat, all_lists)