diff --git a/cceexplorer/__init__.py b/cceexplorer/__init__.py new file mode 100644 index 0000000..5a13ee7 --- /dev/null +++ b/cceexplorer/__init__.py @@ -0,0 +1,99 @@ +import secrets + +from flask import Flask +from flask import render_template +from flask_bootstrap import Bootstrap + +from .leglib.billdb import BillDB, BillQuery, QueryField, QueryAll +from .leglib.parsers import HSYIGPdfParser + +parser = HSYIGPdfParser.from_filename( + filename="YIGVolunteerBook2024.pdf", + confname="HSVolunteer" +) +parser.parse() +db = BillDB() +db.add_conference(parser=parser) + +def create_app(test_config=None): + app = Flask(__name__, instance_relative_config=True) + app.config.from_mapping( + SECRET_KEY=str(secrets.randbelow(100000000)) + ) + + Bootstrap(app) + + @app.route('/') + def index(): + bills = db.search(query=QueryAll) + return render_template('index.html', number_bills=len(bills), number_conferences=2, bills=bills) + + @app.route('/legislation//') + def show_conference(conference=QueryField.Any): + return conference + + @app.route('/legislation///') + def show_color( + conference=QueryField.Any, + year=QueryField.Any, + color=QueryField.Any, + ): + bills = db.search(query=BillQuery( + color=color, + year=int(year), + )) + return render_template('color.html', bills=bills) + + @app.route('/legislation////') + def show_assembly( + conference=QueryField.Any, + assembly=QueryField.Any, + color=QueryField.Any, + year=QueryField.Any, + ): + bills = db.search(query=BillQuery( + color=color, + assembly=assembly, + year=int(year), + )) + return render_template('assembly.html', bills=bills) + + @app.route('/legislation/////') + def show_committee( + conference=QueryField.Any, + assembly=QueryField.Any, + color=QueryField.Any, + year=QueryField.Any, + committee=QueryField.Any, + ): + bills = db.search(query=BillQuery( + color=QueryField.Any, + assembly=assembly, + year=int(year), + committee=int(committee), + )) + + return render_template('committee.html', bills=bills) + + @app.route('/legislation//////') + def show_bill( + conference=QueryField.Any, + assembly=QueryField.Any, + color=QueryField.Any, + year=QueryField.Any, + committee=QueryField.Any, + order=QueryField.Any, + ): + print(order, int(order)) + print(color, assembly, year, committee, order) + bills = db.search(query=BillQuery( + color=color, + assembly=assembly, + year=int(year), + committee=int(committee), + order=int(order), + )) + + return render_template("bill.html", bill=bills[0]) + + return app diff --git a/analyser.py b/cceexplorer/analyser.py similarity index 93% rename from analyser.py rename to cceexplorer/analyser.py index 3477948..2507630 100644 --- a/analyser.py +++ b/cceexplorer/analyser.py @@ -1,4 +1,3 @@ -import leglib #billdb import BillDB, BillQuery, QueryField, QueryAll from leglib.billdb import BillDB, BillQuery, QueryField, QueryAll from leglib.parsers import HSYIGPdfParser diff --git a/leglib/__main__.py b/cceexplorer/leglib/__main__.py similarity index 100% rename from leglib/__main__.py rename to cceexplorer/leglib/__main__.py diff --git a/leglib/billdb.py b/cceexplorer/leglib/billdb.py similarity index 89% rename from leglib/billdb.py rename to cceexplorer/leglib/billdb.py index 13bdf90..893b5f9 100644 --- a/leglib/billdb.py +++ b/cceexplorer/leglib/billdb.py @@ -26,10 +26,11 @@ class BillQuery: """ Holds a query for the BillDB. """ - color: CCEColors | QueryField = QueryField.Any - assembly: CCEAssemblies | QueryField = QueryField.Any + color: str | CCEColors | QueryField = QueryField.Any + assembly: str | CCEAssemblies | QueryField = QueryField.Any committee: int | QueryField = QueryField.Any year: int | QueryField = QueryField.Any + order: int | QueryField = QueryField.Any subcommittee: str | QueryField = QueryField.Any sponsors: str | QueryField = QueryField.Any school: str | QueryField = QueryField.Any @@ -98,6 +99,7 @@ class BillDB: results = [] for bill in self.bills: try: +# print("debug, q: {}, b: {}".format(str(query.committee), str(bill.code.committee))) self.code_enum_match(bill, query, "color") self.code_enum_match(bill, query, "assembly") @@ -105,6 +107,10 @@ class BillDB: if not query.committee == bill.code.committee: raise SearchNotSatisified() + if not query.order == QueryField.Any: + if not query.order == bill.code.docketplacement: + raise SearchNotSatisified() + if not query.committee == QueryField.Any: if not query.year == bill.code.year: raise SearchNotSatisified() diff --git a/leglib/common.py b/cceexplorer/leglib/common.py similarity index 54% rename from leglib/common.py rename to cceexplorer/leglib/common.py index b21f225..3b6d434 100644 --- a/leglib/common.py +++ b/cceexplorer/leglib/common.py @@ -87,3 +87,75 @@ class Bill: @property def bill_text_concat(self): return ''.join(self.bill_text) + + @property + def url(self): + if self.code.conference: + return "/legislation/" + '/'.join([ + self.code.conference, + self.code.color, + self.code.assembly, + str(self.code.year), + str(self.code.committee), + str(self.code.docketplacement) + ]) + else: + return "/legislation/" + '/'.join([ + "defaultconf", + self.code.color, + self.code.assembly, + str(self.code.year), + str(self.code.committee), + str(self.code.docketplacement) + ]) + + @property + def committee_url(self): + if self.code.conference: + return "/legislation/" + '/'.join([ + self.code.conference, + self.code.color, + self.code.assembly, + str(self.code.year), + str(self.code.committee) + ]) + else: + return "/legislation/" + '/'.join([ + "defaultconf", + self.code.color, + self.code.assembly, + str(self.code.year), + str(self.code.committee) + ]) + + @property + def assembly_url(self): + if self.code.conference: + return "/legislation/" + '/'.join([ + self.code.conference, + self.code.color, + self.code.assembly, + str(self.code.year), + ]) + else: + return "/legislation/" + '/'.join([ + "defaultconf", + self.code.color, + self.code.assembly, + str(self.code.year), + ]) + + @property + def color_url(self): + if self.code.conference: + return "/legislation/" + '/'.join([ + self.code.conference, + self.code.color, + str(self.code.year), + ]) + else: + return "/legislation/" + '/'.join([ + "defaultconf", + self.code.color, + str(self.code.year), + ]) diff --git a/leglib/lib.py b/cceexplorer/leglib/lib.py similarity index 100% rename from leglib/lib.py rename to cceexplorer/leglib/lib.py diff --git a/leglib/parsers.py b/cceexplorer/leglib/parsers.py similarity index 100% rename from leglib/parsers.py rename to cceexplorer/leglib/parsers.py diff --git a/cceexplorer/templates/assembly.html b/cceexplorer/templates/assembly.html new file mode 100644 index 0000000..1ac5cda --- /dev/null +++ b/cceexplorer/templates/assembly.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block title %} testing title {% endblock %} +{% block defcontent %} +

