-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch '529-mps-standing-down' into staging
- Loading branch information
Showing
19 changed files
with
1,253 additions
and
683 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,11 @@ | ||
SECRET_KEY="secr3t-k3y" | ||
GOOGLE_ANALYTICS="" | ||
GOOGLE_SITE_VERIFICATION="" | ||
MAILCHIMP_MYSOC_KEY="" | ||
MAILCHIMP_MYSOC_SERVER_PREFIX="" | ||
MAILCHIMP_MYSOC_LIST_ID="" | ||
MAILCHIMP_MYSOC_DATA_UPDATE_TAG="" | ||
MAILCHIMP_MYSOC_CLIMATE_INTEREST="" | ||
MAILCHIMP_TCC_KEY="" | ||
MAILCHIMP_TCC_SERVER_PREFIX="" | ||
MAILCHIMP_TCC_LIST_ID="" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
from django.conf import settings | ||
from django.core.management.base import BaseCommand | ||
|
||
import pandas as pd | ||
from tqdm import tqdm | ||
|
||
from hub.models import AreaType, DataSet, DataType, Person, PersonData | ||
|
||
|
||
class Command(BaseCommand): | ||
help = "Import MPs standing down in 2024" | ||
data_file = settings.BASE_DIR / "data" / "mps_standing_down_2024.xlsx" | ||
data_url = ( | ||
"https://researchbriefings.files.parliament.uk/documents/CBP-9808/CBP-9808.xlsx" | ||
) | ||
|
||
name_map = { | ||
"John Cruddas": "Jon Cruddas", | ||
"Matt Hancock": "Matthew Hancock", | ||
"William Cash": "Bill Cash", | ||
"Robert Neill": "Bob Neill", | ||
} | ||
|
||
def get_area_type(self): | ||
return AreaType.objects.get(code="WMC") | ||
|
||
def handle(self, quiet=False, *args, **options): | ||
self._quiet = quiet | ||
self.data_types = self.create_data_types() | ||
df = self.get_df() | ||
self.import_results(df) | ||
|
||
def get_person_from_name(self, name): | ||
name = self.name_map.get(name, name) | ||
try: | ||
person = Person.objects.get(name=name, person_type="MP") | ||
return person | ||
except Person.DoesNotExist: | ||
self.stderr.write(f"could not find a person for {name}") | ||
return None | ||
|
||
def get_df(self): | ||
df = pd.read_excel(self.data_file, header=1, sheet_name="MPs standing down") | ||
df = df.dropna(subset=["Name"]) | ||
df.Name = df.Name.str.strip() | ||
df.Name = df.Name.str.replace("Sir |Dame |Dr ", "", regex=True) | ||
df["mp"] = df.Name.apply(lambda name: self.get_person_from_name(name)) | ||
return df[["mp", "Date announced"]] | ||
|
||
def create_data_types(self): | ||
options = [{"title": "Standing Down", "shader": "purple-500"}] | ||
data_types = {} | ||
|
||
ds, created = DataSet.objects.update_or_create( | ||
name="mp_standing_down_2024", | ||
defaults={ | ||
"data_type": "string", | ||
"label": "MP standing down at the 2024 election", | ||
"source_label": "Data from the House of Commons Library.", | ||
"release_date": "April 2024", | ||
"source": "https://commonslibrary.parliament.uk/research-briefings/cbp-9808/", | ||
"data_url": "https://researchbriefings.files.parliament.uk/documents/CBP-9808/CBP-9808.xlsx", | ||
"table": "person__persondata", | ||
"options": options, | ||
"subcategory": "", | ||
"comparators": DataSet.comparators_default(), | ||
"public": True, | ||
}, | ||
) | ||
ds.areas_available.add(self.get_area_type()) | ||
data_type, created = DataType.objects.update_or_create( | ||
data_set=ds, | ||
name="mp_standing_down_2024", | ||
area_type=self.get_area_type(), | ||
defaults={"data_type": "text"}, | ||
) | ||
|
||
data_types["mp_standing_down_2024"] = data_type | ||
|
||
return data_types | ||
|
||
def import_results(self, df): | ||
self.stdout.write("Importing MPs standing down") | ||
for index, row in tqdm(df.iterrows(), disable=self._quiet): | ||
if not pd.isna(row.mp): | ||
data, created = PersonData.objects.update_or_create( | ||
person=row.mp, | ||
data_type=self.data_types["mp_standing_down_2024"], | ||
data="Standing Down", | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from django.conf import settings | ||
from django.core.management.base import BaseCommand | ||
|
||
import mailchimp_marketing as MailchimpMarketing | ||
from mailchimp_marketing.api_client import ApiClientError | ||
|
||
|
||
class Command(BaseCommand): | ||
def handle(self, *args, **kwargs): | ||
try: | ||
client = MailchimpMarketing.Client() | ||
client.set_config( | ||
{ | ||
"api_key": settings.MAILCHIMP_MYSOC_KEY, | ||
"server": settings.MAILCHIMP_MYSOC_SERVER_PREFIX, | ||
} | ||
) | ||
response = client.ping.get() | ||
print(response) | ||
except ApiClientError as error: | ||
print(error) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<form class="mailing-list-signup js-mailing-list-signup {{ classes }}" method="POST" action="{% url 'mailing_list_signup' %}"> | ||
{% csrf_token %} | ||
<h2 class="h4 mt-0">Want to know when we add new data?</h2> | ||
<fieldset class="mw-30rem"> | ||
<legend class="float-none mb-0">Tell us your email address and we’ll notify you when we add new data to the Local Intelligence Hub.</legend> | ||
<div class="mt-3 js-mailing-list-email"> | ||
<label class="form-label" for="email">Email address</label> | ||
<input type="email" name="email" id="email" class="form-control" autocomplete="email" spellcheck="false"> | ||
{% if form.errors.email %} | ||
<div class="invalid-feedback d-block fs-6 mt-2 mb-n3"> | ||
{{ form.errors.email }} | ||
</div> | ||
{% endif %} | ||
</div> | ||
<div class="mt-3 js-mailing-list-name"> | ||
<label class="form-label" for="full_name">Name</label> | ||
<input type="text" name="full_name" id="full_name" class="form-control"> | ||
{% if form.errors.full_name %} | ||
<div class="invalid-feedback d-block fs-6 mt-2 mb-n3"> | ||
{{ form.errors.full_name }} | ||
</div> | ||
{% endif %} | ||
</div> | ||
</fieldset> | ||
<fieldset class="mt-4 js-mailing-list-extras mw-30rem"> | ||
<legend>You can also, optionally, join our newsletters for more inspiration on data, democracy, and climate action:</legend> | ||
<div class="form-check"> | ||
<input class="form-check-input" type="checkbox" value="yes" name="mysoc_signup" id="mysoc_signup"> | ||
<label class="form-check-label" for="mysoc_signup"> | ||
mySociety newsletter | ||
<a href="https://www.mysociety.org/privacy/" target="_blank" title="Opens in a new window">(privacy policy)</a> | ||
</label> | ||
</div> | ||
<div class="form-check mt-2"> | ||
<input class="form-check-input" type="checkbox" value="yes" name="tcc_signup" id="tcc_signup"> | ||
<label class="form-check-label" for="tcc_signup"> | ||
The Climate Coalition newsletter | ||
<a href="https://www.theclimatecoalition.org/privacy-policy" target="_blank" title="Opens in a new window">(privacy policy)</a> | ||
</label> | ||
</div> | ||
</fieldset> | ||
<button type="submit" class="btn btn-primary mt-4">Subscribe</button> | ||
</form> | ||
|
||
<div class="d-none js-mailing-list-success"> | ||
<h2 class="h4 mt-0">Thanks for signing up!</h2> | ||
<p class="mw-30rem">We’ll let you know when there’s new data we think you’ll be interested in, on the Local Intelligence Hub.</p> | ||
</div> |
Oops, something went wrong.