Moved policy files into 'backend/' and fixed (most) formatting issues.

This commit is contained in:
kououken 2019-01-29 16:39:35 -08:00
parent 88a09e5816
commit a70d9aa6bc
3 changed files with 267 additions and 148 deletions

View file

@ -1,13 +1,13 @@
import hashlib import hashlib
hasher = hashlib.md5() hasher = hashlib.md5()
with open ('simple_policy.py', 'rb') as afile: with open('simple_policy.py', 'rb') as afile:
buf = afile.read() buf = afile.read()
hasher.update(buf) hasher.update(buf)
print("md5 of simple: " + hasher.hexdigest()) print("md5 of simple: " + hasher.hexdigest())
hasher = hashlib.md5() hasher = hashlib.md5()
with open ('moderate_policy.py', 'rb') as afile: with open('moderate_policy.py', 'rb') as afile:
buf = afile.read() buf = afile.read()
hasher.update(buf) hasher.update(buf)
print("md5 of moderate: " + hasher.hexdigest()) print("md5 of moderate: " + hasher.hexdigest())
@ -15,13 +15,13 @@ print("md5 of moderate: " + hasher.hexdigest())
hasher = hashlib.sha1() hasher = hashlib.sha1()
with open ('simple_policy.py', 'rb') as afile: with open('simple_policy.py', 'rb') as afile:
buf = afile.read() buf = afile.read()
hasher.update(buf) hasher.update(buf)
print("sha1 of simple: " + hasher.hexdigest()) print("sha1 of simple: " + hasher.hexdigest())
hasher = hashlib.sha1() hasher = hashlib.sha1()
with open ('moderate_policy.py', 'rb') as afile: with open('moderate_policy.py', 'rb') as afile:
buf = afile.read() buf = afile.read()
hasher.update(buf) hasher.update(buf)
print("sha1 of moderate: " + hasher.hexdigest()) print("sha1 of moderate: " + hasher.hexdigest())

263
back/backend/policy.py Normal file
View file

@ -0,0 +1,263 @@
# simple_policy.py
from datetime import date
from policy import Policy, Section
# - For the rules, should one refer to fields by 'section.fields.x'
# or by the section name eg. 'general_section.fields.x'?
#### General
#### Section 0
general_section = Section(
title="General Info",
html_description="",
fields={
"destination": {"label": "Destination City", "type": "string"}
}
)
general_section.add_rule(
title="Destination city check",
rule=lambda report, section: section.field.destination == "Timbuktu",
rule_break_text="What did the cowboy say about Tim, his wild horse?"
)
Policy.add_section(general_section)
#### Flight
#### Section 1
flight_section = Section(
title="Flight Info",
html_description="<p>Enter flight details here.</p>",
fields={
"international": {"label": "Is this an international flight?", "type": "boolean"},
"departure_date": {"label": "Departure date", "type": "date"},
"return_date": {"label": "Return date", "type": "date"},
"fare": {"label": "Fare", "type": "decimal"},
}
)
flight_section.add_rule(
title="Airline fare pre-approval check",
rule=lambda report, section: section.fields.fare < 500,
rule_break_text="Fares cannot be more than $500"
)
Policy.add_section(flight_section)
#### Lodging
#### Section 2
lodging_section = Section(
title="Hotel Info",
html_description="<p>Enter hotel info here.\nPer diem rates can be found at <a href='https://www.gsa.gov/travel/plan-book/per-diem-rates'></a></p>",
fields={
"check-in_date": {"label": "Check-in date", "type": "date"},
"check-out_date": {"label": "Check-out date", "type": "date"},
"rate": {"label": "Per diem nightly rate", "type": "decimal"},
"cost": {"label": "Total Cost", "type": "decimal"}
}
)
def nightly_rate_check(report, section):
checkin_date = date(section.fields.checkin_date)
checkout_date = date(section.fields.checkout_date)
duration = checkout_date - checkin_date
return section.fields.cost <= duration * section.fields.rate
section.add_rule(
title="",
rule=nightly_rate_check,
rule_break_text="The average nightly rate cannot be more than the USGSA rate."
)
Policy.add_section(lodging_section)
#### Local Transportation
#### Section 3
transport_section = Section(
title="Local Transportation",
html_description="<p>How much did you spend on local transportation, in total?</p>",
fields={
"duration": {"label": "How many days was your trip?", "type": "decimal"},
"cost": {"label": "Total cost", "type": "decimal"}
}
)
transport_section.add_rule(
title="Total cost check",
rule=lambda report, section: section.fields.cost <= section.fields.duration * 10,
rule_break_text="Local transportation costs must be less than $10 per day, on average."
)
Policy.add_section(transport_section)
#### Per Diem
#### Section 4
per_diem_section = Section(
title="Per Diem",
html_description="<p>Enter info about meals and incidentals here.\nPer diem rates can be found at <a href='https://www.gsa.gov/travel/plan-book/per-diem-rates'></a></p>",
fields={
"duration": {"label": "How many days was your trip?", "type": "decimal"},
"rate": {"label": "What is the per diem rate for your destination?", "type": "decimal"},
"cost": {"label": "Total Cost for meals and incidentals", "type": "decimal"}
}
)
per_diem_section.add_rule(
title="Per Diem Cost Check",
rule=lambda report, section: section.fields.cost <= section.fields.duration * section.fields.rate,
rule_break_text="The average cost per day for per diem expenses cannot be more than the rate specified by the USGSA."
)
Policy.add_section(per_diem_section)
'''
Section(
title="",
html_description="<p></p>",
fields={
"": {"label": "", "type": ""}
}
)
section.add_rule(
title="",
rule=lambda report, section: boolean_statement,
rule_break_text=""
)
#// or, for a rule which doesnt apply to a specific section...
#//
#// add_general_rule(...)
'''

