fnp
/
wolnelektury.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Better management of manually-set members.
[wolnelektury.git]
/
src
/
isbn
/
management
/
commands
/
import_onix.py
diff --git
a/src/isbn/management/commands/import_onix.py
b/src/isbn/management/commands/import_onix.py
index
1d86e96
..
1a1fe9e
100644
(file)
--- a/
src/isbn/management/commands/import_onix.py
+++ b/
src/isbn/management/commands/import_onix.py
@@
-1,11
+1,15
@@
-# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
from datetime import date
from lxml import etree
from django.core.management.base import BaseCommand
from isbn.models import ISBNPool, ONIXRecord
from datetime import date
from lxml import etree
from django.core.management.base import BaseCommand
from isbn.models import ISBNPool, ONIXRecord
+from librarian import XMLNamespace
-ONIXNS = '{http://ns.editeur.org/onix/3.0/reference}'
+
+ONIXNS = XMLNamespace('http://ns.editeur.org/onix/3.0/reference')
DIRECT_FIELDS = {
'product_form': 'ProductForm',
DIRECT_FIELDS = {
'product_form': 'ProductForm',
@@
-18,7
+22,7
@@
DIRECT_FIELDS = {
'imprint': 'ImprintName',
}
'imprint': 'ImprintName',
}
-UN
NAMED = u
'Autor nieznany'
+UN
KNOWN =
'Autor nieznany'
def parse_date(date_str):
def parse_date(date_str):
@@
-29,9
+33,9
@@
def parse_date(date_str):
def get_descendants(element, tags):
def get_descendants(element, tags):
- if isinstance(tags,
basestring
):
+ if isinstance(tags,
str
):
tags = [tags]
tags = [tags]
- return element.findall('.//' + '/'.join(ONIXNS
+ tag
for tag in tags))
+ return element.findall('.//' + '/'.join(ONIXNS
(tag)
for tag in tags))
def get_field(element, tags, allow_multiple=False):
def get_field(element, tags, allow_multiple=False):
@@
-43,14
+47,17
@@
def get_field(element, tags, allow_multiple=False):
class Command(BaseCommand):
help = "Import data from ONIX."
class Command(BaseCommand):
help = "Import data from ONIX."
- args = 'filename'
- def handle(self, filename, *args, **options):
+ def add_arguments(self, parser):
+ parser.add_argument('filename')
+
+ def handle(self, **options):
+ filename = options['filename']
tree = etree.parse(open(filename))
for product in get_descendants(tree, 'Product'):
isbn = get_field(product, ['ProductIdentifier', 'IDValue'])
assert len(isbn) == 13
tree = etree.parse(open(filename))
for product in get_descendants(tree, 'Product'):
isbn = get_field(product, ['ProductIdentifier', 'IDValue'])
assert len(isbn) == 13
- pool = ISBNPool.objects.get(prefix__in=[isbn[:i] for i in
x
range(8, 11)])
+ pool = ISBNPool.objects.get(prefix__in=[isbn[:i] for i in range(8, 11)])
contributors = [
self.parse_contributor(contributor)
for contributor in get_descendants(product, 'Contributor')]
contributors = [
self.parse_contributor(contributor)
for contributor in get_descendants(product, 'Contributor')]
@@
-61,7
+68,7
@@
class Command(BaseCommand):
get_field(product, ['PublishingDate', 'Date'], allow_multiple=True)),
'contributors': contributors,
}
get_field(product, ['PublishingDate', 'Date'], allow_multiple=True)),
'contributors': contributors,
}
- for field, tag in DIRECT_FIELDS.ite
rite
ms():
+ for field, tag in DIRECT_FIELDS.items():
record_data[field] = get_field(product, tag) or ''
record = ONIXRecord.objects.create(**record_data)
ONIXRecord.objects.filter(pk=record.pk).update(datestamp=parse_date(product.attrib['datestamp']))
record_data[field] = get_field(product, tag) or ''
record = ONIXRecord.objects.create(**record_data)
ONIXRecord.objects.filter(pk=record.pk).update(datestamp=parse_date(product.attrib['datestamp']))
@@
-77,10
+84,10
@@
class Command(BaseCommand):
contributor_data = {
'role': get_field(contributor, 'ContributorRole'),
}
contributor_data = {
'role': get_field(contributor, 'ContributorRole'),
}
- for key, value in data.ite
rite
ms():
+ for key, value in data.items():
if value:
contributor_data[key] = value
if value:
contributor_data[key] = value
- if contributor_data.get('name') == UN
NAMED
:
+ if contributor_data.get('name') == UN
KNOWN
:
del contributor_data['name']
contributor_data['unnamed'] = '01'
for date_elem in get_descendants(contributor, 'ContributorDate'):
del contributor_data['name']
contributor_data['unnamed'] = '01'
for date_elem in get_descendants(contributor, 'ContributorDate'):