Skip to content

Commit

Permalink
XLSX: More end points
Browse files Browse the repository at this point in the history
  • Loading branch information
odscjames committed Nov 29, 2021
1 parent c295654 commit cdc267c
Show file tree
Hide file tree
Showing 4 changed files with 214 additions and 23 deletions.
64 changes: 64 additions & 0 deletions iati_datastore/iatilib/frontend/api1.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,36 +393,71 @@ class ActivityBySectorView(DataStoreCSVView):
serializer = staticmethod(serialize.csv_activity_by_sector)


class ActivityBySectorXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.activities_by_sector)
serializer = staticmethod(serialize.xlsx_activity_by_sector)


class TransactionsView(DataStoreCSVView):
filter = staticmethod(dsfilter.transactions)
serializer = staticmethod(serialize.transaction_csv)


class TransactionsXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.transactions)
serializer = staticmethod(serialize.transaction_xlsx)


class TransactionsByCountryView(DataStoreCSVView):
filter = staticmethod(dsfilter.transactions_by_country)
serializer = staticmethod(serialize.csv_transaction_by_country)


class TransactionsByCountryXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.transactions_by_country)
serializer = staticmethod(serialize.xlsx_transaction_by_country)


class TransactionsBySectorView(DataStoreCSVView):
filter = staticmethod(dsfilter.transactions_by_sector)
serializer = staticmethod(serialize.csv_transaction_by_sector)


class TransactionsBySectorXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.transactions_by_sector)
serializer = staticmethod(serialize.xlsx_transaction_by_sector)


class BudgetsView(DataStoreCSVView):
filter = staticmethod(dsfilter.budgets)
serializer = staticmethod(serialize.budget_csv)


class BudgetsXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.budgets)
serializer = staticmethod(serialize.budget_xlsx)


class BudgetsByCountryView(DataStoreCSVView):
filter = staticmethod(dsfilter.budgets_by_country)
serializer = staticmethod(serialize.csv_budget_by_country)


class BudgetsByCountryXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.budgets_by_country)
serializer = staticmethod(serialize.xlsx_budget_by_country)


class BudgetsBySectorView(DataStoreCSVView):
filter = staticmethod(dsfilter.budgets_by_sector)
serializer = staticmethod(serialize.csv_budget_by_sector)


class BudgetsBySectorXLSXView(DataStoreXLSXView):
filter = staticmethod(dsfilter.budgets_by_sector)
serializer = staticmethod(serialize.xlsx_budget_by_sector)


api.add_url_rule(
'/access/activity/',
defaults={"format": "json"},
Expand Down Expand Up @@ -461,26 +496,55 @@ class BudgetsBySectorView(DataStoreCSVView):
'/access/activity/by_sector.csv',
view_func=ActivityBySectorView.as_view('activity_by_sector'))

api.add_url_rule(
'/access/activity/by_sector.xlsx',
view_func=ActivityBySectorXLSXView.as_view('activity_by_sector_xlsx'))

api.add_url_rule(
'/access/transaction.csv',
view_func=TransactionsView.as_view('transaction_list'))

api.add_url_rule(
'/access/transaction.xlsx',
view_func=TransactionsXLSXView.as_view('transaction_list_xlsx'))

api.add_url_rule(
'/access/transaction/by_country.csv',
view_func=TransactionsByCountryView.as_view('transaction_by_country'))

api.add_url_rule(
'/access/transaction/by_country.xlsx',
view_func=TransactionsByCountryXLSXView.as_view('transaction_by_country_xlsx'))

api.add_url_rule(
'/access/transaction/by_sector.csv',
view_func=TransactionsBySectorView.as_view('transaction_by_sector'))

api.add_url_rule(
'/access/transaction/by_sector.xlsx',
view_func=TransactionsBySectorXLSXView.as_view('transaction_by_sector_xlsx'))

api.add_url_rule(
'/access/budget.csv',
view_func=BudgetsView.as_view('budget_list'))

api.add_url_rule(
'/access/budget.xlsx',
view_func=BudgetsXLSXView.as_view('budget_list_xlsx'))

api.add_url_rule(
'/access/budget/by_country.csv',
view_func=BudgetsByCountryView.as_view('budget_by_country'))


api.add_url_rule(
'/access/budget/by_country.xlsx',
view_func=BudgetsByCountryXLSXView.as_view('budget_by_country_xlsx'))

