Skip to content

Commit 13fe8ad

Browse files
author
Guillim
committed
Merge branch 'master' of https://github.com/chakki-works/doccano into authentification and resolves the two little conflicts
2 parents d59a512 + 4883934 commit 13fe8ad

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+551
-321
lines changed

.coveragerc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ omit =
55
app/server/migrations/*
66
app/server/templatetags/*
77
app/server/tests/*
8+
app/api/migrations/*
9+
app/api/tests/*
810
app/authentification/tests/*
911
app/authentification/templatetags/*
1012

Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,21 @@ RUN cd /doccano \
2929

3030
FROM python:${PYTHON_VERSION}-slim AS runtime
3131

32+
RUN useradd -ms /bin/sh doccano
33+
3234
COPY --from=builder /deps /deps
3335
RUN pip install --no-cache-dir /deps/*.whl
3436

35-
COPY --from=cleaner /doccano /doccano
37+
COPY --from=cleaner --chown=doccano:doccano /doccano /doccano
3638

3739
ENV DEBUG="True"
3840
ENV SECRET_KEY="change-me-in-production"
39-
ENV PORT="80"
41+
ENV PORT="8000"
4042
ENV WORKERS="2"
4143
ENV GOOGLE_TRACKING_ID=""
4244
ENV AZURE_APPINSIGHTS_IKEY=""
4345

46+
USER doccano
4447
WORKDIR /doccano
4548
EXPOSE ${PORT}
4649

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ docker pull chakkiworks/doccano
9595
First we need to install the dependencies. Run the following commands:
9696

9797
```bash
98+
sudo apt-get install libpq-dev
9899
pip install -r requirements.txt
99100
cd app
100101
```
@@ -129,7 +130,7 @@ Depending on your installation method, there are two options:
129130
First, run a Docker container:
130131

131132
```bash
132-
docker run -d --name doccano -p 8000:80 chakkiworks/doccano
133+
docker run -d --name doccano -p 8000:8000 chakkiworks/doccano
133134
```
134135

135136
Then, execute `create-admin.sh` script for creating a superuser.

app/api/__init__.py

Whitespace-only changes.

app/api/admin.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from django.contrib import admin
2+
3+
from .models import Label, Document, Project
4+
from .models import DocumentAnnotation, SequenceAnnotation, Seq2seqAnnotation
5+
from .models import TextClassificationProject, SequenceLabelingProject, Seq2seqProject
6+
7+
8+
class LabelAdmin(admin.ModelAdmin):
9+
list_display = ('text', 'project', 'text_color', 'background_color')
10+
ordering = ('project',)
11+
search_fields = ('project',)
12+
13+
14+
class DocumentAdmin(admin.ModelAdmin):
15+
list_display = ('text', 'project', 'meta')
16+
ordering = ('project',)
17+
search_fields = ('project',)
18+
19+
20+
class ProjectAdmin(admin.ModelAdmin):
21+
list_display = ('name', 'description', 'project_type', 'randomize_document_order')
22+
ordering = ('project_type',)
23+
search_fields = ('name',)
24+
25+
26+
class SequenceAnnotationAdmin(admin.ModelAdmin):
27+
list_display = ('document', 'label', 'start_offset', 'user')
28+
ordering = ('document',)
29+
search_fields = ('document',)
30+
31+
32+
class DocumentAnnotationAdmin(admin.ModelAdmin):
33+
list_display = ('document', 'label', 'user')
34+
ordering = ('document',)
35+
search_fields = ('document',)
36+
37+
38+
class Seq2seqAnnotationAdmin(admin.ModelAdmin):
39+
list_display = ('document', 'text', 'user')
40+
ordering = ('document',)
41+
search_fields = ('document',)
42+
43+
44+
admin.site.register(DocumentAnnotation, DocumentAnnotationAdmin)
45+
admin.site.register(SequenceAnnotation, SequenceAnnotationAdmin)
46+
admin.site.register(Seq2seqAnnotation, Seq2seqAnnotationAdmin)
47+
admin.site.register(Label, LabelAdmin)
48+
admin.site.register(Document, DocumentAdmin)
49+
admin.site.register(Project, ProjectAdmin)
50+
admin.site.register(TextClassificationProject, ProjectAdmin)
51+
admin.site.register(SequenceLabelingProject, ProjectAdmin)
52+
admin.site.register(Seq2seqProject, ProjectAdmin)

app/api/apps.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ApiConfig(AppConfig):
5+
name = 'api'
File renamed without changes.

app/server/filters.py renamed to app/api/filters.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.db.models import Count, Q
22
from django_filters.rest_framework import FilterSet, BooleanFilter
3+
34
from .models import Document
45

56

app/server/migrations/0001_initial.py renamed to app/api/migrations/0001_initial.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 2.1.7 on 2019-03-31 12:43
1+
# Generated by Django 2.1.7 on 2019-06-21 06:05
22

33
from django.conf import settings
44
from django.db import migrations, models
@@ -33,7 +33,7 @@ class Migration(migrations.Migration):
3333
('manual', models.BooleanField(default=False)),
3434
('created_at', models.DateTimeField(auto_now_add=True)),
3535
('updated_at', models.DateTimeField(auto_now=True)),
36-
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='doc_annotations', to='server.Document')),
36+
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='doc_annotations', to='api.Document')),
3737
],
3838
),
3939
migrations.CreateModel(
@@ -59,6 +59,7 @@ class Migration(migrations.Migration):
5959
('created_at', models.DateTimeField(auto_now_add=True)),
6060
('updated_at', models.DateTimeField(auto_now=True)),
6161
('project_type', models.CharField(choices=[('DocumentClassification', 'document classification'), ('SequenceLabeling', 'sequence labeling'), ('Seq2seq', 'sequence to sequence')], max_length=30)),
62+
('randomize_document_order', models.BooleanField(default=False)),
6263
],
6364
options={
6465
'abstract': False,
@@ -74,7 +75,7 @@ class Migration(migrations.Migration):
7475
('created_at', models.DateTimeField(auto_now_add=True)),
7576
('updated_at', models.DateTimeField(auto_now=True)),
7677
('text', models.TextField()),
77-
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='seq2seq_annotations', to='server.Document')),
78+
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='seq2seq_annotations', to='api.Document')),
7879
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
7980
],
8081
),
@@ -88,48 +89,48 @@ class Migration(migrations.Migration):
8889
('updated_at', models.DateTimeField(auto_now=True)),
8990
('start_offset', models.IntegerField()),
9091
('end_offset', models.IntegerField()),
91-
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='seq_annotations', to='server.Document')),
92-
('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='server.Label')),
92+
('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='seq_annotations', to='api.Document')),
93+
('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.Label')),
9394
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
9495
],
9596
),
9697
migrations.CreateModel(
9798
name='Seq2seqProject',
9899
fields=[
99-
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='server.Project')),
100+
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='api.Project')),
100101
],
101102
options={
102103
'abstract': False,
103104
'base_manager_name': 'objects',
104105
},
105-
bases=('server.project',),
106+
bases=('api.project',),
106107
),
107108
migrations.CreateModel(
108109
name='SequenceLabelingProject',
109110
fields=[
110-
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='server.Project')),
111+
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='api.Project')),
111112
],
112113
options={
113114
'abstract': False,
114115
'base_manager_name': 'objects',
115116
},
116-
bases=('server.project',),
117+
bases=('api.project',),
117118
),
118119
migrations.CreateModel(
119120
name='TextClassificationProject',
120121
fields=[
121-
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='server.Project')),
122+
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='api.Project')),
122123
],
123124
options={
124125
'abstract': False,
125126
'base_manager_name': 'objects',
126127
},
127-
bases=('server.project',),
128+
bases=('api.project',),
128129
),
129130
migrations.AddField(
130131
model_name='project',
131132
name='polymorphic_ctype',
132-
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_server.project_set+', to='contenttypes.ContentType'),
133+
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_api.project_set+', to='contenttypes.ContentType'),
133134
),
134135
migrations.AddField(
135136
model_name='project',
@@ -139,12 +140,12 @@ class Migration(migrations.Migration):
139140
migrations.AddField(
140141
model_name='label',
141142
name='project',
142-
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='server.Project'),
143+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='api.Project'),
143144
),
144145
migrations.AddField(
145146
model_name='documentannotation',
146147
name='label',
147-
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='server.Label'),
148+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.Label'),
148149
),
149150
migrations.AddField(
150151
model_name='documentannotation',
@@ -154,7 +155,7 @@ class Migration(migrations.Migration):
154155
migrations.AddField(
155156
model_name='document',
156157
name='project',
157-
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='server.Project'),
158+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='api.Project'),
158159
),
159160
migrations.AlterUniqueTogether(
160161
name='sequenceannotation',
@@ -166,7 +167,7 @@ class Migration(migrations.Migration):
166167
),
167168
migrations.AlterUniqueTogether(
168169
name='label',
169-
unique_together={('project', 'prefix_key', 'suffix_key'), ('project', 'text')},
170+
unique_together={('project', 'text'), ('project', 'prefix_key', 'suffix_key')},
170171
),
171172
migrations.AlterUniqueTogether(
172173
name='documentannotation',
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 2.1.7 on 2019-06-26 13:24
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('api', '0001_initial'),
13+
]
14+
15+
operations = [
16+
migrations.AddField(
17+
model_name='document',
18+
name='annotations_approved_by',
19+
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
20+
),
21+
]

0 commit comments

Comments
 (0)