I have written the following function which works as expected but I still see there is some room for improving its readability
def get_claims_to_search():
claims = []
database_priority = DatabasePriority.objects.first()
low_priority_claims_databases = ClaimsDatabase.objects.filter(
deleted=False, priority="low"
)
normal_priority_claims_databases = ClaimsDatabase.objects.filter(
deleted=False, priority="normal"
)
high_priority_claims_databases = ClaimsDatabase.objects.filter(
deleted=False, priority="high"
)
low_priority_count = database_priority.low
normal_priority_count = database_priority.normal
high_priority_count = database_priority.high
if not low_priority_claims_databases.count():
low_priority_count = 0
if normal_priority_claims_databases.count():
normal_priority_count += int(
database_priority.normal
/ (database_priority.normal + database_priority.high)
* database_priority.low
)
if high_priority_claims_databases.count():
high_priority_count += int(
database_priority.high
/ (database_priority.normal + database_priority.high)
* database_priority.low
)
if not normal_priority_claims_databases.count():
normal_priority_count = 0
if low_priority_claims_databases.count():
low_priority_count += int(
database_priority.low
/ (database_priority.low + database_priority.high)
* database_priority.normal
)
if high_priority_claims_databases.count():
high_priority_count += int(
database_priority.high
/ (database_priority.low + database_priority.high)
* database_priority.normal
)
if not high_priority_claims_databases.count():
high_priority_count = 0
if low_priority_claims_databases.count():
low_priority_count += int(
database_priority.low
/ (database_priority.low + database_priority.high)
* database_priority.normal
)
if normal_priority_claims_databases.count():
normal_priority_count += int(
database_priority.normal
/ (database_priority.normal + database_priority.high)
* database_priority.high
)
priority_databases = {
"low": low_priority_claims_databases,
"normal": normal_priority_claims_databases,
"high": high_priority_claims_databases,
}
priority_count = {
"low": low_priority_count,
"normal": normal_priority_count,
"high": high_priority_count,
}
for priority in priority_count:
if priority_count[priority]:
priority_count[priority] = int(
(
(priority_count[priority] / 100)
/ priority_databases[priority].count()
)
* settings.DEBUNKBOT_SEARCHEABLE_CLAIMS_COUNT
)
for claim_database in priority_databases[priority]:
claims.append(
claim_database.claims.filter(processed=False, rating=False).values(
"claim_first_appearance"
)[: priority_count[priority]]
)
return claims
any suggestions on how I can improve/rewrite it?