api.add_url_rule(
'/access/budget/by_sector.csv',
view_func=BudgetsBySectorView.as_view('budget_by_sector'))

api.add_url_rule(
'/access/budget/by_sector.xlsx',
view_func=BudgetsBySectorXLSXView.as_view('budget_by_sector_xlsx'))
5 changes: 4 additions & 1 deletion iati_datastore/iatilib/frontend/serialize/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
csv, csv_activity_by_country, csv_activity_by_sector,
transaction_csv, csv_transaction_by_country, csv_transaction_by_sector,
budget_csv, csv_budget_by_country, csv_budget_by_sector,
xlsx, xlsx_activity_by_country)
xlsx, xlsx_activity_by_country, xlsx_activity_by_sector,
transaction_xlsx, xlsx_transaction_by_country, xlsx_transaction_by_sector,
budget_xlsx, xlsx_budget_by_country, xlsx_budget_by_sector,
)
from .jsonserializer import json, datastore_json


Expand Down
71 changes: 49 additions & 22 deletions iati_datastore/iatilib/frontend/serialize/csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,7 @@ def wrapper(args):
xlsx_activity_by_country = XLSXSerializer(_activity_by_country_fields, adapter=adapt_activity_other, client_filename='activities_by_country.xlsx')


csv_activity_by_sector = CSVSerializer((
_activity_by_sector_fields = (
(u"sector-code", lambda r: r.SectorPercentage.sector.value if r.SectorPercentage.sector is not None else ""),
(u"sector", lambda r: r.SectorPercentage.sector.description.title() if r.SectorPercentage.sector and r.SectorPercentage.sector.description is not None else ""),
(u"sector-percentage", lambda r: r.SectorPercentage.percentage if r.SectorPercentage.percentage else ""),
Expand Down Expand Up @@ -659,7 +659,11 @@ def wrapper(args):
u"total-Interest Repayment",
u"total-Loan Repayment",
u"total-Reimbursement",
), adapter=adapt_activity_other)
)

csv_activity_by_sector = CSVSerializer(_activity_by_sector_fields, adapter=adapt_activity_other)

xlsx_activity_by_sector = XLSXSerializer(_activity_by_sector_fields, adapter=adapt_activity_other, client_filename='activities_by_sector.xlsx')

common_transaction_csv = (
(u'transaction_ref', lambda t: t.ref),
Expand Down Expand Up @@ -691,13 +695,13 @@ def wrapper(args):
# (u'reporting-org', lambda t: t.activity.reporting_org_ref),
)

transaction_csv = CSVSerializer((
_transaction_fields = (
(u'transaction-type', transaction_type),
(u'transaction-date', transaction_date),
(u"default-currency", default_currency),
(u"transaction-value", transaction_value),
) + common_transaction_csv +
("iati-identifier",
) + common_transaction_csv + (
"iati-identifier",
"hierarchy",
"last-updated-datetime",
"default-language",
Expand Down Expand Up @@ -744,7 +748,12 @@ def wrapper(args):
u"default-flow-type-code",
u"default-aid-type-code",
u"default-tied-status-code",
), adapter=adapt_activity)
)


transaction_csv = CSVSerializer(_transaction_fields, adapter=adapt_activity)

transaction_xlsx = XLSXSerializer(_transaction_fields, adapter=adapt_activity, client_filename='transactions.xlsx')


def trans(func):
Expand All @@ -761,16 +770,16 @@ def wrapper(args):
return wrapper


csv_transaction_by_country = CSVSerializer((
_transaction_by_country_fields = (
(u"recipient-country-code", lambda r: r.CountryPercentage.country.value if r.CountryPercentage.country is not None else ""),
(u"recipient-country", lambda r: r.CountryPercentage.country.description.title() if (r.CountryPercentage.country is not None and r.CountryPercentage.country.description is not None) else ""),
(u"recipient-country-percentage", lambda r: r.CountryPercentage.percentage),
(u'transaction-type', trans(transaction_type)),
(u'transaction-date', trans(transaction_date)),
(u"default-currency", trans(default_currency)),
(u'transaction-value', trans(transaction_value)),
) + tuple([(i[0], trans(i[1])) for i in common_transaction_csv]) +
("iati-identifier",
) + tuple([(i[0], trans(i[1])) for i in common_transaction_csv]) + (
"iati-identifier",
"hierarchy",
"last-updated-datetime",
"default-language",
Expand Down Expand Up @@ -814,11 +823,14 @@ def wrapper(args):
u"default-flow-type-code",
u"default-aid-type-code",
u"default-tied-status-code",
),
adapter=trans_activity)
)

