crunk
11 months ago
11 changed files with 278 additions and 346 deletions
@ -0,0 +1,238 @@ |
|||
import csv |
|||
import os |
|||
import shutil |
|||
from tempfile import NamedTemporaryFile |
|||
|
|||
SCRIPT_DIR = os.path.dirname(__file__) |
|||
DATA_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "../data")) |
|||
FIELDNAMES = [ |
|||
"Id", |
|||
"Publication", |
|||
"Author", |
|||
"Year", |
|||
"Custodian", |
|||
"Fields", |
|||
"Type", |
|||
"Publishers", |
|||
"License", |
|||
"LicenseShort", |
|||
"Highlights", |
|||
"Comments", |
|||
"Currently borrowed by", |
|||
] |
|||
|
|||
class CsvParser: |
|||
def __init__(self, csv_file, image_dir): |
|||
self.csv_file = csv_file |
|||
self.image_dir = image_dir |
|||
|
|||
|
|||
def _hasimage(self, id): |
|||
"""does this Id from the csv have an image uploaded""" |
|||
image_jpg = os.path.join(self.image_dir, "image-{0}.jpg".format(id)) |
|||
if os.path.exists(image_jpg): |
|||
return True |
|||
else: |
|||
return False |
|||
|
|||
|
|||
def parsecsv(self): |
|||
"""Test function to inspect csv file as dict""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
return csv_as_dict |
|||
|
|||
|
|||
def getpublications(self): |
|||
"""get an overview of all publications for the main page""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
publications = {} |
|||
for row in csv_as_dict: |
|||
year = row["Year"] |
|||
if not year: |
|||
year = "Unknown" |
|||
|
|||
pubinfo = { |
|||
"Title": row["Publication"], |
|||
"Author": row["Author"], |
|||
"Type": row["Type"].lower().title(), |
|||
"Year": year, |
|||
"License": row["License"].lower().title(), |
|||
"Image": self._hasimage(row["Id"]), |
|||
} |
|||
publications[row["Id"]] = pubinfo |
|||
return publications |
|||
|
|||
|
|||
def gettypes(self): |
|||
"""for the dynamic menu get the unique types of publicatons""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
listoftypes = [] |
|||
for row in csv_as_dict: |
|||
lowertype = row["Type"].lower().title() |
|||
if lowertype not in listoftypes: |
|||
listoftypes.append(lowertype) |
|||
return listoftypes |
|||
|
|||
|
|||
def getyears(self): |
|||
"""for the dynamic menu get the unique years for publicatons""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
listofyears = [] |
|||
for row in csv_as_dict: |
|||
uniqueyear = row["Year"] |
|||
if not uniqueyear: |
|||
uniqueyear = "Unknown" |
|||
if uniqueyear not in listofyears: |
|||
listofyears.append(uniqueyear) |
|||
listofyears.sort() |
|||
return listofyears |
|||
|
|||
|
|||
def getlicenses(self): |
|||
"""for the dynamic menu get the unique liscenses for publicatons""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
listoflicenses = [] |
|||
for row in csv_as_dict: |
|||
license = row["License"].lower().title() |
|||
if not license: |
|||
license = "No License Mentioned" |
|||
if license not in listoflicenses: |
|||
listoflicenses.append(license) |
|||
return listoflicenses |
|||
|
|||
|
|||
def getfieldsofinterest(self): |
|||
"""for the R&R page get the fields of interest from the publicatons""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
fieldsofinterest = {} |
|||
for row in csv_as_dict: |
|||
fields = row["Fields"].split(",") |
|||
fieldsofinterest[row["Id"]] = fields |
|||
return fieldsofinterest |
|||
|
|||
|
|||
def getpublicationfromcsvrow(self, row): |
|||
"""get entire publication info from a csv row""" |
|||
year = row["Year"] |
|||
if not year: |
|||
year = "Unknown" |
|||
|
|||
license = row["License"] |
|||
if not license: |
|||
license = "No license mentioned" |
|||
|
|||
borrowed = row["Currently borrowed by"] |
|||
if not borrowed: |
|||
borrowed = "No one" |
|||
|
|||
pubinfo = { |
|||
"Title": row["Publication"], |
|||
"Author": row["Author"], |
|||
"Year": year, |
|||
"Custodian": row["Custodian"], |
|||
"Fields": row["Fields"], |
|||
"Type": row["Type"], |
|||
"Publishers": row["Publishers"], |
|||
"License": license, |
|||
"Highlights": row["Highlights"], |
|||
"Comments": row["Comments"], |
|||
"Borrowed": borrowed, |
|||
"Image": self._hasimage(self, row["Id"]), |
|||
} |
|||
return pubinfo |
|||
|
|||
|
|||
def getfullpublication(self, pubid): |
|||
"""For the single book view, most complete overview""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
pubinfo = {} |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
for row in csv_as_dict: |
|||
if pubid == row["Id"]: |
|||
pubinfo = getpublicationfromcsvrow(row) |
|||
|
|||
# print(pubinfo) |
|||
return pubinfo |
|||
|
|||
|
|||
def generatenewpublicationid(self): |
|||
"""When uploading a book generate a new unique ID""" |
|||
libcsv = open(os.path.join(DATA_DIR, self.csv_file), "r") |
|||
allidsincsv = [] |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
for row in csv_as_dict: |
|||
allidsincsv.append(int(row["Id"])) |
|||
return str(max(allidsincsv) + 1) |
|||
|
|||
|
|||
def writepublication(self, uploadform): |
|||
"""When uploading a publication writes entry to the csv""" |
|||
id = generatenewpublicationid() |
|||
with open( |
|||
os.path.join(DATA_DIR, "varlib.csv"), "a", newline="" |
|||
) as csvfile: |
|||
csv_as_writer = csv.DictWriter(csvfile, FIELDNAMES=FIELDNAMES) |
|||
csv_as_writer.writerow( |
|||
{ |
|||
"Id": id, |
|||
"Publication": uploadform.uploadpublication.data, |
|||
"Author": uploadform.author.data, |
|||
"Year": uploadform.year.data, |
|||
"Custodian": uploadform.custodian.data, |
|||
"Fields": uploadform.fields.data, |
|||
"Type": uploadform.type.data, |
|||
"Publishers": uploadform.publishers.data, |
|||
"License": uploadform.license.data, |
|||
"LicenseShort": uploadform.licenseshort.data, |
|||
"Highlights": uploadform.highlights.data, |
|||
"Comments": uploadform.comments.data, |
|||
"Currently borrowed by": uploadform.borrowed.data, |
|||
} |
|||
) |
|||
print("succesfully written book to csv") |
|||
return id |
|||
|
|||
|
|||
def editborrowedby(self, pubid, borrower): |
|||
"""Edits the borrowed by field for a publication entry in csv""" |
|||
tempfile = NamedTemporaryFile("w+t", newline="", delete=False) |
|||
filename = os.path.join(DATA_DIR, "varlib.csv") |
|||
with open(filename, "r", newline="") as libcsv, tempfile: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
csv_as_writer = csv.DictWriter(tempfile, FIELDNAMES=FIELDNAMES) |
|||
# use the reader to read where, then writer to write the new row. |
|||
csv_as_writer.writeheader() |
|||
for row in csv_as_dict: |
|||
if pubid == row["Id"]: |
|||
print("publication changes borrower") |
|||
print(row["Publication"]) |
|||
row["Currently borrowed by"] = borrower |
|||
csv_as_writer.writerow(row) |
|||
|
|||
shutil.move(tempfile.name, filename) |
|||
|
|||
|
|||
def concatenate_csv_row(self, row): |
|||
rowcontent = [] |
|||
rowcontent.append(row["Publication"]) |
|||
rowcontent.append(row["Author"]) |
|||
rowcontent.append(row["Fields"]) |
|||
rowcontent.append(row["Type"]) |
|||
rowcontent.append(row["Publishers"]) |
|||
rowcontent.append(row["Highlights"]) |
|||
rowcontent.append(row["Comments"]) |
|||
return " ".join(rowcontent) |
@ -1,236 +0,0 @@ |
|||
"""This parses the varlib.csv but only in a way |
|||
that is actually useful for the site""" |
|||
import csv |
|||
import os |
|||
import shutil |
|||
from tempfile import NamedTemporaryFile |
|||
|
|||
script_dir = os.path.dirname(__file__) |
|||
data_dir = os.path.abspath(os.path.join(script_dir, "../data")) |
|||
image_dir = os.path.abspath(os.path.join(script_dir, "../static/images")) |
|||
fieldnames = [ |
|||
"Id", |
|||
"Publication", |
|||
"Author", |
|||
"Year", |
|||
"Custodian", |
|||
"Fields", |
|||
"Type", |
|||
"Publishers", |
|||
"License", |
|||
"LicenseShort", |
|||
"Highlights", |
|||
"Comments", |
|||
"Currently borrowed by", |
|||
] |
|||
|
|||
|
|||
def parsecsv(): |
|||
"""Test function to inspect csv file as dict""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
return csv_as_dict |
|||
|
|||
|
|||
def getpublications(): |
|||
"""get an overview of all publications for the main page""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
publications = {} |
|||
for row in csv_as_dict: |
|||
year = row["Year"] |
|||
if not year: |
|||
year = "Unknown" |
|||
|
|||
pubinfo = { |
|||
"Title": row["Publication"], |
|||
"Author": row["Author"], |
|||
"Type": row["Type"].lower().title(), |
|||
"Year": year, |
|||
"License": row["LicenseShort"].lower().title(), |
|||
"Image": hasimage(row["Id"]), |
|||
} |
|||
publications[row["Id"]] = pubinfo |
|||
return publications |
|||
|
|||
|
|||
def hasimage(id): |
|||
"""does this Id from the csv have an image uploaded""" |
|||
image_jpg = os.path.join(image_dir, "image-{0}.jpg".format(id)) |
|||
if os.path.exists(image_jpg): |
|||
return True |
|||
else: |
|||
return False |
|||
|
|||
|
|||
def gettypes(): |
|||
"""for the dynamic menu get the unique types of publicatons""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
listoftypes = [] |
|||
for row in csv_as_dict: |
|||
lowertype = row["Type"].lower().title() |
|||
if lowertype not in listoftypes: |
|||
listoftypes.append(lowertype) |
|||
return listoftypes |
|||
|
|||
|
|||
def getyears(): |
|||
"""for the dynamic menu get the unique years for publicatons""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
listofyears = [] |
|||
for row in csv_as_dict: |
|||
uniqueyear = row["Year"] |
|||
if not uniqueyear: |
|||
uniqueyear = "Unknown" |
|||
if uniqueyear not in listofyears: |
|||
listofyears.append(uniqueyear) |
|||
listofyears.sort() |
|||
return listofyears |
|||
|
|||
|
|||
def getlicenses(): |
|||
"""for the dynamic menu get the unique liscenses for publicatons""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
listoflicenses = [] |
|||
for row in csv_as_dict: |
|||
license = row["LicenseShort"].lower().title() |
|||
if not license: |
|||
license = "No License Mentioned" |
|||
if license not in listoflicenses: |
|||
listoflicenses.append(license) |
|||
return listoflicenses |
|||
|
|||
|
|||
def getfieldsofinterest(): |
|||
"""for the R&R page get the fields of interest from the publicatons""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
fieldsofinterest = {} |
|||
for row in csv_as_dict: |
|||
fields = row["Fields"].split(",") |
|||
fieldsofinterest[row["Id"]] = fields |
|||
return fieldsofinterest |
|||
|
|||
|
|||
def getpublicationfromcsvrow(row): |
|||
"""get entire publication info from a csv row""" |
|||
year = row["Year"] |
|||
if not year: |
|||
year = "Unknown" |
|||
|
|||
license = row["License"] |
|||
if not license: |
|||
license = "No license mentioned" |
|||
|
|||
borrowed = row["Currently borrowed by"] |
|||
if not borrowed: |
|||
borrowed = "No one" |
|||
|
|||
pubinfo = { |
|||
"Title": row["Publication"], |
|||
"Author": row["Author"], |
|||
"Year": year, |
|||
"Custodian": row["Custodian"], |
|||
"Fields": row["Fields"], |
|||
"Type": row["Type"], |
|||
"Publishers": row["Publishers"], |
|||
"License": license, |
|||
"Highlights": row["Highlights"], |
|||
"Comments": row["Comments"], |
|||
"Borrowed": borrowed, |
|||
"Image": hasimage(row["Id"]), |
|||
} |
|||
return pubinfo |
|||
|
|||
|
|||
def getfullpublication(pubid): |
|||
"""For the single book view, most complete overview""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
pubinfo = {} |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
for row in csv_as_dict: |
|||
if pubid == row["Id"]: |
|||
pubinfo = getpublicationfromcsvrow(row) |
|||
|
|||
# print(pubinfo) |
|||
return pubinfo |
|||
|
|||
|
|||
def generatenewpublicationid(): |
|||
"""When uploading a book generate a new unique ID""" |
|||
libcsv = open(os.path.join(data_dir, "varlib.csv"), "r") |
|||
allidsincsv = [] |
|||
with libcsv: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
for row in csv_as_dict: |
|||
allidsincsv.append(int(row["Id"])) |
|||
return str(max(allidsincsv) + 1) |
|||
|
|||
|
|||
def writepublication(uploadform): |
|||
"""When uploading a publication writes entry to the csv""" |
|||
id = generatenewpublicationid() |
|||
with open( |
|||
os.path.join(data_dir, "varlib.csv"), "a", newline="" |
|||
) as csvfile: |
|||
csv_as_writer = csv.DictWriter(csvfile, fieldnames=fieldnames) |
|||
csv_as_writer.writerow( |
|||
{ |
|||
"Id": id, |
|||
"Publication": uploadform.uploadpublication.data, |
|||
"Author": uploadform.author.data, |
|||
"Year": uploadform.year.data, |
|||
"Custodian": uploadform.custodian.data, |
|||
"Fields": uploadform.fields.data, |
|||
"Type": uploadform.type.data, |
|||
"Publishers": uploadform.publishers.data, |
|||
"License": uploadform.license.data, |
|||
"LicenseShort": uploadform.licenseshort.data, |
|||
"Highlights": uploadform.highlights.data, |
|||
"Comments": uploadform.comments.data, |
|||
"Currently borrowed by": uploadform.borrowed.data, |
|||
} |
|||
) |
|||
print("succesfully written book to csv") |
|||
return id |
|||
|
|||
|
|||
def editborrowedby(pubid, borrower): |
|||
"""Edits the borrowed by field for a publication entry in csv""" |
|||
tempfile = NamedTemporaryFile("w+t", newline="", delete=False) |
|||
filename = os.path.join(data_dir, "varlib.csv") |
|||
with open(filename, "r", newline="") as libcsv, tempfile: |
|||
csv_as_dict = csv.DictReader(libcsv) |
|||
csv_as_writer = csv.DictWriter(tempfile, fieldnames=fieldnames) |
|||
# use the reader to read where, then writer to write the new row. |
|||
csv_as_writer.writeheader() |
|||
for row in csv_as_dict: |
|||
if pubid == row["Id"]: |
|||
print("publication changes borrower") |
|||
print(row["Publication"]) |
|||
row["Currently borrowed by"] = borrower |
|||
csv_as_writer.writerow(row) |
|||
|
|||
shutil.move(tempfile.name, filename) |
|||
|
|||
|
|||
def concatenate_csv_row(row): |
|||
rowcontent = [] |
|||
rowcontent.append(row["Publication"]) |
|||
rowcontent.append(row["Author"]) |
|||
rowcontent.append(row["Fields"]) |
|||
rowcontent.append(row["Type"]) |
|||
rowcontent.append(row["Publishers"]) |
|||
rowcontent.append(row["Highlights"]) |
|||
rowcontent.append(row["Comments"]) |
|||
return " ".join(rowcontent) |
Can't render this file because it has a wrong number of fields in line 10.
|
@ -1,9 +1,3 @@ |
|||
[title] |
|||
"Your library title" |
|||
|
|||
[libaryfilename] |
|||
"varlib.csv" |
|||
|
|||
[readmethod] |
|||
"download" |
|||
|
|||
title = "Your library title" |
|||
libaryfilename = "newlib.csv" |
|||
readmethod = "download" |
|||
|
@ -1,3 +1,3 @@ |
|||
from setuptools import setup, find_packages |
|||
|
|||
setup(name='library', version='1.0', packages=find_packages()) |
|||
setup(name='library', version='1.1', packages=find_packages()) |
|||
|
Loading…
Reference in new issue