示例#1
0
 def get(self, request, *args, **kwargs):
     self.object = self.get_object()
     try:
         issues = utils.get_collected_issues(self.object)
     except ValueError as ex:
         messages.error(
             self.request,
             message=ex.args[0])
         return redirect(self.get_failure_url())
     series_names = [
         series.group('series_name').strip()
         for series in issues
         ]
     self.all_found, series_data = utils.check_series_exist(self.object, series_names)
     if self.all_found:
         success, message = utils.parse_description(self.object)
         level = messages.SUCCESS if success else messages.WARNING
         messages.add_message(
             self.request,
             level,
             message)
         return redirect(self.get_success_url())
     return self.render_to_response(
         self.get_context_data(
             series_data=series_data,
             collecting=utils.get_collecting(self.object),
             title='Series found for "{}"'.format(self.object.title)))
示例#2
0
def collecting(book: Book) -> str:
    """Get the collecting statement from the given description."""
    try:
        return get_collecting(book)
    except (ValueError, AttributeError):
        return ''
 def handle(self, *args, **options):
     for book in Book.objects.exclude(book_type__exact='comic'):
         try:
             collecting = get_collecting(book)
         except ValueError as ex:
             self.stderr.write(str(ex))
             continue
         self.stdout.write('\n\n=====================')
         self.stdout.write('Parsing {} ...'.format(book.title))
         self.stdout.write(collecting)
         self.stdout.write('=====================\n\n')
         book.series_mapping.clear()
         for collected_series in get_collected_issues(book):
             series_name = collected_series.group('series_name').strip().upper()
             db_series = Series.objects.filter(matches__contains=[series_name]).exclude(marvel_id__isnull=True)
             series_map = {str(i): s for i, s in enumerate(db_series)}
             selection = ''
             if db_series.count() == 1:
                 series = db_series.first()
                 book.series_mapping[series_name] = str(series.id)
                 book.series.add(series)
                 book.save()
                 continue
             if db_series.count() > 1:
                 for idx, s in iter(sorted(series_map.items())):
                     self.stdout.write('{}. {}'.format(idx, s))
                 selection = input('"{}" Enter # matching or press ENTER: '.format(series_name))
                 if selection != '' and selection in series_map:
                     book.series_mapping[series_name] = str(series_map[selection].id)
                     book.series.add(series_map[selection])
             if db_series.count() == 0 or selection == '' or selection not in series_map:
                 provider = MarvelSeriesInfoProvider()
                 querystring = input('"{}" Correct name or press ENTER to search on Marvel API: '.format(series_name))
                 querystring = series_name if not querystring else querystring
                 provider.query(querystring)
                 series_map = {str(i): s for i, s in enumerate(provider.results)}
                 if provider.total > 0:
                     for i, s in iter(sorted(series_map.items())):
                         self.stdout.write('{}. {} ({}) [{}]'.format(i, s.name, s.start_year, s.issue_count))
                     selection = input('"{}" Enter matching # or press ENTER: '.format(series_name))
                     if selection != '' and selection in series_map:
                         s = series_map[selection]
                         series, _ = Series.objects.get_or_create(
                             name=s.name,
                             start_year=s.start_year,
                         )
                         series.marvel_id = s.marvel_id
                         series.matches.append(series_name)
                         series.save()
                         book.series_mapping[series_name] = str(series.id)
                         book.series.add(series)
         book.save()
         success, message = parse_description(book)
         if success:
             self.stdout.write(message)
             self.stdout.write('{} has the following series and issues:'.format(book.title))
             for s in book.series.all():
                 self.stdout.write('{}'.format(s))
                 for i in book.issues.filter(series=s):
                     self.stdout.write('\t{0.title} ({0.marvel_id})'.format(i))
         else:
             self.stderr.write('\n{} while parsing {}\n'.format(message, book.title))