View file

@ -1,144 +0,0 @@
# simple_policy.py
from datetime import date
#TODO:
# - For the rules, should one refer to fields by 'section.fields.x' or by the section name eg. 'general_section.fields.x'?
#### General
#### Section 0
general_section = Section(
title = "General Info",
html_description = "",
fields = {
"destination": {"label": "Destination City", "type": "string"}
}
)
general_section.add_rule(
title = "Destination city check",
rule = lambda report, section:
if section.fields.destination == "Timbuktu":
return True
else:
return False
,
rule_break_text = "What did the cowboy say about Tim, his wild horse?"
)
#### Flight
#### Section 1
flight_section = Section(
title = "Flight Info",
html_description = "<p>Enter flight details here.</p>",
fields = {
"international": {"label": "Is this an international flight?", "type": "boolean"},
"departure_date": {"label": "Departure date", "type": "date"},
"return_date": {"label": "Return date", "type": "date"},
"fare": {"label": "Fare", "type": "decimal"},
}
)
flight_section.add_rule(
title = "Airline fare pre-approval check",
rule = lambda report, section:
return section.fields.fare < 500
,
rule_break_text = "Fares cannot be more than $500"
)
#### Lodging
#### Section 2
lodging_section = Section(
title = "Hotel Info",
html_description = "<p>Enter hotel info here.\nPer diem rates can be found at <a href='https://www.gsa.gov/travel/plan-book/per-diem-rates'></a></p>",
fields = {
"check-in_date": {"label": "Check-in date", "type": "date"},
"check-out_date": {"label": "Check-out date", "type": "date"},
"rate": {"label": "Per diem nightly rate", "type": "decimal"},
"cost": {"label": "Total Cost", "type": "decimal"}
}
)
section.add_rule(
title = "",
rule = lambda report, section:
check-in_date = date(section.fields.check-in_date)
check-out_date = date(section.fields.check-out_date)
duration = check-out_date - check-in_date
return section.fields.cost <= duration * section.fields.rate
,
rule_break_text = "The average nightly rate cannot be more than the USGSA rate."
)
#### Local Transportation
#### Section 3
transport_section = Section(
title = "Local Transportation",
html_description = "<p>How much did you spend on local transportation, in total?</p>",
fields = {
"duration": {"label": "How many days was your trip?", "type": "decimal"},
"cost": {"label": "Total cost", "type": "decimal"}
}
)
transport_section.add_rule(
title = "Total cost check",
rule = lambda report, section:
return section.fields.cost <= section.fields.duration * 10
,
rule_break_text = "Local transportation costs must be less than $10 per day, on average."
)
#### Per Diem
#### Section 4
per_diem_section = Section(
title = "Per Diem",
html_description = "<p>Enter info about meals and incidentals here.\nPer diem rates can be found at <a href='https://www.gsa.gov/travel/plan-book/per-diem-rates'></a></p>",
fields = {
"duration": {"label": "How many days was your trip?", "type": "decimal"},
"rate": {"label": "What is the per diem rate for your destination?", "type": "decimal"},
"cost": {"label": "Total Cost for meals and incidentals", "type": "decimal"}
}
)
per_diem_section.add_rule(
title = "Per Diem Cost Check",
rule = lambda report, section:
return section.fields.cost <= section.fields.duration * section.fields.rate
,
rule_break_text = "The average cost per day for per diem expenses cannot be more than the rate specified by the USGSA."
)
'''
Section(
title = "",
html_description = "<p></p>",
fields = {
"": {"label": "", "type": ""}
}
)
section.add_rule(
title = "",
rule = lambda report, section: return boolean_statement,
rule_break_text = ""
)
#// or, for a rule which doesnt apply to a specific section...
#//
#// add_general_rule(...)
'''