Ejemplo n.º 1
0
def deleteGroupAutoReleases(data):

	if not current_user.is_mod():
		return getResponse(error=True, message="I see what you (tried) to do there!")

	assert 'item-id' in data
	assert 'mode' in data
	assert data['mode'] == "delete-auto-from-group"

	try:
		delete_id = int(data["item-id"])
	except ValueError:
		raise AssertionError("Failure converting item ID to integer!")


	clean_item = Translators.query.filter(Translators.id==delete_id).one()

	print(clean_item)
	for release in clean_item.releases:
		if release.changeuser == FeedFeeder.FeedFeeder.RSS_USER_ID:
			db.session.delete(release)
			# print(release.id, release.volume, release.chapter, release.postfix, release.changeuser)
		else:
			print("Not deleting: ", release.id, release.volume, release.chapter, release.postfix, release.changeuser)

	db.session.commit()

	return getResponse("Autogen releases deleted. Reloading.", error=False)
Ejemplo n.º 2
0
def flatten_series_by_url(data):
	if not current_user.is_mod():
		return getResponse(error=True, message="You have to have moderator privileges to do that!")

	dups = db.engine.execute('''
		SELECT
			website, COUNT(*) AS dupes
		FROM
			series
		WHERE
			website IS NOT NULL AND website != ''
		GROUP
			BY website
		HAVING
			(COUNT(*) > 1);''')
	dups = list(dups)

	match_num = 0
	for website, number in dups:
		print(website, number)
		matches = Series.query.filter(Series.website==website).all()
		ids = [match.id for match in matches]
		zipped = list(zip(ids, ids[1:]))
		for m1, m2 in zipped:
			match_num += 1
			merge_series_ids(m1, m2)

	return getResponse("%s Items merged." % match_num, error=False)
Ejemplo n.º 3
0
def mergeSeriesItems(data):
	if not current_user.is_mod():
		return getResponse(error=True, message="You have to have moderator privileges to do that!")


	assert 'mode' in data
	assert data['mode'] == 'merge-id'
	assert 'item-id' in data
	assert 'merge_id' in data

	m1, m2 = int(data['item-id']), int(data['merge_id'])
	return merge_series_ids(m1, m2)
Ejemplo n.º 4
0
def delete_duplicate_releases(data):
	if not current_user.is_mod():
		return getResponse(error=True, message="You have to have moderator privileges to do that!")

	dups = db.engine.execute('''
		SELECT
			srcurl, COUNT(*) AS dupes
		FROM
			releases
		WHERE
			srcurl IS NOT NULL AND srcurl != ''
		GROUP
			BY srcurl
		HAVING
			(COUNT(*) > 1);''')
	dups = list(dups)

	match_num = 0
	mismatches = set()
	for website, number in dups:
		# print(website, number)
		matches = Releases.query.filter(Releases.srcurl==website).all()
		zipped = list(zip(matches, matches[1:]))
		for m1, m2 in zipped:
			if m1.series != m2.series:
				tup = (m1.series, m2.series)
				if tup not in mismatches:
					print("Mismatch!")
					print(m1.series, m2.series)
					mismatches.add(tup)
			else:
				match_num += 1
				# print(m1.series, m2.series)

				# Sort by change-time, since we care more about
				# the latest change (since it'll probably be more accurate)
				if m1.changetime < m2.changetime:
					older = m1
					newer = m2
				else:
					older = m2
					newer = m1

				db.session.delete(older)
				db.session.commit()

	# print(dups)
	# print(list(dups))

	return getResponse("%s Items merged." % match_num, error=False)
Ejemplo n.º 5
0
def deleteSeries(data):

	if not current_user.is_mod():
		return getResponse(error=True, message="I see what you (tried) to do there!")
	assert 'item-id' in data
	assert 'mode' in data

	delete_id = data["item-id"]
	clean_item = Series.query.filter(Series.id==delete_id).one()


	# !Ordering here matters!
	# Change-tables have to go second.
	delete_from = [
			AlternateNames,
			AlternateNamesChanges,
			Author,
			AuthorChanges,
			Illustrators,
			IllustratorsChanges,
			Tags,
			TagsChanges,
			Genres,
			GenresChanges,
			Publishers,
			PublishersChanges,
			Covers,
			CoversChanges,
			Releases,
			ReleasesChanges,
			# Series,
			# SeriesChanges,
		]


	for clearTable in delete_from:
		clearTable.query.filter(clearTable.series==clean_item.id).delete()

	Watches.query.filter(Watches.series_id==clean_item.id).delete()
	Series.query.filter(Series.id==clean_item.id).delete()
	SeriesChanges.query.filter(SeriesChanges.srccol==clean_item.id).delete()
	# db.session.delete(clean_item)
	db.session.commit()

	return getResponse("Series was deleted entirely!", error=False)
