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] |
title = "Your library title" |
||||
"Your library title" |
libaryfilename = "newlib.csv" |
||||
|
readmethod = "download" |
||||
[libaryfilename] |
|
||||
"varlib.csv" |
|
||||
|
|
||||
[readmethod] |
|
||||
"download" |
|
||||
|
|
||||
|
@ -1,3 +1,3 @@ |
|||||
from setuptools import setup, find_packages |
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