def handle(self, *args, **options): inBibtexFile = options["bibtex_file"] if not os.path.isfile(inBibtexFile): self.stdout.write( self.style.ERROR( "File '{}' does not exist.".format(inBibtexFile))) sys.exit() try: with open(inBibtexFile, encoding="utf-8") as bibtexFile: bibtexData = bibtexparser.load(bibtexFile) except: self.stdout.write( self.style.WARNING( "Failed reading file with UTF-8 encoding, atttempting to read as Latin-1." )) try: with open(inBibtexFile, encoding="ISO-8859-1") as bibtexFile: bibtexData = bibtexparser.load(bibtexFile) except: self.stdout.write( self.style.ERROR( "Failed reading file with either UTF-8 or Latin-1 encoding." )) sys.exit() bibWriter = bibtexparser.bwriter.BibTexWriter() bibWriter.contents = ["entries"] bibWriter.indent = " " for entry in bibtexData.entries: singleEntryBibDatabase = bibtexparser.bibdatabase.BibDatabase singleEntryBibDatabase.entries = [entry] bibtex = bibtexparser.dumps(singleEntryBibDatabase, bibWriter) link = None for linkKey in ["url", "URL", "doi", "DOI"]: if linkKey in entry: link = entry[linkKey] break if not link: link = 'https://www.google.com/search?q="{}"'.format( entry["title"]) paper = Paper(bibtex=bibtex, link=link) paper.save() self.stdout.write( self.style.SUCCESS(" -- Imported: {}".format(paper))) self.stdout.write( self.style.SUCCESS("Successfully imported {} papers.".format( len(bibtexData.entries))))
def _iter_paper(): for _, row in df.iterrows(): d = dict(row) del d['tags'] d['year'] = int(d['year']) if d['year'] > 0 else None d['rating'] = int(d['rating']) if d['rating'] > 0 else None d['pdf_path'] = (d.pop('path', '') or '').split(',')[0].strip() d['read_status'] = d['read_status'] != 0 if not d['authors']: d['authors'] = ( d['full_authors'].split(',')[0].split(' ')[-1] + ' et al.') if d['authors'] == ' et al.': continue p = Paper(**d) yield p
def create_paper(row, labels): kwargs = {} for field in MAPPING.keys(): print(field) if field == 'document_type': val = row[labels.index(MAPPING[field])] val = dt(val) kwargs[field] = val else: l = labels.index(MAPPING[field]) print(l) print(len(row)) kwargs[field] = row[labels.index(MAPPING[field])] # print("done") Paper(**kwargs).save()
def test_save(self): paper = Paper(title="Why stuff happens or not?") paper.save() self.assertIsNotNone(paper.id) self.assertEquals("why-stuff-happens-or-not", paper.slug) file = File(file=SimpleUploadedFile("test.txt", b"Lorem ipsum dolorem")) file.save() self.assertIsNotNone(file.id) self.assertEquals("files/test.txt", file.file.name) paper.files.add(file) paper.save() self.assertEquals("papers/1/test.txt", paper.files.first().file.name) file.refresh_from_db() self.assertEquals("papers/1/test.txt", file.file.name)
def create(self, validated_data): """Create a paper from scratch""" paper = Paper() return self.update(paper, validated_data)