Ejemplo n.º 1
0
    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))))
Ejemplo n.º 2
0
 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()
Ejemplo n.º 4
0
    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)