Skip to content

Commit

Permalink
closes #1 add scripts to import members from spreadsheet
Browse files Browse the repository at this point in the history
  • Loading branch information
matuu committed Apr 30, 2018
1 parent 9c8a7aa commit 23d4a5a
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 0 deletions.
1 change: 1 addition & 0 deletions scripts/client_secret.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"installed":{"client_id":"522798611136-qk0f8arqocub77ncf0b19hgh6orhn9rm.apps.googleusercontent.com","project_id":"readgdrivepython","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"waZZkSAYI0rLtAkTa4oCxpeY","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}}
30 changes: 30 additions & 0 deletions scripts/get_members.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import csv

from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

# Please, adjust this values:
SPREADSHEET_ID = '1eewdZtKJY3cDOiRaB6sAYo2lQ7jTEeZoV4f-U1dzRIY'
RANGE_NAME = 'Humanos!A2:T'

# Setup the Sheets API
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('sheets', 'v4', http=creds.authorize(Http()))

# Call the Sheets API
result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
range=RANGE_NAME).execute()
values = result.get('values', [])
if not values:
print('No data found.')
else:
with open('ac_members.csv', 'w') as f:
writer = csv.writer(f)
for row in values:
writer.writerow(row)
Empty file.
Empty file.
62 changes: 62 additions & 0 deletions website/members/management/commands/import_members.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import csv
import os
from datetime import datetime

from django.core.management.base import BaseCommand, CommandError

from members.models import Person, Member, Category


class Command(BaseCommand):
help = "Import members from csv generated with data from Google Spreadsheet"

def add_arguments(self, parser):
parser.add_argument('filename', type=str)

def handle(self, *args, **options):
if options['filename'] == None:
raise CommandError("You must specify the path of file.")

# make sure file path resolves
if not os.path.isfile(options['filename']):
raise CommandError("File has no exists.")

dataReader = csv.reader(open(options["filename"]), delimiter=',', quotechar='"')
for member_value in dataReader:
person = self.get_or_create_person(member_value)
category = self.get_or_create_category(member_value)
member, created = Member.objects.update_or_create(
legal_id=member_value[0].strip(),
defaults={
'registration_date': datetime.strptime(member_value[1].strip(), "%d/%M/%Y"),
'category': category,
'person': person,
'has_student_certificate': True if category.name == 'Estudiante' else False,
'has_subscription_letter': True
})
self.stdout.write("Member imported: {})".format(member))

def get_or_create_category(self, values):
category, created = Category.objects.get_or_create(
name=values[5].strip(),
defaults={
'description': values[5].strip(),
'fee': 0
})
return category

def get_or_create_person(self, values):
person, created = Person.objects.update_or_create(
first_name=values[3].strip(),
last_name=values[4].strip(),
email=values[7].strip(),
defaults={
'document_number': values[6].strip(),
'nickname': values[8].strip(),
'nationality': values[10].strip(),
'marital_status': values[11].strip(),
'occupation': values[12].strip(),
'birth_date': datetime.strptime(values[13].strip(), "%d/%M/%Y"),
'street_address': values[14].strip()
})
return person
9 changes: 9 additions & 0 deletions website/members/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ class Member(TimeStampedModel):
has_student_certificate = models.BooleanField(default=False)
has_subscription_letter = models.BooleanField(default=False)

def __str__(self):
return "{} - {}".format(
"%s".zfill(5) % self.legal_id,
self.person)


class Person(TimeStampedModel):
"""Human being, member of PyAr ONG."""
Expand Down Expand Up @@ -58,6 +63,10 @@ class Person(TimeStampedModel):
country = models.CharField(max_length=DEFAULT_MAX_LEN, blank=True)


def __str__(self):
return "%s, %s" % (self.last_name, self.first_name)


class Organization(TimeStampedModel):
"""Organization (legal), member of the ONG."""
name = models.CharField(max_length=DEFAULT_MAX_LEN, blank=True)
Expand Down

0 comments on commit 23d4a5a

Please sign in to comment.