本文整理汇总了Python中bill.models.BillType.by_xml_code方法的典型用法代码示例。如果您正苦于以下问题:Python BillType.by_xml_code方法的具体用法?Python BillType.by_xml_code怎么用?Python BillType.by_xml_code使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bill.models.BillType
的用法示例。
在下文中一共展示了BillType.by_xml_code方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: process_bill
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def process_bill(self, obj, node):
amends_type = BillType.by_xml_code(node.xpath('string(amends/@type)'))
amends_number = int(node.xpath('string(amends/@number)'))
try:
amends_seq = int(node.xpath('string(amends/@sequence)'))
except ValueError:
amends_seq = None
obj.bill = Bill.objects.get(congress=obj.congress, bill_type=amends_type, number=amends_number)
obj.sequence = amends_seq
示例2: bill
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def bill(self):
if not hasattr(self, "_ref"):
if ":" in self.feedname and self.feedname.split(":")[0] in ("bill",):
from bill.models import Bill, BillType
m = re.match(r"([a-z]+)(\d+)-(\d+)", self.feedname.split(":")[1])
bill_type = BillType.by_xml_code(m.group(1))
return Bill.objects.get(congress=m.group(2), bill_type=bill_type, number=m.group(3))
else:
self._ref = None
return self._ref
示例3: process_relatedbills
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def process_relatedbills(self, obj, node):
RelatedBill.objects.filter(bill=obj).delete()
for subnode in node.xpath("./relatedbills/bill"):
try:
related_bill = Bill.objects.get(
congress=subnode.get("session"),
bill_type=BillType.by_xml_code(subnode.get("type")),
number=int(subnode.get("number")),
)
except Bill.DoesNotExist:
continue
RelatedBill.objects.create(bill=obj, related_bill=related_bill, relation=subnode.get("relation"))
示例4: process_bill
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def process_bill(self, obj, node):
if node.xpath('string(amends/@type)') == "treaty":
# Cannot handle this.
return False
amends_type = BillType.by_xml_code(node.xpath('string(amends/@type)'))
amends_number = int(node.xpath('string(amends/@number)'))
try:
amends_seq = int(node.xpath('string(amends/@sequence)'))
except ValueError:
amends_seq = None
obj.bill = Bill.objects.get(congress=obj.congress, bill_type=amends_type, number=amends_number)
obj.sequence = amends_seq
return True
示例5: bill_redirect
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def bill_redirect(request, istext=None):
"""
Redirect requests to obsolete bill urls which look like:
/congress/bill.xpd?bill=[type_code][congress_number]-[bill_num]
"""
token = request.GET.get('bill', '')
match = BILL_TOKEN_REGEXP.search(token)
if not match:
raise Http404()
type_code, congress, number = match.groups()
try:
bill_type = BillType.by_xml_code(type_code)
except BillType.NotFound:
raise Http404()
bill = get_object_or_404(Bill, bill_type=bill_type, congress=congress,
number=number)
return redirect(bill.get_absolute_url() + ("" if not istext else "/text"), permanent=True)
示例6: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
#.........这里部分代码省略.........
sobj.type = None
sobj.committee = cobj
sobj.obsolete = False
sobj.save()
seen_committees.add(sobj.id)
progress.tick()
# Check for non-obsolete committees in the database that aren't in our
# file.
other_committees = Committee.objects.filter(obsolete=False).exclude(id__in=seen_committees)
if len(other_committees) > 0:
print "Marking obsolete:", ", ".join(c.code for c in other_committees)
other_committees.update(obsolete=True)
File.objects.save_file(COMMITTEES_FILE)
log.info('Processing committee members')
MEMBERS_FILE = BASE_PATH + 'committee-membership-current.yaml'
file_changed = File.objects.is_changed(MEMBERS_FILE)
if not file_changed and not options.force:
log.info('File %s was not changed' % MEMBERS_FILE)
else:
# map THOMAS IDs to GovTrack IDs
y = yaml_load(BASE_PATH + "legislators-current.yaml")
person_id_map = { }
for m in y:
if "id" in m and "govtrack" in m["id"] and "thomas" in m["id"]:
person_id_map[m["id"]["thomas"]] = m["id"]["govtrack"]
# load committee members
tree = yaml_load(MEMBERS_FILE)
total = len(tree)
progress = Progress(total=total, name='committees')
# We can delete CommitteeMember objects because we don't have
# any foreign keys to them.
CommitteeMember.objects.all().delete()
# Process committee nodes
for committee, members in tree.items():
if committee[0] == "H": continue # House data is out of date
try:
cobj = Committee.objects.get(code=committee)
except Committee.DoesNotExist:
print "Committee not found:", committee
continue
# Process members of current committee node
for member in members:
mobj = CommitteeMember()
mobj.person = Person.objects.get(id=person_id_map[member["thomas"]])
mobj.committee = cobj
if "title" in member:
mobj.role = ROLE_MAPPING[member["title"]]
mobj.save()
progress.tick()
File.objects.save_file(MEMBERS_FILE)
return
log.info('Processing committee schedule')
SCHEDULE_FILE = 'data/us/112/committeeschedule.xml'
file_changed = File.objects.is_changed(SCHEDULE_FILE)
if not file_changed and not options.force:
log.info('File %s was not changed' % SCHEDULE_FILE)
else:
tree = etree.parse(SCHEDULE_FILE)
# We have to clear out all CommitteeMeeting objects when we refresh because
# we have no unique identifier in the upstream data for a meeting. We might use
# the meeting's committee & date as an identifier, but since meeting times can
# change this might have awkward consequences for the end user if we even
# attempted to track that.
CommitteeMeeting.objects.all().delete()
# Process committee event nodes
for meeting in tree.xpath('/committee-schedule/meeting'):
try:
mobj = meeting_processor.process(CommitteeMeeting(), meeting)
mobj.save()
mobj.bills.clear()
for bill in meeting.xpath('bill'):
bill = Bill.objects.get(congress=bill.get("session"), bill_type=BillType.by_xml_code(bill.get("type")), number=int(bill.get("number")))
mobj.bills.add(bill)
except Committee.DoesNotExist:
log.error('Could not load Committee object for meeting %s' % meeting_processor.display_node(meeting))
for committee in Committee.objects.all():
if not options.disable_events:
committee.create_events()
File.objects.save_file(SCHEDULE_FILE)
示例7: type_handler
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def type_handler(self, value):
return BillType.by_xml_code(value)
示例8: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
#.........这里部分代码省略.........
if not term.id in terms_parsed:
log.debug("Deleted %s" % term)
term.delete()
# Bills
bill_index = None
if not options.disable_indexing:
from bill.search_indexes import BillIndex
bill_index = BillIndex()
if options.congress:
files = glob.glob('data/us/%s/bills/*.xml' % options.congress)
log.info('Parsing bills of only congress#%s' % options.congress)
else:
files = glob.glob('data/us/*/bills/*.xml')
if options.filter:
files = [f for f in files if re.match(options.filter, f)]
log.info('Processing bills: %d files' % len(files))
total = len(files)
progress = Progress(total=total, name='files', step=100)
bill_processor = BillProcessor()
seen_bill_ids = []
for fname in files:
progress.tick()
if not File.objects.is_changed(fname) and not options.force:
m = re.search(r"/(\d+)/bills/([a-z]+)(\d+)\.xml$", fname)
try:
b = Bill.objects.get(congress=m.group(1), bill_type=BillType.by_xml_code(m.group(2)), number=m.group(3))
seen_bill_ids.append(b.id)
# Update the index/events for any bill with recently changed text
textfile = "data/us/bills.text/%s/%s/%s%s.txt" % (m.group(1), m.group(2), m.group(2), m.group(3))
if (bill_index and not options.disable_events) and os.path.exists(textfile) and File.objects.is_changed(textfile):
bill_index.update_object(b, using="bill") # index the full text
b.create_events() # events for new bill text documents
File.objects.save_file(textfile)
continue
except Bill.DoesNotExist:
pass # just parse as normal
if options.slow:
time.sleep(1)
skip_stuff = False
tree = etree.parse(fname)
for node in tree.xpath('/bill'):
if not skip_stuff:
try:
bill = bill_processor.process(Bill(), node)
except:
print fname
raise
else:
m = re.search(r"/(\d+)/bills/([a-z]+)(\d+)\.xml$", fname)
bill = Bill.objects.get(congress=m.group(1), bill_type=BillType.by_xml_code(m.group(2)), number=m.group(3))
seen_bill_ids.append(bill.id) # don't delete me later
示例9: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
#.........这里部分代码省略.........
bill_index = None
if not options.disable_indexing:
from bill.search_indexes import BillIndex
bill_index = BillIndex()
if options.congress and int(options.congress) <= 42:
files = glob.glob('data/congress/%s/bills/*/*/*.xml' % options.congress)
log.info('Parsing unitedstates/congress bills of only congress#%s' % options.congress)
elif options.congress:
files = glob.glob('data/us/%s/bills/*.xml' % options.congress)
log.info('Parsing bills of only congress#%s' % options.congress)
else:
files = glob.glob('data/us/*/bills/*.xml')
if options.filter:
files = [f for f in files if re.match(options.filter, f)]
log.info('Processing bills: %d files' % len(files))
total = len(files)
progress = Progress(total=total, name='files', step=100)
bill_processor = BillProcessor()
seen_bill_ids = []
for fname in files:
progress.tick()
# With indexing or events enabled, if the bill metadata file hasn't changed check
# the bill's latest text file for changes so we can create a text-is-available
# event and so we can index the bill's text.
if (not options.congress or options.congress>42) and (bill_index and not options.disable_events) and not File.objects.is_changed(fname) and not options.force:
m = re.search(r"/(\d+)/bills/([a-z]+)(\d+)\.xml$", fname)
try:
b = Bill.objects.get(congress=m.group(1), bill_type=BillType.by_xml_code(m.group(2)), number=m.group(3))
seen_bill_ids.append(b.id)
# Update the index/events for any bill with recently changed text
textfile = get_bill_text_metadata(b, None)
if not textfile:
if b.congress >= 103 and b.introduced_date < (datetime.now()-timedelta(days=14)).date():
print "No bill text?", fname, b.introduced_date
continue
textfile = textfile["text_file"]
if os.path.exists(textfile) and File.objects.is_changed(textfile):
b.update_index(bill_index) # index the full text
b.create_events() # events for new bill text documents
File.objects.save_file(textfile)
continue
except Bill.DoesNotExist:
print "Unchanged metadata file but bill doesn't exist:", fname
pass # just parse as normal
if options.slow:
time.sleep(1)
tree = etree.parse(fname)
for node in tree.xpath('/bill'):
try:
bill = bill_processor.process(Bill(), node)
except:
print fname
raise
seen_bill_ids.append(bill.id) # don't delete me later
示例10: range
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
#!script
from bill.models import BillType
import glob, re, os.path
for congress in range(103, 112+1):
for fn in glob.glob("data/us/bills.text/%d/*/*.xml" % congress):
bill_type, bill_number, print_code, stuff = re.search(r"/([a-z]+)(\d+)([a-z][a-z0-9]*)?(\.gen|\.mods)?\.xml$", fn).groups()
if not print_code: continue # my symbolic links to latest version
if stuff: continue # ".gen".html
bill_type = BillType.by_xml_code(bill_type).slug
fn2 = "data/congress/%d/bills/%s/%s%s/text-versions/%s/mods.xml" % (
congress, bill_type, bill_type, bill_number, print_code)
if not os.path.exists(fn2):
print fn2
示例11: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def main(options):
"""
Parse rolls.
"""
# Setup XML processors
vote_processor = VoteProcessor()
option_processor = VoteOptionProcessor()
voter_processor = VoterProcessor()
voter_processor.PERSON_CACHE = dict((x.pk, x) for x in Person.objects.all())
# The pattern which the roll file matches
# Filename contains info which should be placed to DB
# along with info extracted from the XML file
re_path = re.compile("data/us/(\d+)/rolls/([hs])(\w+)-(\d+)\.xml")
chamber_mapping = {"s": CongressChamber.senate, "h": CongressChamber.house}
if options.filter:
files = glob.glob(options.filter)
log.info("Parsing rolls matching %s" % options.filter)
elif options.congress:
files = glob.glob("data/us/%s/rolls/*.xml" % options.congress)
log.info("Parsing rolls of only congress#%s" % options.congress)
else:
files = glob.glob("data/us/*/rolls/*.xml")
log.info("Processing votes: %d files" % len(files))
total = len(files)
progress = Progress(total=total, name="files", step=10)
def log_delete_qs(qs):
if qs.count() == 0:
return
print "Deleting obsoleted records: ", qs
# if qs.count() > 3:
# print "Delete skipped..."
# return
qs.delete()
seen_obj_ids = set()
had_error = False
for fname in files:
progress.tick()
match = re_path.search(fname)
try:
existing_vote = Vote.objects.get(
congress=match.group(1),
chamber=chamber_mapping[match.group(2)],
session=match.group(3),
number=match.group(4),
)
except Vote.DoesNotExist:
existing_vote = None
if (
not File.objects.is_changed(fname)
and not options.force
and existing_vote != None
and not existing_vote.missing_data
):
seen_obj_ids.add(existing_vote.id)
continue
try:
tree = etree.parse(fname)
## Look for votes with VP tie breakers.
# if len(tree.xpath("/roll/voter[@VP='1']")) == 0:
# had_error = True # prevent delete at the end
# continue
# Process role object
for roll_node in tree.xpath("/roll"):
vote = vote_processor.process(Vote(), roll_node)
if existing_vote:
vote.id = existing_vote.id
match = re_path.search(fname)
vote.congress = int(match.group(1))
vote.chamber = chamber_mapping[match.group(2)]
vote.session = match.group(3)
vote.number = int(match.group(4))
# Get related bill & amendment.
for bill_node in roll_node.xpath("bill"):
related_bill_num = bill_node.get("number")
if 9 <= vote.congress <= 42 and vote.session in ("1", "2"):
# Bill numbering from the American Memory colletion is different. The number combines
# the session, bill number, and a 0 or 5 for regular or 'half' numbering. Prior to
# the 9th congress numbering seems to be wholly assigned by us and not related to
# actual numbering, so we skip matching those bills.
related_bill_num = "%d%04d%d" % (int(vote.session), int(bill_node.get("number")), 0)
try:
vote.related_bill = Bill.objects.get(
congress=bill_node.get("session"),
bill_type=BillType.by_xml_code(bill_node.get("type")),
number=related_bill_num,
#.........这里部分代码省略.........
示例12: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def main(options):
"""
Parse rolls.
"""
# Setup XML processors
vote_processor = VoteProcessor()
option_processor = VoteOptionProcessor()
voter_processor = VoterProcessor()
voter_processor.PERSON_CACHE = dict((x.pk, x) for x in Person.objects.all())
# The pattern which the roll file matches
# Filename contains info which should be placed to DB
# along with info extracted from the XML file
re_path = re.compile('data/us/(\d+)/rolls/([hs])(\w+)-(\d+)\.xml')
chamber_mapping = {'s': CongressChamber.senate,
'h': CongressChamber.house}
if options.filter:
files = glob.glob(options.filter)
log.info('Parsing rolls matching %s' % options.filter)
elif options.congress:
files = glob.glob('data/us/%s/rolls/*.xml' % options.congress)
log.info('Parsing rolls of only congress#%s' % options.congress)
else:
files = glob.glob('data/us/*/rolls/*.xml')
log.info('Processing votes: %d files' % len(files))
total = len(files)
progress = Progress(total=total, name='files', step=10)
def log_delete_qs(qs):
if qs.count() > 0:
try:
print "Deleting: ", qs
except Exception as e:
print "Deleting [%s]..." % str(e)
if qs.count() > 3:
print "Delete skipped..."
return
qs.delete()
seen_obj_ids = set()
had_error = False
for fname in files:
progress.tick()
match = re_path.search(fname)
try:
existing_vote = Vote.objects.get(congress=match.group(1), chamber=chamber_mapping[match.group(2)], session=match.group(3), number=match.group(4))
except Vote.DoesNotExist:
existing_vote = None
if not File.objects.is_changed(fname) and not options.force and existing_vote != None and not existing_vote.missing_data:
seen_obj_ids.add(existing_vote.id)
continue
try:
tree = etree.parse(fname)
## Look for votes with VP tie breakers.
#if len(tree.xpath("/roll/voter[@VP='1']")) == 0:
# had_error = True # prevent delete at the end
# continue
# Process role object
for roll_node in tree.xpath('/roll'):
vote = vote_processor.process(Vote(), roll_node)
if existing_vote: vote.id = existing_vote.id
match = re_path.search(fname)
vote.congress = int(match.group(1))
vote.chamber = chamber_mapping[match.group(2)]
vote.session = match.group(3)
vote.number = int(match.group(4))
for bill_node in roll_node.xpath("bill"):
try:
vote.related_bill = Bill.objects.get(congress=bill_node.get("session"), bill_type=BillType.by_xml_code(bill_node.get("type")), number=bill_node.get("number"))
# for votes on passage, reverse the order of the title so that the
# name of the bill comes first, but keep the vote_type at the end
# to distinguish suspension votes etc. also, the title that comes
# from the upstream source is not formatted in our style.
if vote.category in (VoteCategory.passage, VoteCategory.passage_suspension, VoteCategory.veto_override):
vote.question = truncatewords(vote.related_bill.title, 12) + " (" + vote.vote_type + ")"
except Bill.DoesNotExist:
vote.missing_data = True
vote.save()
seen_obj_ids.add(vote.id) # don't delete me later
# Process roll options, overwrite existing options where possible.
seen_option_ids = set()
roll_options = {}
for option_node in roll_node.xpath('./option'):
option = option_processor.process(VoteOption(), option_node)
#.........这里部分代码省略.........
示例13: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
#.........这里部分代码省略.........
if options.congress and int(options.congress) <= 42:
files = glob.glob("data/congress/%s/bills/*/*/*.xml" % options.congress)
log.info("Parsing unitedstates/congress bills of only congress#%s" % options.congress)
elif options.congress:
files = glob.glob("data/us/%s/bills/*.xml" % options.congress)
log.info("Parsing bills of only congress#%s" % options.congress)
else:
files = glob.glob("data/us/*/bills/*.xml")
if options.filter:
files = [f for f in files if re.match(options.filter, f)]
log.info("Processing bills: %d files" % len(files))
total = len(files)
progress = Progress(total=total, name="files", step=100)
bill_processor = BillProcessor()
seen_bill_ids = []
for fname in files:
progress.tick()
# With indexing or events enabled, if the bill metadata file hasn't changed check
# the bill's latest text file for changes so we can create a text-is-available
# event and so we can index the bill's text.
if (
(not options.congress or options.congress > 42)
and (bill_index and not options.disable_events)
and not File.objects.is_changed(fname)
and not options.force
):
m = re.search(r"/(\d+)/bills/([a-z]+)(\d+)\.xml$", fname)
try:
b = Bill.objects.get(congress=m.group(1), bill_type=BillType.by_xml_code(m.group(2)), number=m.group(3))
seen_bill_ids.append(b.id)
# Update the index/events for any bill with recently changed text
textfile = get_bill_text_metadata(b, None)
if not textfile:
if b.congress >= 103 and b.introduced_date < (datetime.now() - timedelta(days=14)).date():
print "No bill text?", fname, b.introduced_date
continue
textfile = textfile["text_file"]
if os.path.exists(textfile) and File.objects.is_changed(textfile):
bill_index.update_object(b, using="bill") # index the full text
b.create_events() # events for new bill text documents
File.objects.save_file(textfile)
continue
except Bill.DoesNotExist:
print "Unchanged metadata file but bill doesn't exist:", fname
pass # just parse as normal
if options.slow:
time.sleep(1)
tree = etree.parse(fname)
for node in tree.xpath("/bill"):
try:
bill = bill_processor.process(Bill(), node)
except:
print fname
raise
seen_bill_ids.append(bill.id) # don't delete me later
示例14: main
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def main(options):
"""
Parse rolls.
"""
# Setup XML processors
vote_processor = VoteProcessor()
option_processor = VoteOptionProcessor()
voter_processor = VoterProcessor()
voter_processor.PERSON_CACHE = dict((x.pk, x) for x in Person.objects.all())
chamber_mapping = {'s': CongressChamber.senate,
'h': CongressChamber.house}
if options.filter:
files = glob.glob(options.filter)
log.info('Parsing rolls matching %s' % options.filter)
elif options.congress:
files = glob.glob(settings.CONGRESS_DATA_PATH + '/%s/votes/*/*/data.xml' % options.congress)
log.info('Parsing rolls of only congress#%s' % options.congress)
else:
files = glob.glob('data/congress/*/votes/*/*/data.xml')
log.info('Processing votes: %d files' % len(files))
total = len(files)
progress = Progress(total=total, name='files', step=10)
def log_delete_qs(qs):
if qs.count() == 0: return
print("Deleting obsoleted records: ", qs)
#if qs.count() > 3:
# print "Delete skipped..."
# return
qs.delete()
seen_obj_ids = set()
had_error = False
for fname in files:
progress.tick()
match = re.match(r"data/congress/(?P<congress>\d+)/votes/(?P<session>[ABC0-9]+)/(?P<chamber>[hs])(?P<number>\d+)/data.xml$", fname)
try:
existing_vote = Vote.objects.get(congress=int(match.group("congress")), chamber=chamber_mapping[match.group("chamber")], session=match.group("session"), number=int(match.group("number")))
except Vote.DoesNotExist:
existing_vote = None
if not File.objects.is_changed(fname) and not options.force and existing_vote != None and not existing_vote.missing_data:
seen_obj_ids.add(existing_vote.id)
continue
try:
tree = etree.parse(fname)
## Look for votes with VP tie breakers.
#if len(tree.xpath("/roll/voter[@VP='1']")) == 0:
# had_error = True # prevent delete at the end
# continue
# Process role object
roll_node = tree.xpath('/roll')[0]
# Sqlite is much faster when lots of saves are wrapped in a transaction,
# and we do a lot of saves because it's a lot of voters.
from django.db import transaction
with transaction.atomic():
vote = vote_processor.process(Vote(), roll_node)
if existing_vote: vote.id = existing_vote.id
vote.congress = int(match.group("congress"))
vote.chamber = chamber_mapping[match.group("chamber")]
vote.session = match.group("session")
vote.number = int(match.group("number"))
# Get related bill & amendment.
for bill_node in roll_node.xpath("bill"):
related_bill_num = bill_node.get("number")
if 9 <= vote.congress <= 42 and vote.session in ('1', '2'):
# Bill numbering from the American Memory colletion is different. The number combines
# the session, bill number, and a 0 or 5 for regular or 'half' numbering. Prior to
# the 9th congress numbering seems to be wholly assigned by us and not related to
# actual numbering, so we skip matching those bills.
related_bill_num = "%d%04d%d" % (int(vote.session), int(bill_node.get("number")), 0)
try:
vote.related_bill = Bill.objects.get(congress=bill_node.get("session"), bill_type=BillType.by_xml_code(bill_node.get("type")), number=related_bill_num)
except Bill.DoesNotExist:
if vote.congress >= 93:
vote.missing_data = True
for amdt_node in roll_node.xpath("amendment"):
if amdt_node.get("ref") == "regular" and vote.related_bill is not None:
try:
vote.related_amendment = Amendment.objects.get(congress=vote.related_bill.congress, amendment_type=AmendmentType.by_slug(amdt_node.get("number")[0]+"amdt"), number=amdt_node.get("number")[1:])
except Amendment.DoesNotExist:
if vote.congress >= 93:
print("Missing amendment", fname)
vote.missing_data = True
elif amdt_node.get("ref") == "bill-serial":
# It is impossible to associate House votes with amendments just from the House
#.........这里部分代码省略.........
示例15: dereference
# 需要导入模块: from bill.models import BillType [as 别名]
# 或者: from bill.models.BillType import by_xml_code [as 别名]
def dereference(ref):
m = re.match(r"([a-z]+)(\d+)-(\d+)", ref)
bill_type = BillType.by_xml_code(m.group(1))
bill = Bill.objects.get(congress=m.group(2), bill_type=bill_type, number=m.group(3))
return bill