Ejemplo n.º 6
0
def alterReleaseItem(data):

	if not current_user.is_mod():
		return getResponse(error=True, message="You have to have moderator privileges to do that!")
	assert 'op' in data
	assert 'mode' in data
	assert 'count' in data
	assert 'id' in data

	assert data['mode'] == "release-ctrl"

	try:
		data['id'] = int(data['id'])
	except ValueError:
		raise AssertionError("Failure converting item ID to integer!")
	assert data['count'] in BOOL_LUT
	data['count'] = BOOL_LUT[data['count']]

	assert data['op'] in RELEASE_OPS

	return RELEASE_OPS[data['op']](data)
Ejemplo n.º 7
0
def fix_escaped_quotes(dummy_data):
	if not current_user.is_mod():
		return getResponse(error=True, message="You have to have moderator privileges to do that!")

	# SELECT * FROM series WHERE title LIKE E'%\\\'%';
	bad_title = 0


	q = Series.query.filter(or_(Series.title.like(r"%'%"), Series.title.like(r"%’%"), Series.title.like(r"%‘%"), Series.title.like(r"%“%"), Series.title.like(r"%”%")))
	items = q.all()
	print("Name fixing processing query resulted in %s items" % len(items))
	for item in items:
		old = item.title
		new = old
		while any([r"\"" in new, r"\'" in new, "’" in new, "‘" in new, "“" in new, "”" in new]):
			new = new.replace(r"\'", "'")
			new = new.replace(r'\"', '"')
			new = new.replace(r"’", "'")
			new = new.replace(r"‘", "'")
			new = new.replace(r"“", '"')
			new = new.replace(r"”", '"')

		have = Series.query.filter(Series.title == new).scalar()
		if old != new:
			if have:
				print("Duplicate item!", (old, new), old==new)
				merge_series_ids(have.id, item.id)
			else:
				print("Fixing title.")
				item.title = new
				db.session.commit()
			bad_title += 1

	bad_alt_title = 0


	q = AlternateNames.query.filter(or_(AlternateNames.name.like(r"%'%"), AlternateNames.name.like(r"%’%"), AlternateNames.name.like(r"%‘%"), AlternateNames.name.like(r"%“%"), AlternateNames.name.like(r"%”%")))

	conflicts = ''
	items = q.all()
	print("Alternate names processing query resulted in %s items" % len(items))
	for item in items:
		old = item.name
		new = old
		while any([r"\"" in new, r"\'" in new, "’" in new, "‘" in new, "“" in new, "”" in new]):
			new = new.replace(r"\'", "'")
			new = new.replace(r'\"', '"')
			new = new.replace(r"’", "'")
			new = new.replace(r"‘", "'")
			new = new.replace(r"“", '"')
			new = new.replace(r"”", '"')
		if old != new:
			have = AlternateNames.query.filter(AlternateNames.name == new).scalar()

			if have:
				if have.series == item.series:
					print("Duplicate names")
					assert have.series == item.series
					# We don't care about duplicates if one is the escaped version of the other
					db.session.delete(item)
					db.session.commit()
				else:
					conflicts += """\nSeries mismatch?\nSeries %s: '%s'\nSeries %s: '%s'""" % (have.series, have.name, item.series, item.name)
					print("Wat?", have.name, item.name)
					print("Wat?", have.series, item.series)
			else:
				print("Fixing title.")
				item.name = new
				db.session.commit()
			bad_alt_title += 1

	bad_desc = 0



	# F**K ALL SMART QUOTE BULLSHITS EVER
	q = Series.query.filter(or_(Series.description.like(r"%'%"), Series.description.like(r"%’%"), Series.description.like(r"%‘%"), Series.description.like(r"%“%"), Series.description.like(r"%”%")))

	items = q.all()
	print("Series description processing query resulted in %s items" % len(items))
	for item in items:
		old = item.description
		new = old

		while any([r"\"" in new, r"\'" in new, "’" in new, "‘" in new, "“" in new, "”" in new]):
			new = new.replace(r"\'", "'")
			new = new.replace(r'\"', '"')
			new = new.replace(r"’", "'")
			new = new.replace(r"‘", "'")
			new = new.replace(r"“", '"')
			new = new.replace(r"”", '"')
		if old != new:
			print("Fixing description smart-quotes and over-escapes for series: %s" % item.id)
			item.description = new
			db.session.commit()
			bad_desc += 1

	print("Update complete.")

	return getResponse("%s main titles, %s alt titles, %s descriptions required fixing.%s" % (bad_title, bad_alt_title, bad_desc, conflicts), error=False)
Ejemplo n.º 8
0
def processMangaUpdateJson(data):
	validated = validateMangaData(data)

	sid = validated['id']
	series = Series.query.filter(Series.id==sid).one()
	print(validated)

	for entry in validated['entries']:
		# print(entry)

		if entry['type'] == 'title':
			if not current_user.is_mod():
				return getResponse(error=True, message="You have to have moderator privileges to do that!")

			ret = updateTitle(series, bleach.clean(entry['data'], strip=True))
			if ret:
				return ret

		elif entry['type'] == 'description':
			processedData = markdown.markdown(bleach.clean(entry['data'], strip=True))
			if series.description == processedData:
				# print("No change?")
				pass
			else:
				series.description = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()


		elif entry['type'] == 'demographic':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.demographic == processedData:
				# print("No change?")
				pass
			else:
				series.demographic = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'orig_status':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.orig_status == processedData:
				# print("No change?")
				pass
			else:
				series.orig_status = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'region':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.demographic == processedData:
				# print("No change?")
				pass
			else:
				series.region = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'tl_type':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.tl_type == processedData:
				# print("No change?")
				pass
			else:
				series.tl_type = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'license_en':
			lic_state = entry['data']

			if lic_state not in VALID_LICENSE_STATES:
				raise ValueError("Invalid license data!")
			else:
				lic_state = VALID_LICENSE_STATES[lic_state]

			series.license_en = lic_state
			series.changeuser = getCurrentUserId()
			series.changetime = datetime.datetime.now()


			# if series.demographic == processedData:
			# 	# print("No change?")
			# 	pass
			# else:
			# 	series.region = processedData
			# 	series.changeuser = getCurrentUserId()
			# 	series.changetime = datetime.datetime.now()

		elif entry['type'] == 'type':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.type == processedData:
				# print("No change?")
				pass
			else:
				series.type = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'origin_loc':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.origin_loc == processedData:
				# print("No change?")
				pass
			else:
				series.origin_loc = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'orig_lang':
			processedData = bleach.clean(entry['data'], strip=True)
			if series.orig_lang == processedData:
				# print("No change?")
				pass
			else:
				series.orig_lang = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'website':
			processedData = bleach.clean(entry['data'], strip=True, tags=[])
			if series.website == processedData:
				# print("No change?")
				pass
			else:
				series.website    = processedData
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'first_publish_date':
			pub_date = entry['data']
			if series.pub_date == pub_date:
				# print("No change?")
				pass
			else:
				series.pub_date   = pub_date
				print("Publish date: ", series.pub_date)
				series.changeuser = getCurrentUserId()
				series.changetime = datetime.datetime.now()

		elif entry['type'] == 'author':

			ret = app.series_tools.setAuthorIllust(series, author=entry['data'])
			if ret:
				return ret

		elif entry['type'] == 'illustrators':
			ret = app.series_tools.setAuthorIllust(series, illust=entry['data'])
			if ret:
				return ret

		elif entry['type'] == 'publisher':
			ret = app.series_tools.updatePublishers(series, publishers=entry['data'])
			if ret:
				return ret

		elif entry['type'] == 'tag':
			ret = app.series_tools.updateTags(series, entry['data'])
			if ret:
				return ret

		elif entry['type'] == 'genre':
			ret = app.series_tools.updateGenres(series, entry['data'])
			if ret:
				return ret

		elif entry['type'] == 'alternate-names':
			ret = app.series_tools.updateAltNames(series, entry['data'])
			if ret:
				return ret
		else:
			raise AssertionError("Unknown modifification type!")

	db.session.commit()
	ret = {
			"error"   : False,
			"message" : "Wat?!"
	}
	return ret