{{ bills[0].code.color }} {{ bills[0].code.assembly }}

+ + {% for bill in bills %} +
+ ({{bill.code.assembly[0]}}{{bill.code.committee}}/{{bill.code.docketplacement}}) {{ bill.title }} +

Sponsors: {{ bill.sponsors }}

+

School: {{ bill.school }}

+
+ {% endfor %} +{% endblock %} diff --git a/cceexplorer/templates/base.html b/cceexplorer/templates/base.html new file mode 100644 index 0000000..2613103 --- /dev/null +++ b/cceexplorer/templates/base.html @@ -0,0 +1,32 @@ +{% extends "bootstrap/base.html" %} + +{% block navbar %} + +{% endblock %} + +{% block content %} +
+ {% block defcontent %}{% endblock %} +
+{% endblock %} diff --git a/cceexplorer/templates/bill.html b/cceexplorer/templates/bill.html new file mode 100644 index 0000000..256c200 --- /dev/null +++ b/cceexplorer/templates/bill.html @@ -0,0 +1,28 @@ +{% extends "base.html" %} + +{% block title %} cceexplorer - {{ bill.title }} {% endblock %} +{% block defcontent %} +
+
+
+

{{ bill.code.stringrep }}

+

{{ bill.title }}

+

Introduced by {{ bill.sponsors }} (of {{ bill.school }}) within the {{ bill.subcommittee }} subcommittee

