osis-document's People
Forkers
isabella232osis-document's Issues
On visualizer, the modal id is not unique
Adapt drag-n-drop label given min_files and max_files
Implement #25 first
`upload_to` non configurable
Les fichiers sont actuellement tous enregistrés dans le même dossier et pour cause :
- lors de l'enregistrement, l'endpoint de
RequestUploadView
n'a aucune idée d'où provient le fichier - idem pour l'endpoint de
ConfirmUploadView
TODO
- Reprendre l'attribut
upload_to
de django.FileField et l'ajouter sur osis_document.FileField - S'assurer qu'à l'upload (RequestUpload) le nom original (celui du PC de l'user) est sotcké dans les métadonnées
- Lors du
confirm_upload
et duconfirm_remote_upload
, prendre en paramètre cetupload_to
pour déplacer le fichier au bon endroit (en utilisant le storage django) - Vérifier que c'est toujours le
name
depuis les métadonnées qui est utilisé à l'affichage - Empêcher la modification de l'extension (l'afficher à côté dans le widget ?) et vérifier qu'on ne mettre des caractères indésirable (
/[]
... rester sur du `r'/[0-9][a-z]_-/i')
Afficher un message si l'utilisateur charge le même fichier dans le même champ
2 cas d'usage :
- au sein de la meme page
- l'user affiche la page
- il charge un fichier puis le même fichier
- le navigateur "bloque" puisque le fichier existe déjà au sein de l'
input
- afficher un message d'erreur suite à l'événement JS
- après enregistrement
- l'user affichage la page
- il charge un fichier
- il enregistre
- il ajoute le même fichier après rechargement de la page
- après vérification du md5 en retour du request-upload, afficher un message d'erreur
Rendre le champ de formulaire utilisable dans l'admin
À voir, mais un simple ajout de vue et vue i18n (via un autre widget special pour l'admin) devrait suffire
Remonter une erreur ValidationError lorsque le token expire
Depuis le front, si on dépose un fichier sans enregistrer et qu'on attends 5mn avant d'envoyer la page, on se retrouve avec :
28-12-2022 10:28:42 ERROR Internal Server Error: /api/v1/admission/propositions/doctorate/bf49ee88-17e5-4541-87bf-5e87996803de
Traceback (most recent call last):
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/sebcorbin/.pyenv/versions/3.10.8/lib/python3.10/contextlib.py", line 79, in inner
return func(*args, **kwds)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/sebcorbin/projects/osis/admission/api/views/project.py", line 223, in put
result = message_bus_instance.invoke(CompleterPropositionCommand(**serializer.data))
File "/Users/sebcorbin/projects/osis/infrastructure/utils.py", line 59, in invoke
return self.command_handlers[command.__class__](self, command)
File "/Users/sebcorbin/projects/osis/admission/infrastructure/admission/doctorat/preparation/handlers.py", line 58, in <lambda>
CompleterPropositionCommand: lambda msg_bus, cmd: completer_proposition(
File "/Users/sebcorbin/projects/osis/admission/ddd/admission/doctorat/preparation/use_case/write/completer_proposition_service.py", line 82, in completer_proposition
proposition_repository.save(proposition_candidat)
File "/Users/sebcorbin/projects/osis/admission/infrastructure/admission/doctorat/preparation/repository/proposition.py", line 201, in save
admission, _ = DoctorateAdmission.objects.update_or_create(
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/db/models/query.py", line 613, in update_or_create
obj.save(using=self.db)
File "/Users/sebcorbin/projects/osis/admission/contrib/models/doctorate.py", line 419, in save
super().save(*args, **kwargs)
File "/Users/sebcorbin/projects/osis/admission/contrib/models/base.py", line 116, in save
super().save(*args, **kwargs)
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/db/models/base.py", line 739, in save
self.save_base(using=using, force_insert=force_insert,
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/db/models/base.py", line 776, in save_base
updated = self._save_table(
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/db/models/base.py", line 855, in _save_table
values = [(f, None, (getattr(self, f.attname) if raw else f.pre_save(self, False)))
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/django/db/models/base.py", line 855, in <listcomp>
values = [(f, None, (getattr(self, f.attname) if raw else f.pre_save(self, False)))
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/osis_document/contrib/fields.py", line 72, in pre_save
value = [
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/osis_document/contrib/fields.py", line 73, in <listcomp>
self._confirm_upload(model_instance, token) if isinstance(token, str) else token
File "/Users/sebcorbin/.virtualenvs/osis-3.10/lib/python3.10/site-packages/osis_document/contrib/fields.py", line 83, in _confirm_upload
filename = get_remote_metadata(token)['name']
KeyError: 'name'
Enregistrer automatiquement d'un changement de libellé par l'utilisateur
Problème UI : Si l'utilisateur modifie le libellé mais ne clique pas sur le bouton "Enregistrer" du document, il perd sa modification lors de l'enregistrement du formulaire global.
Proposition :
- Afficher le bouton "Enregistrer" à gauche du libellé
- Enregistrement automatique dès que l'utilisateur quitte le champs
Display drag-n-drop area while max files not reached
- Transmit max_files and min_files from python to Vue
- Display drop zone while max is not reached
Then go onto #26
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.