parent
da5d5679fe
commit
2418a8f12b
@ -458,10 +458,24 @@ def import_events_from_url(
|
|||||||
from .db_importer import DBImporterEvents
|
from .db_importer import DBImporterEvents
|
||||||
|
|
||||||
if isinstance(urls, list):
|
if isinstance(urls, list):
|
||||||
url = urls[0]
|
if len(urls) > 0 and isinstance(urls[0], list):
|
||||||
is_list = True
|
url = urls[0][0][0]
|
||||||
|
cat = urls[0][0][1]
|
||||||
|
tags = urls[0][0][2]
|
||||||
|
if isinstance(tags, str):
|
||||||
|
tags = [tags]
|
||||||
|
user_id = urls[1]
|
||||||
|
email = urls[2]
|
||||||
|
comments = urls[3]
|
||||||
|
is_tuple = True
|
||||||
|
is_list = False
|
||||||
|
else:
|
||||||
|
url = urls[0]
|
||||||
|
is_list = True
|
||||||
|
is_tuple = False
|
||||||
else:
|
else:
|
||||||
is_list = False
|
is_list = False
|
||||||
|
is_tuple = False
|
||||||
url = urls
|
url = urls
|
||||||
|
|
||||||
with memcache_chromium_lock(self.app.oid) as acquired:
|
with memcache_chromium_lock(self.app.oid) as acquired:
|
||||||
@ -489,7 +503,8 @@ def import_events_from_url(
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
## create loader
|
## create loader
|
||||||
u2e = URL2Events(ChromiumHeadlessDownloader(), single_event=True)
|
self.chromiumDownloader.pause = True
|
||||||
|
u2e = URL2Events(self.chromiumDownloader, single_event=True)
|
||||||
# set default values
|
# set default values
|
||||||
values = {}
|
values = {}
|
||||||
if cat is not None:
|
if cat is not None:
|
||||||
@ -528,7 +543,11 @@ def import_events_from_url(
|
|||||||
logger.error(e)
|
logger.error(e)
|
||||||
close_import_task(self.request.id, False, e, importer)
|
close_import_task(self.request.id, False, e, importer)
|
||||||
|
|
||||||
return urls[1:] if is_list else True
|
return (
|
||||||
|
urls[1:]
|
||||||
|
if is_list
|
||||||
|
else [urls[0][1:], user_id, email, comments] if is_tuple else True
|
||||||
|
)
|
||||||
|
|
||||||
# if chromium is locked, we wait 30 seconds before retrying
|
# if chromium is locked, we wait 30 seconds before retrying
|
||||||
raise self.retry(countdown=30)
|
raise self.retry(countdown=30)
|
||||||
@ -538,22 +557,20 @@ def import_events_from_url(
|
|||||||
def import_events_from_urls(
|
def import_events_from_urls(
|
||||||
self, urls_cat_tags, user_id=None, email=None, comments=None
|
self, urls_cat_tags, user_id=None, email=None, comments=None
|
||||||
):
|
):
|
||||||
for ucat in urls_cat_tags:
|
|
||||||
if ucat is not None:
|
|
||||||
url = None
|
|
||||||
cat = None
|
|
||||||
tags = None
|
|
||||||
if isinstance(ucat, str):
|
|
||||||
url = ucat
|
|
||||||
elif isinstance(ucat, (list, tuple)):
|
|
||||||
url = ucat[0]
|
|
||||||
cat = ucat[1]
|
|
||||||
tags = ucat[2]
|
|
||||||
|
|
||||||
if url is not None:
|
print("ça chaine baby")
|
||||||
import_events_from_url.delay(
|
# run tasks as a chain
|
||||||
url, cat, tags, user_id=user_id, email=email, comments=comments
|
tasks = chain(
|
||||||
)
|
(
|
||||||
|
import_events_from_url.s(
|
||||||
|
[urls_cat_tags, user_id, email, comments], force=True
|
||||||
|
)
|
||||||
|
if i == 0
|
||||||
|
else import_events_from_url.s(force=True)
|
||||||
|
)
|
||||||
|
for i in range(len(urls_cat_tags))
|
||||||
|
)
|
||||||
|
tasks.delay()
|
||||||
|
|
||||||
|
|
||||||
@app.task(base=ChromiumTask, bind=True)
|
@app.task(base=ChromiumTask, bind=True)
|
||||||
|
@ -544,6 +544,25 @@ class BatchImportationForm(Form):
|
|||||||
required=True,
|
required=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
category = ModelChoiceField(
|
||||||
|
label=_("Category"),
|
||||||
|
queryset=Category.objects.all().order_by("name"),
|
||||||
|
help_text=_("Used only if data is html."),
|
||||||
|
initial=None,
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
tags = MultipleChoiceField(
|
||||||
|
label=_("Tags"),
|
||||||
|
initial=None,
|
||||||
|
choices=[],
|
||||||
|
help_text=_("Used only if data is html."),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.fields["tags"].choices = Tag.get_tag_groups(all=True)
|
||||||
|
|
||||||
|
|
||||||
class FixDuplicates(Form):
|
class FixDuplicates(Form):
|
||||||
required_css_class = "required"
|
required_css_class = "required"
|
||||||
|
@ -22,6 +22,9 @@
|
|||||||
d'événements, enregistrer le html de la page (clic droit, enregistrer sous), puis copier le contenu de ce fichier html ci-dessous.
|
d'événements, enregistrer le html de la page (clic droit, enregistrer sous), puis copier le contenu de ce fichier html ci-dessous.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p>
|
||||||
|
Les champs catégorie et étiquettes seront utilisés si on utilise le format html, pour catégoriser tous les événements qui seront importés.
|
||||||
|
</p>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p }}
|
{{ form.as_p }}
|
||||||
@ -30,4 +33,35 @@
|
|||||||
</article>
|
</article>
|
||||||
{% include "agenda_culturel/side-nav.html" with current="manual-import" %}
|
{% include "agenda_culturel/side-nav.html" with current="manual-import" %}
|
||||||
</div>
|
</div>
|
||||||
|
<script src="{% static 'choicejs/choices.min.js' %}"></script>
|
||||||
|
<script>
|
||||||
|
show_firstgroup = {
|
||||||
|
choice(classes, choice) {
|
||||||
|
const i = Choices.defaults.templates.choice.call(this, classes, choice);
|
||||||
|
if (this.first_group !== null && choice.groupId == this.first_group)
|
||||||
|
i.classList.add("visible");
|
||||||
|
return i;
|
||||||
|
},
|
||||||
|
choiceGroup(classes, group) {
|
||||||
|
const g = Choices.defaults.templates.choiceGroup.call(this, classes, group);
|
||||||
|
if (this.first_group === undefined && group.value == "Suggestions")
|
||||||
|
this.first_group = group.id;
|
||||||
|
if (this.first_group !== null && group.id == this.first_group)
|
||||||
|
g.classList.add("visible");
|
||||||
|
return g;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const tags = document.querySelector('#id_tags');
|
||||||
|
const choices_tags = new Choices(tags,
|
||||||
|
{
|
||||||
|
placeholderValue: 'Sélectionner les étiquettes à ajouter',
|
||||||
|
allowHTML: true,
|
||||||
|
delimiter: ',',
|
||||||
|
removeItemButton: true,
|
||||||
|
shouldSort: false,
|
||||||
|
callbackOnCreateTemplates: () => (show_firstgroup)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -97,7 +97,8 @@ def add_import(request):
|
|||||||
)
|
)
|
||||||
# then import events from url
|
# then import events from url
|
||||||
import_events_from_urls.delay(
|
import_events_from_urls.delay(
|
||||||
urls, user_id=request.user.pk if request.user else None
|
[(u, form.data["category"], form.data["tags"]) for u in urls],
|
||||||
|
user_id=request.user.pk if request.user else None,
|
||||||
)
|
)
|
||||||
messages.success(
|
messages.success(
|
||||||
request,
|
request,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user