Skip to content

Commit 1f8ff84

Browse files
authored
Merge pull request #114 from samuelveigarangel/add-params-in-tasks-journal-and-issue
Adiciona paramentros para tarefas de periódico e fascículo
2 parents 2b35786 + 8605f4c commit 1f8ff84

2 files changed

Lines changed: 95 additions & 48 deletions

File tree

markup_doc/sync_api.py

Lines changed: 75 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,27 @@ def build_api_url_core(domain, endpoint, params):
9393
return f"{url}?{query}"
9494

9595

96-
def sync_journals_from_api():
96+
def sync_journals_from_api(
97+
collection_acron=None,
98+
issn_scielo=None,
99+
from_date_updated=None,
100+
):
97101
sync_state = CoreSyncState.get_for_resource(resource="journal")
98-
from_date_updated = sync_state.get_from_date_updated(
99-
settings.CORE_ISSUE_FROM_DATE_CREATED
100-
)
102+
if from_date_updated is None:
103+
from_date_updated = sync_state.get_from_date_updated(
104+
settings.CORE_ISSUE_FROM_DATE_CREATED
105+
)
106+
107+
params = {"from_date_updated": from_date_updated}
108+
if collection_acron:
109+
params["collection"] = collection_acron
110+
if issn_scielo:
111+
params["issn_scielo"] = issn_scielo
112+
101113
url = build_api_url_core(
102114
domain=settings.CORE_API_DOMAIN,
103115
endpoint=settings.CORE_JOURNAL_API_ENDPOINT,
104-
params={
105-
"from_date_updated": from_date_updated
106-
}
116+
params=params,
107117
)
108118
synced_count = 0
109119
skipped_count = 0
@@ -113,20 +123,22 @@ def sync_journals_from_api():
113123
for item in items:
114124
journal = _build_journal_from_api_item(item)
115125
obj, _ = JournalModel.objects.update_or_create(
116-
title=journal.title,
117-
defaults={
118-
"short_title": journal.short_title,
119-
"title_nlm": journal.title_nlm,
120-
"acronym": journal.acronym,
121-
"issn": journal.issn,
122-
"pissn": journal.pissn,
123-
"eissn": journal.eissn,
124-
"pubname": journal.pubname,
125-
},
126+
title=journal.title,
127+
defaults={
128+
"short_title": journal.short_title,
129+
"title_nlm": journal.title_nlm,
130+
"acronym": journal.acronym,
131+
"issn": journal.issn,
132+
"pissn": journal.pissn,
133+
"eissn": journal.eissn,
134+
"pubname": journal.pubname,
135+
},
126136
)
127137
logger.info(f"Journal {obj} completed")
138+
synced_count += 1
128139
max_created = track_max_from_item(max_created, item)
129-
finalize_core_sync_state(sync_state, max_created)
140+
141+
finalize_core_sync_state(sync_state, max_created)
130142
logger.info(
131143
f"Journal sync finished. Synced={synced_count} skipped={skipped_count}"
132144
)
@@ -166,37 +178,56 @@ def build_issue_from_data(item):
166178
return issue_data
167179

168180

169-
def sync_issues_from_api():
181+
def _get_registered_issn_scielo_values(issn_scielo=None):
182+
queryset = JournalModel.objects.exclude(issn__isnull=True).exclude(issn="")
183+
if issn_scielo:
184+
queryset = queryset.filter(issn=issn_scielo)
185+
return queryset.values_list("issn", flat=True).distinct()
186+
187+
188+
def sync_issues_from_api(issn_scielo=None, from_date_updated=None):
170189
sync_state = CoreSyncState.get_for_resource(resource="issue")
171-
from_date_updated = sync_state.get_from_date_updated(
172-
settings.CORE_ISSUE_FROM_DATE_CREATED
173-
)
174-
url = build_api_url_core(
175-
domain=settings.CORE_API_DOMAIN,
176-
endpoint=settings.CORE_ISSUE_API_ENDPOINT,
177-
params={
178-
"from_date_updated": from_date_updated
179-
}
180-
)
190+
if from_date_updated is None:
191+
from_date_updated = sync_state.get_from_date_updated(
192+
settings.CORE_ISSUE_FROM_DATE_CREATED
193+
)
194+
195+
registered_issns = _get_registered_issn_scielo_values(issn_scielo=issn_scielo)
196+
if not registered_issns:
197+
logger.warning(
198+
"Issue sync skipped: no registered journals found"
199+
+ (f" for issn_scielo={issn_scielo}" if issn_scielo else "")
200+
)
201+
return
202+
181203
synced_count = 0
182204
skipped_count = 0
183205
max_created = sync_state.last_updated_at
184206

185-
for items in _iter_api_pages(url, "issues"):
186-
for item in items:
187-
journal = _get_journal_from_issue_data(item)
188-
if not journal:
189-
skipped_count += 1
190-
continue
191-
issue_data = build_issue_from_data(item)
192-
issue_data.update({"journal": journal})
193-
Issue.objects.get_or_create(
194-
**issue_data,
195-
)
196-
synced_count += 1
197-
max_created = track_max_from_item(max_created, item)
198-
finalize_core_sync_state(sync_state, max_created)
207+
for journal_issn in registered_issns:
208+
url = build_api_url_core(
209+
domain=settings.CORE_API_DOMAIN,
210+
endpoint=settings.CORE_ISSUE_API_ENDPOINT,
211+
params={
212+
"from_date_updated": from_date_updated,
213+
"issn_scielo": journal_issn,
214+
},
215+
)
199216

217+
for items in _iter_api_pages(url, f"issues ({journal_issn})"):
218+
for item in items:
219+
journal = _get_journal_from_issue_data(item)
220+
if not journal:
221+
skipped_count += 1
222+
continue
223+
issue_data = build_issue_from_data(item)
224+
issue_data.update({"journal": journal})
225+
Issue.objects.get_or_create(**issue_data)
226+
synced_count += 1
227+
max_created = track_max_from_item(max_created, item)
228+
229+
finalize_core_sync_state(sync_state, max_created)
200230
logger.info(
201-
f"Issue sync finished. from_date_created={from_date_updated} synced={synced_count} skipped={skipped_count}"
231+
f"Issue sync finished. from_date_updated={from_date_updated} "
232+
f"synced={synced_count} skipped={skipped_count}"
202233
)

markup_doc/tasks.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,29 @@ def clean_labels(text):
8383

8484

8585
@celery_app.task()
86-
def task_sync_journals_from_api(user_id=None, collection_acron=None):
87-
sync_journals_from_api()
86+
def task_sync_journals_from_api(
87+
user_id=None,
88+
collection_acron=None,
89+
issn_scielo=None,
90+
from_date_updated=None,
91+
):
92+
sync_journals_from_api(
93+
collection_acron=collection_acron,
94+
issn_scielo=issn_scielo,
95+
from_date_updated=from_date_updated,
96+
)
8897

8998

9099
@celery_app.task()
91-
def task_sync_issues_from_api(user_id=None):
92-
sync_issues_from_api()
100+
def task_sync_issues_from_api(
101+
user_id=None,
102+
issn_scielo=None,
103+
from_date_updated=None,
104+
):
105+
sync_issues_from_api(
106+
issn_scielo=issn_scielo,
107+
from_date_updated=from_date_updated,
108+
)
93109

94110

95111
@celery_app.task()

0 commit comments

Comments
 (0)