+
+ +
+
+
+ {% for line in bill.bill_text %} + {% if line == "" %} + {% endif %} +

{{ line }}

+ {% endfor %} +
+
+
+{% endblock %} diff --git a/cceexplorer/templates/color.html b/cceexplorer/templates/color.html new file mode 100644 index 0000000..4795c2d --- /dev/null +++ b/cceexplorer/templates/color.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block title %} testing title {% endblock %} +{% block defcontent %} +

All {{bills[0].code.color}} Legislation

+ + {% for bill in bills %} +
+ ({{bill.code.committee}}/{{bill.code.docketplacement}}) {{ bill.title }} +

Sponsors: {{ bill.sponsors }}

+

School: {{ bill.school }}

+
+ {% endfor %} +{% endblock %} diff --git a/cceexplorer/templates/committee.html b/cceexplorer/templates/committee.html new file mode 100644 index 0000000..782be7c --- /dev/null +++ b/cceexplorer/templates/committee.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block title %} testing title {% endblock %} +{% block defcontent %} +

{{ bills[0].code.assembly }} Committee {{ bills[0].code.committee }}

+ + {% for bill in bills %} +
+ ({{bill.code.color}}) {{ bill.title }} +

Sponsors: {{ bill.sponsors }}

+

School: {{ bill.school }}

+
+ {% endfor %} +{% endblock %} diff --git a/cceexplorer/templates/conference.html b/cceexplorer/templates/conference.html new file mode 100644 index 0000000..a86bf03 --- /dev/null +++ b/cceexplorer/templates/conference.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% block title %} testing title {% endblock %} +{% block defcontent %} +

{{ bills[0].code.color }} {{ bills[0].code.assembly }}

+ + {% for bill in bills %} +
+ ({{bill.code.assembly[0]}}{{bill.code.committee}}/{{bill.code.docketplacement}}) {{ bill.title }} +

Sponsors: {{ bill.sponsors }}

+

School: {{ bill.school }}

+
+ {% endfor %} +{% endblock %} + diff --git a/cceexplorer/templates/index.html b/cceexplorer/templates/index.html new file mode 100644 index 0000000..ec2a203 --- /dev/null +++ b/cceexplorer/templates/index.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% block title %} testing title {% endblock %} +{% block defcontent %} +

Welcome to cceexplorer

+

an interactive database with {{ number_bills }} bills and {{ number_conferences }} conferences

+

here's all of them, down here!

+ +{% endblock %} diff --git a/cceexplorer/templates/main.html b/cceexplorer/templates/main.html new file mode 100644 index 0000000..f84c49b --- /dev/null +++ b/cceexplorer/templates/main.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} + +{% block title %} testing title {% endblock %} +{% block defcontent %} +

testing

+{% endblock %} diff --git a/shell.nix b/shell.nix index d3892c7..b848985 100644 --- a/shell.nix +++ b/shell.nix @@ -4,5 +4,6 @@ nativeBuildInputs = with pkgs; [ buildPackages.python311Packages.pymupdf buildPackages.python311Packages.flask + buildPackages.python311Packages.flask-bootstrap ]; }