def handle(self, *args, **options):
        fname = options['in_file']
        self.stdout.write('-- Importing references in %s' % fname)
        if not os.path.exists(fname):
            CommandError('Input file does not exist.')

        if options['force']:
            self.stdout.write('-- Force import' + os.linesep)

        if options['clear']:
            self.stdout.write('-- Clear tags before import' + os.linesep)

        with open(fname, 'r') as f:
            contents = f.read().decode('utf-8')

        cont = contents.split("@")
        cont.pop(0)

        allkeys = [x.key for x in Reference.objects.all()]

        nsuccess = 0
        nfail = 0
        nfiles = 0

        for rec in cont:
            rkey = get_key(rec)
            ref = Reference.objects.filter(key=rkey)
            if ref:
                bib = Reference.objects.get(key=rkey)
                bib.bibtex = '@%s' % rec
                action = 'Updating'
            else:
                bib = Reference(bibtex='@%s' % rec)
                action = 'Creating'
            #pdb.set_trace()
            try:
                bib.clean()
            except:
                pdb.set_trace()
                self.stderr.write("Warning: Failed to load @%s" % rec)
                nfail += 1
                continue
            if not rkey in allkeys or options['force']:
                self.stdout.write("%s %s" % (action, rkey))
                bib.save()
                if options['clear']:
                    bib.tags.clear()
                for a in options['tags']:
                    bib.tags.add(a)
                keywords = get_keywords(rec)
                if keywords:
                    for k in keywords:
                        bib.tags.add(k)
                if os.path.exists('files/%s' % rkey):
                    files = os.listdir('files/%s' % rkey)
                    for f in files:
                        shutil.copy(
                            'files/%s/%s' % (rkey, f),
                            '%s/resources/%s' % (settings.MEDIA_ROOT, f))
                        res = bib.resource_set.create(file='resources/%s' % f,
                                                      title='%s' % f)
                        self.stdout.write('Found and added %s' % f)
                        nfiles += 1
                bib.save()
                nsuccess += 1
                allkeys.append(rkey.decode())

            else:
                self.stderr.write("Skipped pre-existing key: %s" % rkey)
                nfail += 1

        self.stdout.write(
            os.linesep + "=> Imported %i references and %i files. %i failed." %
            (nsuccess, nfiles, nfail))
예제 #2
0
 def setUp(self):
     self.reference = Reference(bibtex=fluff)
     self.reference.save()
예제 #3
0
 def setUp(self):
     self.reference = Reference(bibtex=fluff)
     self.reference.save()
     self.reference.tags.add('blah')
예제 #4
0
 def test_accent(self):
     reference = Reference(bibtex=erdos)
     self.assertEqual(reference.get_authors(),
                      u'B Bollob\u2019as & P Erdos')