add distro
parent
50930ce2b1
commit
c92a823a89
|
@ -0,0 +1,45 @@
|
|||
from ftplib import FTP, FTP_TLS
|
||||
from django.db import models
|
||||
|
||||
class Target(models.Model):
|
||||
name = models.CharField(max_length=30)
|
||||
host = models.CharField(max_length=60)
|
||||
pw = models.CharField(max_length=30)
|
||||
user = models.CharField(max_length=30)
|
||||
protocol = models.CharField(max_length=10, default='ftp')
|
||||
formats = models.ManyToManyField(Format, related_name='targets')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
_ftp = None
|
||||
def get_ftp(self):
|
||||
if not self._ftp:
|
||||
if self.protocol == 'secure':
|
||||
self._ftp = FTP_TLS(self.host, self.user, self.pw)
|
||||
self._ftp.prot_p()
|
||||
else:
|
||||
self._ftp = FTP(self.host, self.user, self.pw)
|
||||
return self._ftp
|
||||
|
||||
def push(self, book):
|
||||
for ebook in book.ebooks():
|
||||
isbn = ebook.edition.isbn_13 if ebook.edition.isbn_13 else ebook.edition.work.first_isbn_13()
|
||||
if isbn and self.formats.filter(name=ebook.format).exists():
|
||||
ebfile = ebook.get_archive()
|
||||
self.get_ftp().storbinary(u'STOR {}.{}'.format(isbn,ebook.format), ebfile)
|
||||
ebfile.close()
|
||||
Depost.objects.create(target=self, isbn=isbn, format=ebook.format)
|
||||
|
||||
|
||||
class Deposit(models.Model):
|
||||
target = models.ForeignKey(Target, related_name="deposits")
|
||||
isbn = models.CharField(max_length=13)
|
||||
format = models.CharField(max_length=30)
|
||||
updated = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Format(
|
||||
name = models.CharField(max_length=4)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
|
@ -0,0 +1,15 @@
|
|||
import logging
|
||||
|
||||
from celery.task import task
|
||||
|
||||
from .models import Target
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def push_books_to_target(books, target):
|
||||
"""given a list of books this task will push the books, metadata and covers to the target
|
||||
"""
|
||||
for book in books:
|
||||
target.push_file(book)
|
||||
target.push_cover(book)
|
||||
target.push_onix(books)
|
Loading…
Reference in New Issue