Skip to content

Instantly share code, notes, and snippets.

@glassresistor
Last active May 14, 2019 20:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save glassresistor/019f9549f3c33a84a6f1c04826e7f64e to your computer and use it in GitHub Desktop.
Save glassresistor/019f9549f3c33a84a6f1c04826e7f64e to your computer and use it in GitHub Desktop.
from django.contrib import admin
from django.apps import apps
from bulk_importer import models
BULKABLE_MODELS = []
class BulkableAdmin(admin.ModelAdmin):
readonly_fields = ('created_at', 'updated_at', 'imported_from')
for model in apps.get_models():
if issubclass(
model,
models.BulkableImmutable) and not model._meta.abstract:
BULKABLE_MODELS.append(
'.'.join([
model._meta.app_label,
model._meta.model_name]))
if issubclass(model, models.Bulkable):
admin.site.register(model, BulkableAdmin)
class BulkImportAdmin(admin.ModelAdmin):
pass
admin.site.register(models.BulkImport, BulkImportAdmin)
import bulk_importer.admin as bi_admin
from bulk_importer import views
@pytest.mark.django_db
def test_pandas_views_generator_with_wrong_model(token, mocker):
kwargs = {'app_label': 'bulk_importer',
'model_name': 'examplefortesting', }
url = reverse_lazy('dataframe-api', kwargs=kwargs)
factory = APIRequestFactory()
request = factory.get(url)
force_authenticate(request, user=token.user, token=token)
with mock.patch.object(bi_admin, 'BULKABLE_MODELS', []):
response = views.model_for_pandas_view_generator(
request, 'bulk_importer', 'examplefortesting')
assert response.status_code == 403
from bulk_importer.admin import BULKABLE_MODELS
def model_for_pandas_view_generator(request, app_label, model_name):
if '.'.join([app_label, model_name]) not in BULKABLE_MODELS:
return HttpResponseForbidden()
model = apps.get_model(app_label, model_name) # needs whitelisting
fieldnames = request.GET.getlist('fieldname')
view = get_pandas_view_for_model(model, fieldnames=fieldnames).as_view()
return view(request)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment