コード例 #1
0
ファイル: views.py プロジェクト: wengole/comiccollector
 def form_valid(self, form):
     original_upper = form.cleaned_data['original'].upper()
     if 'add' in self.request.POST:
         series, _ = Series.objects.get_or_create(
             name=form.cleaned_data['name'],
             start_year=form.cleaned_data['start_year'],
             end_year=form.cleaned_data['end_year'],
             marvel_id=form.cleaned_data['marvel_id'],
         )
         utils.add_series_to_book(self.object, series, original_upper)
         return redirect(self.request.path)
     series_name = form.cleaned_data['name']
     series = Series.objects.filter(id=self.object.series_mapping.get(series_name.upper()))
     if form.cleaned_data['start_year'] is not None:
         start_year = int(form.cleaned_data['start_year'])
         series.filter(start_year=start_year)
     else:
         start_year = datetime.now().year
     if series.count() == 1:
         utils.add_series_to_book(self.object, series[0], original_upper)
         return redirect(self.request.path)
     provider = MarvelSeriesInfoProvider()
     results = provider.query(
         querystring=series_name)
     if results.total == 0:
         series, _ = Series.objects.get_or_create(
             name=series_name.title(),
             start_year=start_year,
         )
         utils.add_series_to_book(self.object, series, original_upper)
         return redirect(self.request.path)
     return self.render_to_response(self.get_context_data(
         original=form.cleaned_data['original'],
         results=results.results,
         title='Search results for "{}"'.format(series_name)))
コード例 #2
0
 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))