csv_transaction_by_country = CSVSerializer(_transaction_by_country_fields, adapter=trans_activity)

xlsx_transaction_by_country = XLSXSerializer(_transaction_by_country_fields, adapter=trans_activity, client_filename='transactions_by_country.xlsx')

csv_transaction_by_sector = CSVSerializer((

_transaction_by_sector_fields = (
(u"sector-code", lambda r: r.SectorPercentage.sector.value if r.SectorPercentage.sector is not None else ""),
(u"sector", lambda r: r.SectorPercentage.sector.description.title() if (r.SectorPercentage.sector is not None and r.SectorPercentage.sector.description is not None) else ""),
(u"sector-percentage", lambda r: r.SectorPercentage.percentage),
Expand All @@ -828,8 +840,8 @@ def wrapper(args):
(u'transaction-date', trans(transaction_date)),
(u"default-currency", trans(default_currency)),
(u'transaction-value', trans(transaction_value)),
) + tuple([(i[0], trans(i[1])) for i in common_transaction_csv]) +
("iati-identifier",
) + tuple([(i[0], trans(i[1])) for i in common_transaction_csv]) + (
"iati-identifier",
"hierarchy",
"last-updated-datetime",
"default-language",
Expand Down Expand Up @@ -871,11 +883,14 @@ def wrapper(args):
u"default-flow-type-code",
u"default-aid-type-code",
u"default-tied-status-code",
),
adapter=trans_activity)
)


budget_csv = CSVSerializer((
csv_transaction_by_sector = CSVSerializer(_transaction_by_sector_fields, adapter=trans_activity)

xlsx_transaction_by_sector = XLSXSerializer(_transaction_by_sector_fields, adapter=trans_activity, client_filename='transactions_by_sector.xlsx')

_budget_fields = (
(u'budget-period-start-date', period_start_date),
(u'budget-period-end-date', period_end_date),
(u"budget-value", budget_value),
Expand All @@ -889,10 +904,13 @@ def wrapper(args):
u"sector-code",
u"sector",
u"sector-percentage",
), adapter=adapt_activity)
)

budget_csv = CSVSerializer(_budget_fields, adapter=adapt_activity)

csv_budget_by_country = CSVSerializer((
budget_xlsx = XLSXSerializer(_budget_fields, adapter=adapt_activity, client_filename='budgets.xlsx')

_budget_by_country_fields = (
(u"recipient-country-code", lambda r: r.CountryPercentage.country.value if r.CountryPercentage.country is not None else ""),
(u"recipient-country", lambda r: r.CountryPercentage.country.description.title() if (r.CountryPercentage.country is not None and r.CountryPercentage.country.description is not None) else ""),
(u"recipient-country-percentage", lambda r: r.CountryPercentage.percentage),
Expand All @@ -906,10 +924,14 @@ def wrapper(args):
u"sector-code",
u"sector",
u"sector-percentage",
), adapter=trans_activity)
)

csv_budget_by_country = CSVSerializer(_budget_by_country_fields, adapter=trans_activity)

xlsx_budget_by_country = XLSXSerializer(_budget_by_country_fields, adapter=trans_activity, client_filename='budgets_by_country.xlsx')

csv_budget_by_sector = CSVSerializer((

_budget_by_sector_fields = (
(u"sector-code", lambda r: r.SectorPercentage.sector.value if r.SectorPercentage.sector is not None else ""),
(u"sector", lambda r: r.SectorPercentage.sector.description.title() if (r.SectorPercentage.sector is not None and r.SectorPercentage.sector.description is not None) else ""),
(u"sector-percentage", lambda r: r.SectorPercentage.percentage),
Expand All @@ -920,4 +942,9 @@ def wrapper(args):
u"iati-identifier",
u"title",
u"description",
), adapter=trans_activity)
)

csv_budget_by_sector = CSVSerializer(_budget_by_sector_fields, adapter=trans_activity)

xlsx_budget_by_sector = XLSXSerializer(_budget_by_sector_fields, adapter=trans_activity, client_filename='budgets_by_sector.xlsx')

Loading

0 comments on commit cdc267c

Please sign in to comment.