Exemplo n.º 1
0
    def update_persons(self, start, batch_size = 100, verbosity = 1):
        '''Updates persons from etvnet.'''
        
        cred = Credentials(ETVNET_PERSONS_PUBLIC_KEY, ETVNET_PERSONS_PRIVATE_KEY)
        conn = etvIntegrationConnection(cred, ETVNET_PERSONS_ENDPOINT)
        result = conn.make_request(
            'GET', '/integration/person_list.json', args={'start': start, 'batch_size': batch_size, 'type': 'person'}
        )
        data = simplejson.load(result)

        result = None
        if data:
            for p in data:
                try:
                    person = Person.objects.get(external_ident=p.get('id'))
                except Person.DoesNotExist:
                    person = Person(external_ident=p.get('id'))
                person.first_name = p.get('first_name')
                person.last_name = p.get('last_name')
                person.name = p.get('name')
                person.birthday = p.get('birthday')
                person.death = p.get('death')
                person.is_available = p.get('is_approved')
                person.updated = result = p.get('updated')
                person.url = p.get('url')

                if verbosity >= 2:
                    print(
                        "id: %s name: %s (%s)" \
                        % (p.get('id'), p.get('name').encode('utf-8'), person.pk and 'updated' or 'created'))

                person.save()

        return result
Exemplo n.º 2
0
class sPerson:
    def __init__(self, surname, name, gender, pseudonym, birth_year,
                 death_year):
        self.last_name = surname
        self.first_name = name
        self.gender = gender
        self.pseudonym = pseudonym
        self.birth_year = birth_year
        self.death_year = death_year
        try:
            self.instance = Person.objects.get(first_name=self.first_name,
                                               last_name=self.last_name,
                                               birth_year=birth_year)
            self.load = True
        except:
            self.instance = Person(first_name=self.first_name,
                                   last_name=self.last_name,
                                   birth_year=birth_year)
            self.load = False
            self.instance.save()

    def __repr__(self):
        m = str(self.first_name) + ' | ' + str(self.last_name) + ' | ' + str(
            self.gender)
        m += ' | ' + str(self.pseudonym)
        return m

    def __eq__(self, other):
        return self.__dict__ == other.__dict__
