Skip to content

Commit

Permalink
improve wq framework integration
Browse files Browse the repository at this point in the history
 - add user filter to source
 - disable background sync
 - properly handle base_url
 - include data_wizard context when querying id choices
  • Loading branch information
sheppard committed Sep 17, 2021
1 parent f4eb124 commit da54e2c
Show file tree
Hide file tree
Showing 14 changed files with 109 additions and 15 deletions.
2 changes: 1 addition & 1 deletion data_wizard/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class Run(models.Model):
content_object = GenericForeignKey()

def __str__(self):
return "Run for %s" % self.content_object
return str(self.content_object)

def get_absolute_url(self):
return reverse('data_wizard:run-detail', kwargs={'pk': self.pk})
Expand Down
1 change: 1 addition & 0 deletions data_wizard/rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ def user_filter(qs, request):
'list', 'detail', 'edit',
'serializers', 'columns', 'ids', 'data', 'auto', 'records',
],
background_sync=False,
postsave=(
'datawizard/{{id}}'
'{{#current_mode}}/{{current_mode}}{{/current_mode}}'
Expand Down
14 changes: 12 additions & 2 deletions data_wizard/sources/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,15 @@
from data_wizard.admin import ImportActionModelAdmin
from .models import FileSource, URLSource

admin.site.register(FileSource, ImportActionModelAdmin)
admin.site.register(URLSource, ImportActionModelAdmin)

class SourceAdmin(ImportActionModelAdmin):
readonly_fields = ('user',)

def save_model(self, request, obj, form, change):
if not change:
obj.user = request.user
super().save_model(request, obj, form, change)


admin.site.register(FileSource, SourceAdmin)
admin.site.register(URLSource, SourceAdmin)
26 changes: 26 additions & 0 deletions data_wizard/sources/migrations/0002_source_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 3.2.7 on 2021-09-15 23:23

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('sources', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='filesource',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='urlsource',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
]
12 changes: 11 additions & 1 deletion data_wizard/sources/models.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
from django.db import models
from django.conf import settings
import os


class FileSource(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=True, blank=True, on_delete=models.PROTECT,
)
name = models.CharField(max_length=255, null=True, blank=True)
file = models.FileField(upload_to='datawizard/')
date = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.name or self.file.name
return self.name or os.path.basename(self.file.name)


class URLSource(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=True, blank=True, on_delete=models.PROTECT,
)
name = models.CharField(max_length=255, null=True, blank=True)
url = models.URLField()
date = models.DateTimeField(auto_now_add=True)
Expand Down
34 changes: 32 additions & 2 deletions data_wizard/sources/rest.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,36 @@
from rest_framework import serializers
from wq.db import rest
from wq.db.rest.serializers import ModelSerializer
from .models import FileSource, URLSource
from ..rest import user_filter


rest.router.register_model(FileSource, fields="__all__")
rest.router.register_model(URLSource, fields="__all__")
class FileSourceSerializer(ModelSerializer):
user = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
model = FileSource
fields = '__all__'


class URLSourceSerializer(ModelSerializer):
user = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
model = FileSource
fields = '__all__'


rest.router.register_model(
FileSource,
serializer=FileSourceSerializer,
background_sync=False,
filter=user_filter,
)

rest.router.register_model(
URLSource,
serializer=URLSourceSerializer,
background_sync=False,
filter=user_filter,
)
2 changes: 1 addition & 1 deletion data_wizard/static/app/js/wizard.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion data_wizard/static/app/js/wizard.js.map

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions data_wizard/static/data_wizard/js/progress-element.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 11 additions & 3 deletions data_wizard/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def auto_import(run, user):


def get_attribute_field(field):
for cname, cfield in field.child.get_fields().items():
for cname, cfield in field.child.fields.items():
if isinstance(cfield, serializers.RelatedField):
return cname, cfield
return None, None
Expand All @@ -163,7 +163,7 @@ def make_list(choices):
def load_fields(serializer, group_name,
label_prefix="", name_prefix="",
attribute_name=None, attribute_choices=None):
fields = serializer.get_fields().items()
fields = serializer.fields.items()
if len(fields) == 1 and isinstance(serializer, NaturalKeySerializer):
is_natkey_lookup = True
else:
Expand Down Expand Up @@ -241,7 +241,15 @@ def load_fields(serializer, group_name,
root_label = Serializer.Meta.model._meta.verbose_name.title()
else:
root_label = run.serializer_label
load_fields(Serializer(), root_label)

serializer = Serializer(
context={
'data_wizard': {
'run': run,
}
}
)
load_fields(serializer, root_label)

field_choices.add(
('Other', '__ignore__', 'Ignore this Column', False, None)
Expand Down
1 change: 1 addition & 0 deletions packages/progress/src/progress.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export class Progress {
}

onNavigate(data) {
this.stop();
if (this.config.onNavigate) {
this.config.onNavigate(data);
}
Expand Down
1 change: 1 addition & 0 deletions packages/wizard/src/components/Progress.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export default function Progress({ url }) {
return (
<>
<LinearProgress
style={{marginTop: 16, marginBottom: 16}}
variant={value === null ? 'indeterminate' : 'determinate'}
value={value}
/>
Expand Down
11 changes: 8 additions & 3 deletions packages/wizard/src/hooks.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useState, useEffect, useMemo } from 'react';
import { Progress } from '@wq/progress';
import { useRenderContext, useModel, useNav } from '@wq/react';
import { useRenderContext, useModel, useNav, useConfig } from '@wq/react';

export function useRunInfo() {
const context = useRenderContext(),
Expand All @@ -17,7 +17,8 @@ export function useProgress(url) {
[status, setStatus] = useState(null),
[error, setError] = useState(false),
[data, setData] = useState(null),
nav = useNav();
nav = useNav(),
config = useConfig();

useEffect(() => {
const updateStatus = (data) => {
Expand Down Expand Up @@ -48,7 +49,11 @@ export function useProgress(url) {
setStatus('' + err);
},
onNavigate(data) {
nav(data.location.slice(1));
const path = data.location.replace(
config.router.base_url + '/',
''
);
nav(path);
},
});
progress.start();
Expand Down
2 changes: 1 addition & 1 deletion packages/wizard/src/views/SourceDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export default function SourceDetail() {
<View />

<SubmitButton icon="wizard">
Start Data Import Wizard
Start Data Wizard
</SubmitButton>
</HorizontalView>
</Form>
Expand Down

0 comments on commit da54e2c

Please sign in to comment.