Skip to content

Commit f1aefea

Browse files
Merge pull request #1760 from IFRCGo/feature/appealdocs-from-api
Adding type and description to appealdocuments
2 parents 4091449 + b73396d commit f1aefea

File tree

4 files changed

+89
-26
lines changed

4 files changed

+89
-26
lines changed

api/management/commands/ingest_appealdocs.py

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
GEC_CODES = GECCode.objects.select_related('country').all()
1919
APPEAL_DOCUMENT_TYPES = AppealDocumentType.objects.all() # used only for read in appealdocument locations from api
2020

21+
PUBLIC_SOURCE = 'https://go-api.ifrc.org/api/publicsiteappeals?Hidden=false&AppealsTypeID='
22+
FEDNET_SOURCE = 'https://go-api.ifrc.org/Api/FedNetAppeals?Hidden=false&AppealsTypeId='
23+
2124
# WORK IN PROGRESS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2225

2326
class Command(BaseCommand):
@@ -38,15 +41,17 @@ def create_bilaterals_dict(self, records):
3841
bilaterals[rec['APP_Code']] = rec['AmountCHF']
3942
return bilaterals
4043

41-
def load(self, url: str, file_field: str, field_inserted_date_field: str):
44+
def load(self, url: str, is_fednet):
4245
auth = (settings.APPEALS_USER, settings.APPEALS_PASS)
43-
results = requests.get(url, auth=auth, headers={'Accept': 'application/json'}).json()
44-
for result in results:
45-
try:
46-
pass
47-
# self.load_for_country(result, file_field, field_inserted_date_field)
48-
except Exception:
49-
logger.error('Could not update AppealDocuments', exc_info=True)
46+
for adtype in APPEAL_DOCUMENT_TYPES.filter(public_site_or_fednet=is_fednet):
47+
results = requests.get(url + str(adtype.id), auth=auth, headers={'Accept': 'application/json'}).json()
48+
# import pdb; pdb.set_trace()
49+
for result in results:
50+
try:
51+
pass
52+
# self.load_for_country(result, file_field, field_inserted_date_field)
53+
except Exception:
54+
logger.error('Could not update AppealDocuments', exc_info=True)
5055

5156
def get_public_or_fednet_appealdocs(self):
5257
PUBLIC_SOURCE = 'https://go-api.ifrc.org/api/publicsiteappeals?AppealsTypeID=1851&Hidden=false'
@@ -301,22 +306,29 @@ def parse_appeal_record(self, r, **options):
301306

302307
return fields
303308

304-
def handle(self, *args, **options):
305-
logger.info('Starting appeals ingest')
306-
start_appeals_count = Appeal.objects.all().count()
307-
try:
308-
getFromAPI = self.get_public_or_fednet_appealdocs()
309-
except Exception as ex:
310-
logger.error(f'Getting Appealdocs failed: {str(ex)}')
311-
return
312-
try:
313-
new, modified, bilaterals = self.get_new_or_modified_appeals()
314-
except Exception as ex:
315-
logger.error(f'Getting Appeals and AppealBilaterals failed: {str(ex)}')
316-
return
317-
logger.info(f'{start_appeals_count} current appeals')
318-
logger.info(f'Creating {len(new)} new appeals')
319-
logger.info(f'Updating {len(modified)} existing appeals that MIGHT have been modified')
309+
def handle(self, **_):
310+
# Public
311+
self.stdout.write('Fetching data for appealdocs:: PUBLIC')
312+
self.load(PUBLIC_SOURCE, False)
313+
# Private
314+
self.stdout.write('\nFetching data for appealdocs:: FEDNET')
315+
self.load(FEDNET_SOURCE, True)
316+
317+
# logger.info('Starting appeals ingest')
318+
# start_appeals_count = Appeal.objects.all().count()
319+
# try:
320+
# getFromAPI = self.get_public_or_fednet_appealdocs()
321+
# except Exception as ex:
322+
# logger.error(f'Getting Appealdocs failed: {str(ex)}')
323+
# return
324+
# try:
325+
# new, modified, bilaterals = self.get_new_or_modified_appeals()
326+
# except Exception as ex:
327+
# logger.error(f'Getting Appeals and AppealBilaterals failed: {str(ex)}')
328+
# return
329+
# logger.info(f'{start_appeals_count} current appeals')
330+
# logger.info(f'Creating {len(new)} new appeals')
331+
# logger.info(f'Updating {len(modified)} existing appeals that MIGHT have been modified')
320332
#
321333
# errors = []
322334
# num_created = 0
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 3.2.18 on 2023-04-24 17:25
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('api', '0164_appealdocumenttype'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='appealdocument',
16+
name='description',
17+
field=models.CharField(blank=True, max_length=200, null=True, verbose_name='description'),
18+
),
19+
migrations.AddField(
20+
model_name='appealdocument',
21+
name='type',
22+
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='api.appealdocumenttype', verbose_name='type'),
23+
),
24+
migrations.AlterField(
25+
model_name='country',
26+
name='iso3',
27+
field=models.CharField(blank=True, max_length=3, null=True, unique=True, validators=[django.core.validators.RegexValidator('^[A-Z]*$', 'ISO must be uppercase')], verbose_name='ISO3'),
28+
),
29+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 3.2.18 on 2023-04-24 17:42
2+
3+
import django.core.validators
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('api', '0165_auto_20230424_1725'),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name='appealdocument',
17+
name='iso3',
18+
field=models.ForeignKey(db_column='iso3', null=True, on_delete=django.db.models.deletion.SET_NULL, to='api.country', to_field='iso3', verbose_name='iso3'),
19+
),
20+
]

api/models.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class Country(models.Model):
130130
verbose_name=_('ISO'), max_length=2, null=True, blank=True,
131131
validators=[RegexValidator('^[A-Z]*$', 'ISO must be uppercase')])
132132
iso3 = models.CharField(
133-
verbose_name=_('ISO3'), max_length=3, null=True, blank=True,
133+
verbose_name=_('ISO3'), max_length=3, null=True, blank=True, unique=True,
134134
validators=[RegexValidator('^[A-Z]*$', 'ISO must be uppercase')])
135135
fdrs = models.CharField(verbose_name=_('FDRS'), max_length=6, null=True, blank=True)
136136
society_name = models.TextField(verbose_name=_('society name'), blank=True)
@@ -1025,8 +1025,10 @@ class AppealDocument(models.Model):
10251025
name = models.CharField(verbose_name=_('name'), max_length=100)
10261026
document = models.FileField(verbose_name=_('document'), null=True, blank=True, upload_to=appeal_document_path)
10271027
document_url = models.URLField(verbose_name=_('document url'), blank=True)
1028-
10291028
appeal = models.ForeignKey(Appeal, verbose_name=_('appeal'), on_delete=models.CASCADE)
1029+
type = models.ForeignKey(AppealDocumentType, verbose_name=_('type'), null=True, on_delete=models.SET_NULL)
1030+
description = models.CharField(verbose_name=_('description'), max_length=200, null=True, blank=True)
1031+
iso3 = models.ForeignKey(Country, to_field="iso3", db_column="iso3", verbose_name=_('iso3'), null=True, on_delete=models.SET_NULL)
10301032

10311033
class Meta:
10321034
verbose_name = _('appeal document')

0 commit comments

Comments
 (0)