Exemplo n.º 3
0
    def test_delete(self):
        person, created = Person.from_dict({"name": "Hans Müller"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        deleted = person.delete()
        self.assertIsNone(person.id)
        self.assertEquals((1, {"persons.Person": 1}), deleted)

        person, created = Person.from_dict({
            "name":
            "Hans Müller",
            "links": [{
                "url": "https://hans-mueller.de"
            }]
        })
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        deleted = person.delete()
        self.assertIsNone(person.id)
        self.assertEquals(
            (3, {
                "persons.Person": 1,
                "persons.Person_links": 1,
                "links.Link": 1
            }),
            deleted,
        )
Exemplo n.º 4
0
def manage_persons(request):
    persons = Person.objects.all()
    form_data = request.POST if request.POST else None
    if form_data: # debug info
        print(form_data) # POST data (for debug)

    form_add = AddPersonForm(form_data)
    if form_add.is_valid():
        new_person = Person(
                        short_name=form_data.get('short_name'),
                        full_name=form_data.get('full_name'),
                        email=form_data.get('email')
                     )
        new_person.save() # write new row to DB
        return redirect('/persons/')

    form_rem = RemovePersonForm(form_data)
    if form_rem.is_valid():
        persons_to_be_removed = Person.objects.filter(
                    short_name__icontains=form_data.get('short_name_substr'))
        persons_to_be_removed.delete() # delete row from DB
        return redirect('/persons/')

    t = loader.get_template('manage.html')
    return HttpResponse(t.render(RequestContext(request,
                                       {'form_add' : form_add,
                                        'form_rem' : form_rem,
                                        'persons_count' : len(persons),}
                        )))
 def _person_by_cnd(self, cnd):
     ''' use the mk_id (if there) or the name to return the person '''
     if cnd.mk_id:
         try:
             return Person.objects.get(mk_id = cnd.mk_id)
         except Person.DoesNotExist:
             pass
     try:
         return Person.objects.get_by_name(cnd.name)
     except Person.DoesNotExist:
         person =  Person(name = cnd.name)
         if cnd.mk_id: 
             person.mk_id = mk_id
         person.save()
Exemplo n.º 6
0
def register(request):
    form = UserCreationForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            user = form.instance
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            created_person = Person(user=user)
            created_person.populate_notification_settings()
            created_person.save()
            login(request, user)
            return redirect('/register_success/')
    csrf(request)
    return render(request, 'register.html', locals())
Exemplo n.º 7
0
 def _person_by_cnd(self, cnd):
     ''' use the mk_id (if there) or the name to return the person '''
     if cnd.mk_id:
         try:
             return Person.objects.get(mk_id=cnd.mk_id)
         except Person.DoesNotExist:
             pass
     try:
         return Person.objects.get_by_name(cnd.name)
     except Person.DoesNotExist:
         person = Person(name=cnd.name)
         if cnd.mk_id:
             person.mk_id = mk_id
         person.save()
Exemplo n.º 8
0
def add_person(request):
    if request.method != 'POST':
        return HttpResponseBadRequest('You can only use POST')
    else:
        short_name = request.POST['name']
        full_name = request.POST['full_name']
        email = request.POST['email']
        job = choice(Job.objects.all())
        new_person = Person(short_name = short_name, 
                            full_name = full_name, 
                            email = email, 
                            job = job)
        new_person.save()
        return HttpResponse('new person "%s" is added' % 
                        Person.objects.get(short_name = short_name).short_name)
Exemplo n.º 9
0
def add_person(request):
    if request.method != 'POST':
        return HttpResponseBadRequest('You can only use POST')
    else:
        short_name = request.POST['name']
        full_name = request.POST['full_name']
        email = request.POST['email']
        job = choice(Job.objects.all())
        new_person = Person(short_name=short_name,
                            full_name=full_name,
                            email=email,
                            job=job)
        new_person.save()
        return HttpResponse(
            'new person "%s" is added' %
            Person.objects.get(short_name=short_name).short_name)
Exemplo n.º 10
0
    def edit(self: T, field: str, value: Union[str, float], *args, **kwargs):
        """Change field by given value."""
        assert field in [
            "title", "author", "series", "volume", "genre", "link"
        ]

        if field == "title":
            self.title = value
        elif field == "author" and isinstance(value, str):
            author = Person.get_or_create(value)
            if self.authors.filter(pk=author.pk).exists():
                self.authors.remove(author)
            else:
                self.authors.add(author)
        elif field == "series" and isinstance(value, str):
            self.series = Series.get_or_create(value)
        elif field == "volume":
            self.volume = value
        elif field == "genre" and isinstance(value, str):
            genre = Genre.get_or_create(value)
            if self.genres.filter(pk=genre.pk).exists():
                self.genres.remove(genre)
            else:
                self.genres.add(genre)
        elif field == "link" and isinstance(value, str):
            link = Link.get_or_create(value)
            if self.links.filter(pk=link.pk).exists():
                self.links.remove(link)
            else:
                self.links.add(link)
        self.save(*args, **kwargs)
Exemplo n.º 11
0
    def from_dict(cls: Type[T], data: Dict) -> Tuple[T, bool]:
        """Create from dict.

        Returns True if was crated, i. e. was not found in the DB.
        """
        defaults: Dict = {}
        if "series" in data and data["series"]:
            defaults["series"] = Series.from_dict(data["series"])[0]
        if "volume" in data and data["volume"]:
            defaults["volume"] = data["volume"]

        book, created = Book.objects.get_or_create(title=data["title"],
                                                   defaults=defaults)

        if "authors" in data and data["authors"]:
            for i in data["authors"]:
                book.authors.add(Person.from_dict(i)[0])
        if "genres" in data and data["genres"]:
            for i in data["genres"]:
                book.genres.add(Genre.from_dict(i)[0])
        if "links" in data and data["links"]:
            for i in data["links"]:
                book.links.add(Link.from_dict(i)[0])

        return book, created
Exemplo n.º 12
0
    def test_get(self):
        person, created = Person.from_dict({"name": "Hans Müller"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        person2 = Person.get("Hans Müller")
        self.assertIsNotNone(person2)
        self.assertEquals(person, person2)

        person2 = Person.get("müller")
        self.assertIsNotNone(person2)
        self.assertEquals(person, person2)

        person2 = Person.get(str(person.id))
        self.assertIsNotNone(person2)
        self.assertEquals(person, person2)
Exemplo n.º 13
0
    def test_search(self):
        person, created = Person.from_dict({"name": "Hans Müller"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        person, created = Person.from_dict({"name": "Maria Müller"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        person, created = Person.from_dict({"name": "Maria Vogel"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        self.assertEquals(3, Person.objects.all().count())
        self.assertEquals(2, Person.search("Maria").count())
        self.assertEquals(2, Person.search("müller").count())
Exemplo n.º 14
0
    def test_save(self):
        person = Person(name="Hans Müller")
        person.save()
        self.assertIsNotNone(person.id)
        self.assertEquals("hans-muller", person.slug)

        person = Person(name="J. T. Do")
        person.save()
        self.assertIsNotNone(person.id)
        self.assertEquals("j-t-do", person.slug)
Exemplo n.º 15
0
    def test_from_to_dict(self):
        link, created = Link.objects.get_or_create(
            link="https://hans-mueller.de")
        self.assertTrue(created)
        self.assertIsNotNone(link.id)

        person, created = Person.objects.get_or_create(name="Hans Müller")
        person.links.add(link)
        self.assertTrue(created)
        self.assertIsNotNone(person.id)
        self.assertEquals(
            {
                "name": "Hans Müller",
                "links": [{
                    "url": "https://hans-mueller.de"
                }]
            },
            person.to_dict(),
        )
        self.assertEquals(
            (person, False),
            Person.from_dict({
                "name": "Hans Müller",
                "links": [{
                    "url": "https://hans-mueller.de"
                }]
            }),
        )
        self.assertEquals((person, False),
                          Person.from_dict({"name": "Hans Müller"}))

        person, created = Person.objects.get_or_create(name="Jane Bond")
        self.assertTrue(created)
        self.assertIsNotNone(person.id)
        self.assertEquals({
            "name": "Jane Bond",
            "links": None
        }, person.to_dict())
        self.assertEquals((person, False),
                          Person.from_dict({
                              "name": "Jane Bond",
                              "links": None
                          }))
        self.assertEquals((person, False),
                          Person.from_dict({"name": "Jane Bond"}))
Exemplo n.º 16
0
    def edit(self: T, field: str, value: str, *args, **kwargs):
        """Change field by given value."""
        assert field in [
            "alternate_title",
            "alternate-title",
            "binding",
            "cover",
            "isbn",
            "person",
            "publishing_date",
            "publishing-date",
            "publisher",
            "language",
            "link",
            "file",
        ]

        if field == "alternate_title" or field == "alternate-title":
            self.alternate_title = value
        elif field == "binding":
            self.binding = Binding.get_or_create(value)
        elif field == "cover":
            self.cover_image.save(os.path.basename(str(value)),
                                  DJFile(open(str(value), "rb")))
        elif field == "isbn":
            self.isbn = value
        elif field == "person":
            person = Person.get_or_create(value)
            if self.persons.filter(pk=person.pk).exists():
                self.persons.remove(person)
            else:
                self.persons.add(person)
        elif field == "publishing_date" or field == "publishing-date":
            self.publishing_date = value
        elif field == "publisher":
            self.publisher = Publisher.get_or_create(value)
        elif field == "language":
            language = Language.get_or_create(value)
            if self.languages.filter(pk=language.pk).exists():
                self.languages.remove(language)
            else:
                self.languages.add(language)
        elif field == "link":
            link = Link.get_or_create(value)
            if self.links.filter(pk=link.pk).exists():
                self.links.remove(link)
            else:
                self.links.add(link)
        elif field == "file":
            file, created = File.from_dict({"path": value})
            if self.files.filter(pk=file.pk).exists():
                self.files.remove(file)
                file.delete()
            else:
                self.files.add(file)
        self.save(*args, **kwargs)
Exemplo n.º 17
0
    def from_dict(cls: Type[T], data: Dict, book: Book) -> Tuple[T, bool]:
        """Create from dict.

        Returns True if was crated, i. e. was not found in the DB.
        """
        defaults: Dict = {}
        if "alternate_title" in data and data["alternate_title"]:
            defaults["alternate_title"] = data["alternate_title"]
        if "isbn" in data and data["isbn"]:
            defaults["isbn"] = data["isbn"]
        if "publishing_date" in data and data["publishing_date"]:
            defaults["publishing_date"] = datetime.datetime.strptime(
                data["publishing_date"], "%Y-%m-%d").date()
        if "publisher" in data and data["publisher"]:
            defaults["publisher"] = Publisher.from_dict(data["publisher"])[0]
        if "binding" in data and data["binding"]:
            defaults["binding"] = Binding.from_dict(data["binding"])[0]
        if "bibtex" in data and data["bibtex"]:
            defaults["bibtex"] = data["bibtex"]

        edition, created = cls.objects.get_or_create(
            book=book,
            alternate_title=data["alternate_title"]
            if "alternate_title" in data else None,
            isbn=data["isbn"] if "isbn" in data else None,
            publishing_date=data["publishing_date"]
            if "publishing_date" in data else None,
            defaults=defaults,
        )

        if "cover_image" in data and data["cover_image"]:
            edition.cover_image.save(
                os.path.basename(data["cover_image"]),
                DJFile(open(data["cover_image"], "rb")),
            )
        if "languages" in data and data["languages"]:
            for i in data["languages"]:
                edition.languages.add(Language.from_dict(i)[0])
        if "links" in data and data["links"]:
            for i in data["links"]:
                edition.links.add(Link.from_dict(i)[0])
        if "persons" in data and data["persons"]:
            for i in data["persons"]:
                edition.persons.add(Person.from_dict(i)[0])

        if "acquisitions" in data and data["acquisitions"]:
            for i in data["acquisitions"]:
                Acquisition.from_dict(i, edition)
        if "files" in data and data["files"]:
            for i in data["files"]:
                File.from_dict(i, edition)
        if "reads" in data and data["reads"]:
            for i in data["reads"]:
                Read.from_dict(i, edition)
        edition.save()
        return edition, created
Exemplo n.º 18
0
 def __init__(self, surname, name, gender, pseudonym, birth_year,
              death_year):
     self.last_name = surname
     self.first_name = name
     self.gender = gender
     self.pseudonym = pseudonym
     self.birth_year = birth_year
     self.death_year = death_year
     try:
         self.instance = Person.objects.get(first_name=self.first_name,
                                            last_name=self.last_name,
                                            birth_year=birth_year)
         self.load = True
     except:
         self.instance = Person(first_name=self.first_name,
                                last_name=self.last_name,
                                birth_year=birth_year)
         self.load = False
         self.instance.save()
Exemplo n.º 19
0
    def test_get_or_create(self):
        person, created = Person.from_dict({"name": "Hans Müller"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)
        self.assertEquals(1, Person.objects.count())

        person2 = Person.get_or_create("Hans Müller")
        self.assertIsNotNone(person2)
        self.assertEquals(person, person2)
        self.assertEquals(1, Person.objects.count())

        person2 = Person.get_or_create(str(person.id))
        self.assertIsNotNone(person2)
        self.assertEquals(person, person2)
        self.assertEquals(1, Person.objects.count())

        person2 = Person.get_or_create("Franz Müller")
        self.assertIsNotNone(person2)
        self.assertNotEquals(person, person2)
        self.assertEquals(2, Person.objects.count())
Exemplo n.º 20
0
    def edit(self: T, field: str, value: Union[str, datetime.date], *args,
             **kwargs):
        """Change field by given value."""
        fields = [
            "title",
            "author",
            "publishing_date",
            "publishing-date",
            "journal",
            "volume",
            "language",
            "file",
            "link",
            "bibtex",
        ]
        assert field in fields

        if field == "title":
            self.title = value
        elif field == "author" and isinstance(value, str):
            author = Person.get_or_create(value)
            if self.authors.filter(pk=author.pk).exists():
                self.authors.remove(author)
            else:
                self.authors.add(author)
        elif field == "publishing_date" or field == "publishing-date":
            self.publishing_date = value
        elif field == "journal" and isinstance(value, str):
            self.journal = Journal.get_or_create(value)
        elif field == "volume":
            self.volume = value
        elif field == "bibtex":
            self.bibtex = value
        elif field == "language" and isinstance(value, str):
            language = Language.get_or_create(value)
            if self.languages.filter(pk=language.pk).exists():
                self.languages.remove(language)
            else:
                self.languages.add(language)
        elif field == "link" and isinstance(value, str):
            link = Link.get_or_create(value)
            if self.links.filter(pk=link.pk).exists():
                self.links.remove(link)
            else:
                self.links.add(link)
        elif field == "file":
            file, created = File.from_dict({"path": value})
            if self.files.filter(pk=file.pk).exists():
                self.files.remove(file)
                file.delete()
            else:
                self.files.add(file)
        self.save(*args, **kwargs)
Exemplo n.º 21
0
    def test_print(self):
        person, created = Person.from_dict({"name": "Hans Müller"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        with StringIO() as cout:
            person.print(cout)
            self.assertEquals(
                "Field                            Value                              "
                +
                "                                \n=================================="
                +
                "==================================================================\n"
                +
                "Id                               1                                  "
                +
                "                                \n__________________________________"
                +
                "__________________________________________________________________\n"
                +
                "Name                             Hans Müller                        "
                +
                "                                \n__________________________________"
                +
                "__________________________________________________________________\n"
                +
                "Links                                                               "
                +
                "                                \n__________________________________"
                +
                "__________________________________________________________________\n"
                +
                "Books                                                               "
                +
                "                                \n__________________________________"
                +
                "__________________________________________________________________\n"
                +
                "Editions                                                            "
                +
                "                                \n__________________________________"
                +
                "__________________________________________________________________\n"
                +
                "Papers                                                              "
                +
                "                                \n__________________________________"
                +
                "__________________________________________________________________\n",
                cout.getvalue(),
            )
Exemplo n.º 22
0
def make_persons(filename_text='data/Person.xlsx'):
    d = pd.read_excel(filename_text)
    o = []
    for line in d.values:
        p_id, lname, fname, func, pseud, sex, dob, dod, pob, pod, res, trav, ac, notes = line
        if type(lname) == type(fname) == float: continue
        print(lname, fname)
        pseud = extract_names(pseud)
        pseuds = [
            load_model_instance(x, 'Pseudonym', 'persons') for x in pseud
        ]
        by, dy = extract_number(dob), extract_number(dod)
        o = Person(first_name=_ms(fname),
                   last_name=_ms(lname),
                   sex=set_sex(sex),
                   birth_year=by,
                   death_year=dy,
                   notes=_ms(notes))
        s, a, e = save_model([o], 'Persons', verbose=False)
        if len(s) != 1: continue
        [o.pseudonym.add(pseud) for pseud in pseuds]
        o.save()
    return o
Exemplo n.º 23
0
    def handle(self, *args, **options):

        objs = [
            Person(
                name=item['name'],
                last_name=item['last_name'],
                phone_number=item['phone_number'],
                address=item['address'],
            ) for item in self.people
        ]

        Person.objects.bulk_create(objs)

        self.stdout.write("successfully")
Exemplo n.º 24
0
def index(request):
    today = date.today()
    sDate = str(today.year) + '-01-01'
    eDate = str(today.year) + '-' + str(today.month) + '-' + str(today.day)

    sM = 1
    eM = today.month

    if request.GET.get('range'):
        dates = request.GET.get('range').split(sep=" - ")
        sDate = dates[0]
        eDate = dates[1]
        sM = int(sDate.split('-')[1])
        eM = int(eDate.split('-')[1])

    if request.user.person:
        person = request.user.person
    else:
        person = Person()
        person.name = request.user.username
        person.owner = request.user
        person.save()

        request.user.person = person
        request.user.save()

    months = []
    for i in range(sM, eM + 1):
        months.append(getMonthText(i))

    # get working
    wSales = graphWork(request, Sale, sDate, eDate, months)
    wSalesReturns = graphWork(request, SalesReturn, sDate, eDate, months)
    wPurchases = graphWork(request, Purchase, sDate, eDate, months)
    wPurchasesReturns = graphWork(request, PurchasesReturn, sDate, eDate,
                                  months)
    wExpenses = graphWork(request, Expense, sDate, eDate, months)

    args = {
        'nav': 'charts',
        'months': months,
        'sales': wSales['list'],
        'total_sales': wSales['total'],
        'sales_returns': wSalesReturns['list'],
        'total_sales_returns': wSalesReturns['total'],
        'purchases': wPurchases['list'],
        'total_purchases': wPurchases['total'],
        'purchases_returns': wPurchasesReturns['list'],
        'total_purchases_returns': wPurchasesReturns['total'],
        'expenses': wExpenses['list'],
        'total_expenses': wExpenses['total'],
        'startDate': sDate,
        'endDate': eDate,
        'range': sDate + ' - ' + eDate,
    }

    return render(request, 'charts/index.html', args)
Exemplo n.º 25
0
def after_user_activation(sender, user, request, **kwargs):
    person = Person()
    person.owner = user
    person.name = user.username
    person.save()
    groups = Group.objects.all()
    if groups:
        for group in groups:
            if group.name.find('Owner') != -1 or group.name.find('owner') != -1:
                user.groups.add(group)
    user.person = person
    user.save()
Exemplo n.º 26
0
def register(request):
    form = UserCreationForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            user = form.instance
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            created_person = Person(user=user)
            created_person.populate_notification_settings()
            created_person.save()
            login(request, user)
            return redirect('/register_success/')
    csrf(request)
    return render(request, 'register.html', locals())
Exemplo n.º 27
0
    def from_dict(cls: Type[T], data: Dict) -> Tuple[T, bool]:
        """Create from dict.

        Returns True if was crated, i. e. was not found in the DB.
        """
        defaults: Dict = {}
        if "journal" in data and data["journal"]:
            defaults["journal"] = Journal.from_dict(data["journal"])[0]
        if "volume" in data and data["volume"]:
            defaults["volume"] = data["volume"]
        if "publishing_date" in data and data["publishing_date"]:
            defaults["publishing_date"] = datetime.datetime.strptime(
                data["publishing_date"], "%Y-%m-%d").date()
        if "bibtex" in data and data["bibtex"]:
            defaults["bibtex"] = data["bibtex"]

        paper, created = Paper.objects.get_or_create(title=data["title"],
                                                     defaults=defaults)

        if "authors" in data and data["authors"]:
            for i in data["authors"]:
                paper.authors.add(Person.from_dict(i)[0])
        if "languages" in data and data["languages"]:
            for i in data["languages"]:
                paper.languages.add(Language.from_dict(i)[0])
        if "links" in data and data["links"]:
            for i in data["links"]:
                paper.links.add(Link.from_dict(i)[0])

        if "acquisitions" in data and data["acquisitions"]:
            for i in data["acquisitions"]:
                Acquisition.from_dict(i, paper)
        if "files" in data and data["files"]:
            for i in data["files"]:
                File.from_dict(i, paper)
        if "reads" in data and data["reads"]:
            for i in data["reads"]:
                Read.from_dict(i, paper)
        paper.save()
        return paper, created
Exemplo n.º 28
0
    def test_from_to_dict(self):
        book, created = Book.objects.get_or_create(title="Cool")
        self.assertTrue(created)
        self.assertIsNotNone(book.id)
        self.assertEquals(
            {
                "title": "Cool",
                "authors": None,
                "series": None,
                "volume": 0,
                "genres": None,
                "links": None,
            },
            book.to_dict(),
        )
        self.assertEquals((book, False), Book.from_dict(book.to_dict()))
        self.assertEquals((book, False), Book.from_dict({"title": "Cool"}))

        author, created = Person.from_dict({"name": "Max Mustermann"})
        self.assertTrue(created)
        self.assertIsNotNone(author.id)

        series, created = Series.from_dict({"name": "Secret Files"})
        self.assertTrue(created)
        self.assertIsNotNone(series.id)

        genre, created = Genre.from_dict({"name": "Fiction"})
        self.assertTrue(created)
        self.assertIsNotNone(genre.id)

        link, created = Link.from_dict({"url": "https://example.com"})
        self.assertTrue(created)
        self.assertIsNotNone(link.id)

        book, created = Book.objects.get_or_create(title="Example",
                                                   series=series,
                                                   volume=1)
        book.authors.add(author)
        book.genres.add(genre)
        book.links.add(link)
        self.assertTrue(created)
        self.assertIsNotNone(book.id)
        self.assertEquals(
            {
                "title": "Example",
                "authors": [{
                    "name": "Max Mustermann",
                    "links": None
                }],
                "series": {
                    "name": "Secret Files",
                    "links": None
                },
                "volume": 1,
                "genres": [{
                    "name": "Fiction"
                }],
                "links": [{
                    "url": "https://example.com"
                }],
            },
            book.to_dict(),
        )
        self.assertEquals((book, False), Book.from_dict(book.to_dict()))
Exemplo n.º 29
0
    def test_edit(self):
        series, created = Series.from_dict({"name": "Test Series"})
        self.assertTrue(created)
        self.assertIsNotNone(series.id)

        person, created = Person.from_dict({"name": "John Do"})
        self.assertTrue(created)
        self.assertIsNotNone(person.id)

        book, created = Book.from_dict({
            "title": "Test2 Book",
            "authors": [person.to_dict()],
            "series": series.to_dict(),
            "volume": 1.0,
            "genres": [{
                "name": "Romance"
            }],
        })
        self.assertTrue(created)
        self.assertIsNotNone(book.id)
        self.assertEquals(series, book.series)
        self.assertEquals(person, book.authors.first())

        book.edit("title", "IEEE Test Book")
        self.assertEquals("IEEE Test Book", book.title)

        book.edit("author", "Jane Do")
        self.assertEquals(2, book.authors.count())
        self.assertEquals("Jane Do", str(book.authors.all()[0]))
        self.assertEquals("John Do", str(book.authors.all()[1]))

        book.edit("author", str(person.id))
        self.assertEquals(1, book.authors.count())
        self.assertEquals("Jane Do", str(book.authors.all()[0]))

        series, created = Series.from_dict({"name": "Space Series"})
        self.assertTrue(created)
        self.assertIsNotNone(series.id)

        book.edit("series", str(series.id))
        self.assertEquals(series, book.series)

        book.edit("volume", 0.75)
        self.assertEquals(0.75, book.volume)

        series, created = Series.from_dict({"name": "Deep Space Series"})
        self.assertTrue(created)
        self.assertIsNotNone(series.id)

        book.edit("series", "Deep Space")
        self.assertEquals(series, book.series)

        book.edit("genre", "SciFi")
        self.assertEquals(2, book.genres.count())
        self.assertEquals("Romance", book.genres.first().name)
        self.assertEquals("SciFi", book.genres.last().name)

        book.edit("genre", "1")
        self.assertEquals(1, book.genres.count())
        self.assertEquals("SciFi", book.genres.first().name)

        book.edit("link", "https://deep.space")
        self.assertEquals(1, book.links.count())
        self.assertEquals("https://deep.space", book.links.first().link)

        book.edit("link", "https://janedo.com/test2book")
        self.assertEquals(2, book.links.count())
        self.assertEquals("https://janedo.com/test2book",
                          book.links.last().link)

        book.edit("link", "https://deep.space")
        self.assertEquals(1, book.links.count())
        self.assertEquals("https://janedo.com/test2book",
                          book.links.first().link)
Exemplo n.º 30
0
def _paper(args: Namespace, file: TextIO = sys.stdout):
    paper: Optional[Paper] = None
    if args.subparser == "acquisition":
        paper = Paper.get(args.paper)
        acquisition: Optional[Acquisition] = None
        if args.acquisition_subparser == "add" and paper:
            acquisition, created = Acquisition.from_dict(
                {
                    "date": args.date,
                    "price": args.price
                }, paper)
            if created:
                stdout.write(
                    _('Successfully added acquisition with id "%(pk)d".') %
                    {"pk": acquisition.pk},
                    "=",
                    file=file,
                )
            else:
                stdout.write(
                    _('The acquisition already exists with id "%(pk)d".') %
                    {"pk": acquisition.pk},
                    "",
                    file=file,
                )
            acquisition.print(file)
        elif args.acquisition_subparser == "delete" and paper:
            acquisition = Acquisition.get(args.acquisition, papers=paper)
            if acquisition:
                acquisition.delete(acquisition)
                stdout.write(
                    _('Successfully deleted acquisition with id "%(pk)d".') %
                    {"pk": acquisition.pk},
                    "",
                    file=file,
                )
            else:
                stdout.write(_("No acquisition found."), "", file=file)
        elif args.acquisition_subparser == "edit" and paper:
            acquisition = Acquisition.get(args.acquisition, papers=paper)
            if acquisition:
                acquisition.edit(args.field, args.value)
                stdout.write(
                    _('Successfully edited acquisition with id "%(pk)d".') %
                    {"pk": acquisition.pk},
                    "=",
                    file=file,
                )
                acquisition.print(file)
            else:
                stdout.write(["No acquisition found."], "", file=file)
        else:
            stdout.write(_("No paper found."), "", file=file)
    elif args.subparser == "add":
        paper, created = Paper.from_dict({
            "title":
            args.title,
            "authors":
            [Person.get_or_create(author).to_dict() for author in args.author],
            "publishing_date":
            args.publishing_date,
            "journal":
            Journal.get_or_create(args.journal).to_dict()
            if args.journal else None,
            "volume":
            args.volume,
            "languages": [
                Language.get_or_create(language).to_dict()
                for language in args.language
            ],
            "links":
            [Link.get_or_create(link).to_dict() for link in args.link],
            "files": [{
                "path": file
            } for file in args.file],
        })
        if created:
            stdout.write(
                _('Successfully added paper "%(title)s" with id "%(pk)d".') % {
                    "title": paper.title,
                    "pk": paper.pk
                },
                "=",
                file=file,
            )
        else:
            stdout.write(
                _('The paper "%(title)s" already exists with id "%(pk)d".') % {
                    "title": paper.title,
                    "pk": paper.pk
                },
                "",
                file=file,
            )
        paper.print(file)
    elif args.subparser == "delete":
        paper = Paper.get(args.paper)
        if paper:
            paper.delete()
            stdout.write(
                _('Successfully deleted paper with id "%(title)s".') %
                {"title": paper.title},
                "",
                file=file,
            )
        else:
            stdout.write(_("No paper found."), "", file=file)
    elif args.subparser == "edit":
        paper = Paper.get(args.paper)
        if paper:
            paper.edit(args.edit_subparser, args.value)
            stdout.write(
                _('Successfully edited paper "%(title)s" with id "%(pk)d".') %
                {
                    "title": paper.title,
                    "pk": paper.pk
                },
                "",
                file=file,
            )
            paper.print(file)
        else:
            stdout.write(_("No paper found."), "", file=file)
    elif args.subparser == "info":
        paper = Paper.get(args.paper)
        if paper:
            paper.print(file)
        else:
            stdout.write(_("No paper found."), "", file=file)
    elif args.subparser == "list":
        if args.search:
            papers = Paper.search(args.search)
        elif args.shelf:
            papers = Paper.by_shelf(args.shelf)
        else:
            papers = Paper.objects.all()
        stdout.write(
            [_("Id"), _("Name"), _("Journal"),
             _("Volume")],
            "=",
            [0.05, 0.7, 0.85],
            file=file,
        )
        for i, has_next in lookahead(papers):
            stdout.write(
                [i.pk, i.name, i.journal.name, i.volume],
                "_" if has_next else "=",
                [0.05, 0.7, 0.85],
                file=file,
            )
    elif args.subparser == "open":
        paper = Paper.get(args.paper)
        if paper:
            paper_file = paper.files.get(pk=args.file)
            path = settings.MEDIA_ROOT / paper_file.file.path
            if sys.platform == "linux":
                os.system(f'xdg-open "{path}"')
            else:
                os.system(f'open "{path}"')
        else:
            stdout.write(_("No paper found."), "", file=file)
    elif args.subparser == "parse":
        for paper, created in Paper.from_bibfile(args.bibfile, args.file):
            if created:
                stdout.write(
                    _('Successfully added paper "%(title)s" with id "%(pk)d".')
                    % {
                        "title": paper.title,
                        "pk": paper.pk
                    },
                    file=file,
                )
                if args.acquisition:
                    acquisition, created = Acquisition.from_dict(
                        {"date": datetime.date.today()}, paper)
                    if created:
                        stdout.write(
                            _('Successfully added acquisition with id "%(pk)d".'
                              ) % {"pk": acquisition.pk},
                            "=",
                            file=file,
                        )
                    else:
                        stdout.write(
                            _('The acquisition already exists with id "%(pk)d".'
                              ) % {"pk": acquisition.pk},
                            "=",
                            file=file,
                        )
            else:
                stdout.write(
                    _('The paper "%(title)s" already exists with id "%(pk)d".')
                    % {
                        "title": paper.title,
                        "pk": paper.pk
                    },
                    "=",
                    file=file,
                )
            paper.print(file)
    elif args.subparser == "read":
        paper = Paper.get(args.paper)
        read: Optional[Read] = None
        if args.read_subparser == "add" and paper:
            read, created = Read.from_dict(
                {
                    "started": args.started,
                    "finished": args.finished
                }, paper)
            if created:
                stdout.write(
                    _('Successfully added read with id "%(pk)d".') %
                    {"pk": read.pk},
                    "=",
                    file=file,
                )
            else:
                stdout.write(
                    _('The read already exists with id "%(pk)d".') %
                    {"pk": read.pk},
                    "",
                    file=file,
                )
            read.print(file)
        elif args.read_subparser == "delete" and paper:
            read = Read.get(args.read, papers=paper)
            if read:
                read.delete()
                stdout.write(
                    _('Successfully deleted read with id "%(pk)d".') %
                    {"pk": read.pk},
                    "",
                    file=file,
                )
            else:
                stdout.write(_("No read found."), "", file=file)
        elif args.read_subparser == "edit" and paper:
            read = Read.get(args.read, papers=paper)
            if read:
                read.edit(args.field, args.value)
                stdout.write(
                    _('Successfully edited read with id "%(pk)d".') %
                    {"pk": read.pk},
                    "=",
                    file=file,
                )
                read.info(file)
            else:
                stdout.write(_("No read found."), "", file=file)
        else:
            stdout.write(_("No paper found."), "", file=file)
Exemplo n.º 31
0
from sys import argv, path as sys_path
import os
from random import choice
import django

sys_path.append('..')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
django.setup()

# actual import script:
from persons.models import Person
from jobs.models import Job

if __name__ == '__main__':
    if len(argv) != 2:
        print('USAGE: $ ./import.py /some/path/file.txt')
    else:
        imported_persons_count = 0
        with open(argv[1], 'r') as input_file:
            for line in input_file:
                short, full, mail = line.split('\t')
                job = choice(Job.objects.all())
                person = Person(short_name=short,
                                full_name=full,
                                email=mail,
                                job=job)
                person.save()  # write new row to DB
                imported_persons_count += 1

        print('Imported %s persons.' % imported_persons_count)
Exemplo n.º 32
0
def _person(args: Namespace, file: TextIO = sys.stdout):
    person: Optional[Person] = None
    if args.subparser == "add":
        person, created = Person.from_dict(
            {
                "name": args.name,
                "links": [Link.get_or_create(link).to_dict() for link in args.link],
            }
        )
        if created:
            stdout.write(
                _('Successfully added person "%(name)s" with id "%(pk)d".')
                % {"name": person.name, "pk": person.pk},
                "=",
                file=file,
            )
            person.print(file)
        else:
            stdout.write(
                _('The person "%(name)s" already exists with id "%(pk)d", aborting...')
                % {"name": person.name, "pk": person.pk},
                "",
                file=file,
            )
    elif args.subparser == "delete":
        person = Person.get(args.person)
        if person:
            person.delete()
            stdout.write(
                _('Successfully deleted person with id "%(name)s".')
                % {"name": person.name},
                "",
                file=file,
            )
        else:
            stdout.write(_("No person found."), "", file=file)
    elif args.subparser == "edit":
        person = Person.get(args.person)
        if person:
            person.edit(args.field, args.value)
            stdout.write(
                _('Successfully edited person "%(name)s" with id "%(pk)d".')
                % {"name": person.name, "pk": person.pk},
                "",
                file=file,
            )
            person.print(file)
        else:
            stdout.write(_("No person found."), "", file=file)
    elif args.subparser == "info":
        person = Person.get(args.person)
        if person:
            person.print(file)
        else:
            stdout.write(_("No person found."), "", file=file)
    elif args.subparser == "list":
        if args.search:
            persons = Person.search(args.search)
        else:
            persons = Person.objects.all()
        stdout.write(
            [
                _("Id"),
                _("Name"),
                _("Number of books"),
                _("Number of editions"),
                _("Number of papers"),
            ],
            "=",
            [0.05, 0.4, 0.6, 0.8],
            file=file,
        )
        for i, has_next in lookahead(persons):
            stdout.write(
                [i.id, i.name, i.books.count(), i.editions.count(), i.papers.count()],
                "_" if has_next else "=",
                [0.05, 0.4, 0.6, 0.8],
                file=file,
            )
Exemplo n.º 33
0
def _book(args: Namespace, file: TextIO = sys.stdout):
    book: Optional[Book] = None
    if args.subparser == "add":
        book, created = Book.from_dict({
            "title":
            args.title,
            "authors":
            [Person.get_or_create(author).to_dict() for author in args.author],
            "series":
            Series.get_or_create(args.series).to_dict()
            if args.series else None,
            "volume":
            args.volume,
            "genres":
            [Genre.get_or_create(genre).to_dict() for genre in args.genre],
            "links":
            [Link.get_or_create(link).to_dict() for link in args.link],
        })

        if created:
            stdout.write(
                _('Successfully added book "%(title)s" with id "%(pk)d".') % {
                    "title": book.title,
                    "pk": book.pk
                },
                "=",
                file=file,
            )
            book.print(file)
        else:
            stdout.write(
                _('The book "%(title)s" already exists with id "%(pk)d", aborting...'
                  ) % {
                      "title": book.title,
                      "pk": book.pk
                  },
                "",
                file=file,
            )
    elif args.subparser == "delete":
        book = Book.get(args.book)
        if book:
            book.delete()
            stdout.write(
                _('Successfully deleted book "%(title)s" with id "%(pk)d".') %
                {
                    "title": book.title,
                    "pk": book.pk
                },
                "",
                file=file,
            )
        else:
            stdout.write(_("No book found."), "", file=file)
    elif args.subparser == "edit":
        book = Book.get(args.book)
        if book:
            book.edit(args.edit_subparser, args.value)
            stdout.write(
                _('Successfully edited book "%(title)s" with id "%(pk)d".') % {
                    "title": book.title,
                    "pk": book.pk
                },
                "=",
                file=file,
            )
            book.print(file)
        else:
            stdout.write(_("No book found."), "", file=file)
    elif args.subparser == "edition":
        book = Book.get(args.book)
        if book:
            if args.edition_subparser == "acquisition" and book:
                edition = Edition.get(args.edition, book)
                acquisition: Optional[Acquisition] = None
                if args.acquisition_subparser == "add" and edition:
                    acquisition, created = Acquisition.from_dict(
                        {
                            "date": args.date,
                            "price": args.price
                        }, edition)
                    if created:
                        stdout.write(
                            _('Successfully added acquisition with id "%(pk)d".'
                              ) % {"pk": acquisition.pk},
                            "=",
                            file=file,
                        )
                    else:
                        stdout.write(
                            _('The acquisition already exists with id "%(pk)d".'
                              ) % {"pk": acquisition.pk},
                            "",
                            file=file,
                        )
                    acquisition.print(file)
                elif args.acquisition_subparser == "delete" and edition:
                    acquisition = Acquisition.get(args.acquisition,
                                                  editions=edition)
                    if acquisition:
                        acquisition.delete(acquisition)
                        stdout.write(
                            _('Successfully deleted acquisition with id "%(pk)d".'
                              ) % {"pk": acquisition.pk},
                            "",
                            file=file,
                        )
                    else:
                        stdout.write(_("No acquisition found."), "", file=file)
                elif args.acquisition_subparser == "edit" and edition:
                    acquisition = Acquisition.get(args.acquisition,
                                                  editions=edition)
                    if acquisition:
                        acquisition.edit(args.field, args.value)
                        stdout.write(
                            _('Successfully edited acquisition with id "%(pk)d".'
                              ) % {"pk": acquisition.pk},
                            "=",
                            file=file,
                        )
                        acquisition.print(file)
                    else:
                        stdout.write(_("No acquisition found."), "", file=file)
                else:
                    stdout.write([_("No edition found.")], "", file=file)
            elif args.edition_subparser == "add" and book:
                edition, created = Edition.from_dict(
                    {
                        "alternate_title":
                        args.alternate_title,
                        "isbn":
                        args.isbn,
                        "publishing_date":
                        args.publishing_date,
                        "cover":
                        args.cover,
                        "binding":
                        Binding.get_or_create(args.binding).to_dict()
                        if args.binding else None,
                        "publisher":
                        Publisher.get_or_create(args.publisher).to_dict()
                        if args.publisher else None,
                        "persons": [
                            Person.get_or_create(person).to_dict()
                            for person in args.person
                        ],
                        "languages": [
                            Language.get_or_create(language).to_dict()
                            for language in args.language
                        ],
                        "links": [
                            Link.get_or_create(link).to_dict()
                            for link in args.link
                        ],
                        "files": [{
                            "path": file
                        } for file in args.file],
                    },
                    book,
                )
                if created:
                    stdout.write(
                        _('Successfully added edition "%(edition)s" with id "%(pk)d".'
                          ) % {
                              "edition": edition,
                              "pk": edition.pk
                          },
                        "=",
                        file=file,
                    )
                    edition.print(file)
                else:
                    stdout.write(
                        _('The edition "%(edition)s" already exists with id "%(pk)d",'
                          + " aborting...") % {
                              "edition": edition,
                              "pk": edition.pk
                          },
                        "",
                        file=file,
                    )
            elif args.edition_subparser == "edit" and book:
                edition = Edition.get(args.edition, book)
                if edition:
                    edition.edit(args.edit_subparser, args.value)
                    stdout.write(
                        _('Successfully edited edition "%(edition)s" with id "%(pk)d".'
                          ) % {
                              "edition": edition,
                              "pk": edition.pk
                          },
                        "=",
                        file=file,
                    )
                    edition.print(file)
                else:
                    stdout.write(_("No edition found."), "", file=file)
            elif args.edition_subparser == "info" and book:
                edition = Edition.get(args.edition, book)
                if edition:
                    edition.print(file)
                else:
                    stdout.write(_("No edition found."), "", file=file)
            elif args.edition_subparser == "list" and book:
                if args.shelf:
                    editions = Edition.list.by_shelf(args.shelf, book)
                elif args.search:
                    editions = Edition.list.by_term(args.search, book)
                else:
                    editions = Edition.objects.filter(book=book)
                stdout.write(
                    [
                        _("Id"),
                        _("Title"),
                        _("Binding"),
                        _("ISBN"),
                        _("Publishing date"),
                    ],
                    "=",
                    [0.05, 0.55, 0.7, 0.85],
                    file=file,
                )
                for i, has_next in lookahead(editions):
                    stdout.write(
                        [
                            i.pk,
                            i.get_title(), i.binding, i.isbn, i.publishing_date
                        ],
                        "_" if has_next else "=",
                        [0.05, 0.55, 0.7, 0.85],
                        file=file,
                    )
            elif args.edition_subparser == "open" and book:
                edition = Edition.get(args.edition, book)
                if edition:
                    edition_file = edition.files.get(pk=args.file)
                    path = settings.MEDIA_ROOT / edition_file.file.path
                    if sys.platform == "linux":
                        os.system(f'xdg-open "{path}"')
                    else:
                        os.system(f'open "{path}"')
                else:
                    stdout.write(_("No edition found."), "", file=file)
            elif args.edition_subparser == "read" and book:
                edition = Edition.get(args.edition, book)
                read: Optional[Read] = None
                if args.read_subparser == "add" and edition:
                    read, created = Read.from_dict(
                        {
                            "started": args.started,
                            "finished": args.finished
                        }, edition)
                    if created:
                        stdout.write(
                            _('Successfully added read with id "%(pk)d".') %
                            {"pk": read.pk},
                            "=",
                            file=file,
                        )
                    else:
                        stdout.write(
                            _('The read already exists with id "%(pk)d".') %
                            {"pk": read.pk},
                            "",
                            file=file,
                        )
                    read.print(file)
                elif args.read_subparser == "delete" and edition:
                    read = Read.get(args.read, editions=edition)
                    if read:
                        read.delete()
                        stdout.write(
                            _('Successfully deleted read with id "%(pk)d".') %
                            {"pk": read.pk},
                            "",
                            file=file,
                        )
                    else:
                        stdout.write(_("No read found."), "", file=file)
                elif args.read_subparser == "edit" and edition:
                    read = Read.get(args.read, editions=edition)
                    if read:
                        read.edit(args.field, args.value)
                        stdout.write(
                            _('Successfully edited read with id "%(pk)d".') %
                            {"pk": read.pk},
                            "=",
                            file=file,
                        )
                        read.info(file)
                    else:
                        stdout.write(_("No read found."), "", file=file)
                else:
                    stdout.write(_("No edition found."), "", file=file)
        else:
            stdout.write(_("No book found."), "", file=file)
    elif args.subparser == "info":
        book = Book.get(args.book)
        if book:
            book.print(file)
        else:
            stdout.write(_("No book found."), "", file=file)
    elif args.subparser == "list":
        if args.search:
            books = Book.search(args.search)
        elif args.shelf:
            books = Book.by_shelf(args.shelf)
        else:
            books = Book.objects.all()
        stdout.write(
            [_("Id"), ("Title"),
             _("Authors"),
             _("Series"),
             _("Volume")],
            "=",
            [0.05, 0.5, 0.75, 0.9],
            file=file,
        )
        for i, has_next in lookahead(books):
            stdout.write(
                [
                    i.pk,
                    i.title,
                    " ,".join(f"{a}" for a in i.authors.all()),
                    i.series.name if i.series else "",
                    i.volume,
                ],
                "_" if has_next else "=",
                [0.05, 0.5, 0.75, 0.9],
                file=file,
            )
Exemplo n.º 34
0
    def test_from_to_dict(self):
        author1, created = Person.from_dict({"name": "John Doe"})
        self.assertTrue(created)
        self.assertIsNotNone(author1.id)

        author2, created = Person.from_dict({"name": "Jane Doe"})
        self.assertTrue(created)
        self.assertIsNotNone(author2.id)

        journal, created = Journal.from_dict({"name": "Science Journal"})
        self.assertTrue(created)
        self.assertIsNotNone(journal.id)

        paper, created = Paper.objects.get_or_create(
            title="Random new stuff", journal=journal, volume="1/2021"
        )
        paper.authors.add(author1)
        paper.authors.add(author2)
        self.assertTrue(created)
        self.assertIsNotNone(paper.id)
        self.assertEquals(
            {
                "title": "Random new stuff",
                "authors": [
                    {"name": "Jane Doe", "links": None},
                    {"name": "John Doe", "links": None},
                ],
                "journal": {"name": "Science Journal", "links": None},
                "volume": "1/2021",
                "publishing_date": None,
                "languages": None,
                "files": None,
                "bibtex": None,
                "links": None,
                "acquisitions": None,
                "reads": None,
            },
            paper.to_dict(),
        )
        self.assertEquals(
            (paper, False),
            Paper.from_dict(
                {
                    "title": "Random new stuff",
                    "authors": [
                        {"name": "Jane Doe", "links": None},
                        {"name": "John Doe", "links": None},
                    ],
                    "journal": {"name": "Science Journal", "links": None},
                    "volume": "1/2021",
                    "publishing_date": None,
                    "languages": None,
                    "files": None,
                    "bibtex": None,
                    "links": None,
                    "acquisitions": None,
                    "reads": None,
                }
            ),
        )
        self.assertEquals(
            (paper, False),
            Paper.from_dict(
                {
                    "title": "Random new stuff",
                    "authors": [
                        {"name": "Jane Doe"},
                        {"name": "John Doe"},
                    ],
                    "journal": {"name": "Science Journal"},
                    "volume": "1/2021",
                }
            ),
        )

        language, created = Language.from_dict({"name": "Englisch"})
        self.assertTrue(created)
        self.assertIsNotNone(language.id)

        link, created = Link.from_dict({"url": "https://example.com"})
        self.assertTrue(created)
        self.assertIsNotNone(link.id)

        paper, created = Paper.objects.get_or_create(
            title="Random Science stuff",
            publishing_date=datetime.strptime("2021-01-01", "%Y-%m-%d").date(),
            journal=journal,
            volume="2/2021",
        )
        paper.authors.add(author1)
        paper.authors.add(author2)
        paper.languages.add(language)
        paper.links.add(link)
        self.assertTrue(created)
        self.assertIsNotNone(paper.id)

        acquisition, created = Acquisition.from_dict(
            {"date": "2021-01-02", "price": 10}, paper
        )
        self.assertTrue(created)
        self.assertIsNotNone(acquisition.id)

        read, created = Read.from_dict(
            {"started": "2021-01-02", "finished": "2021-01-03"}, paper
        )
        self.assertTrue(created)
        self.assertIsNotNone(read.id)

        self.assertEquals(
            {
                "title": "Random Science stuff",
                "authors": [
                    {"name": "Jane Doe", "links": None},
                    {"name": "John Doe", "links": None},
                ],
                "journal": {"name": "Science Journal", "links": None},
                "volume": "2/2021",
                "publishing_date": "2021-01-01",
                "languages": [{"name": "Englisch"}],
                "files": None,
                "bibtex": None,
                "links": [{"url": "https://example.com"}],
                "acquisitions": [{"date": "2021-01-02", "price": 10.0}],
                "reads": [{"started": "2021-01-02", "finished": "2021-01-03"}],
            },
            paper.to_dict(),
        )
        self.assertEquals(
            (paper, False),
            Paper.from_dict(
                {
                    "title": "Random Science stuff",
                    "authors": [
                        {"name": "Jane Doe", "links": None},
                        {"name": "John Doe", "links": None},
                    ],
                    "journal": {"name": "Science Journal", "links": None},
                    "volume": "2/2021",
                    "publishing_date": "2021-01-01",
                    "languages": [{"name": "Englisch"}],
                    "files": None,
                    "bibtex": None,
                    "links": [{"url": "https://example.com"}],
                    "acquisitions": [{"date": "2021-01-02", "price": 10.0}],
                    "reads": [{"started": "2021-01-02", "finished": "2021-01-03"}],
                }
            ),
        )
        self.assertEquals(
            (paper, False),
            Paper.from_dict(
                {
                    "title": "Random Science stuff",
                    "authors": [
                        {"name": "Jane Doe"},
                        {"name": "John Doe"},
                    ],
                    "journal": {"name": "Science Journal"},
                    "volume": "2/2021",
                    "publishing_date": "2021-01-01",
                    "languages": [{"name": "Englisch"}],
                    "links": [{"url": "https://example.com"}],
                    "acquisitions": [{"date": "2021-01-02", "price": 10.0}],
                    "reads": [{"started": "2021-01-02", "finished": "2021-01-03"}],
                }
            ),
        )

        with NamedTemporaryFile() as f:
            f.write(b"Lorem ipsum dolorem")

            file, created = File.from_dict({"path": f.name})
            self.assertTrue(created)
            self.assertIsNotNone(file.id)
            self.assertEquals(
                os.path.basename(f.name), os.path.basename(file.file.name)
            )

            paper, created = Paper.objects.get_or_create(
                title="Boring Science stuff",
                publishing_date=datetime.strptime("2021-02-01", "%Y-%m-%d").date(),
                journal=journal,
                volume="2/2021",
            )
            paper.authors.add(author1)
            paper.authors.add(author2)
            paper.languages.add(language)
            paper.links.add(link)
            paper.files.add(file)
            paper.save()
            self.assertTrue(created)
            self.assertIsNotNone(paper.id)
            self.assertEquals(
                {
                    "title": "Boring Science stuff",
                    "authors": [
                        {"name": "Jane Doe", "links": None},
                        {"name": "John Doe", "links": None},
                    ],
                    "journal": {"name": "Science Journal", "links": None},
                    "volume": "2/2021",
                    "publishing_date": "2021-02-01",
                    "languages": [{"name": "Englisch"}],
                    "bibtex": None,
                    "links": [{"url": "https://example.com"}],
                    "files": [
                        {
                            "path": os.path.join(
                                settings.MEDIA_ROOT,
                                "papers",
                                str(paper.pk),
                                os.path.basename(f.name),
                            )
                        }
                    ],
                    "acquisitions": None,
                    "reads": None,
                },
                paper.to_dict(),
            )
Exemplo n.º 35
0
#! /usr/bin/env python

# import and setup Django environment (as "./manage.py shell" does):
from sys import argv, path as sys_path
import os
import django

sys_path.append('..')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
django.setup()

# actual import script:
from persons.models import Person

if __name__ == '__main__':
    if len(argv) != 2:
        print('USAGE: $ ./import.py /some/path/file.txt')
    else:
        imported_persons_count = 0
        with open(argv[1], 'r') as input_file:
            for line in input_file:
                short, full, mail = line.split('\t')
                person = Person(short_name=short, full_name=full, email=mail)
                person.save() # write new row to DB
                imported_persons_count += 1

        print('Imported %s persons.' % imported_persons_count)