Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Commit 18549c2

Browse files
committed
Check for matching extension/skin versions
1 parent c52f014 commit 18549c2

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

scripts/lib/scraper.py

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from models import ScrapeRecord, VersionRecord, Skin, Extension
2+
from sqlalchemy import select
23
from utils import log_message
34
import json
45
import re
@@ -32,11 +33,45 @@ def get_siteinfo(url, args, session):
3233
return None
3334

3435

36+
def last_versions_match(session, last_sr_id, skin_versions, extension_versions):
37+
stmt = select(ScrapeRecord).where(ScrapeRecord.w8y_sr_sr_id == last_sr_id)
38+
sr = session.scalars(stmt).one_or_none()
39+
if sr is None:
40+
return False, None
41+
vr_id = sr.w8y_sr_vr_id
42+
if vr_id is None:
43+
return False, None
44+
45+
stmt = select(Skin).where(Skin.w8y_sk_vr_id == vr_id)
46+
last_skins = session.scalars(stmt)
47+
count = 0
48+
for skin in last_skins:
49+
name = skin.w8y_sk_name
50+
if name not in skin_versions or skin.w8y_sk_version != skin_versions[name]:
51+
return False, None
52+
count += 1
53+
if len(skin_versions) != count:
54+
return False, None
55+
56+
stmt = select(Extension).where(Extension.w8y_ex_vr_id == vr_id)
57+
extensions = session.scalars(stmt)
58+
count = 0
59+
for extension in last_extensions:
60+
name = extension.w8y_ex_name
61+
if name not in extension_versions or extension.w8y_ex_version != extension_versions[name]:
62+
return False, None
63+
count += 1
64+
if len(extension_versions) != count:
65+
return False, None
66+
67+
return True, vr_id
68+
69+
3570
def create_version_records(session, last_sr_id, components):
3671
skins = []
37-
skin_names = []
72+
skin_versions = {}
3873
extensions = []
39-
extension_names = []
74+
extension_versions = {}
4075

4176
for comp in components:
4277
if 'name' in comp and 'type' in comp:
@@ -53,21 +88,25 @@ def create_version_records(session, last_sr_id, components):
5388
else:
5489
url = None
5590
if comp['type'] == 'skin':
56-
if name not in skin_names:
91+
if name not in skin_versions:
5792
skins.append({
5893
'name': name,
5994
'version': version,
6095
'url': url
6196
})
62-
skin_names.append(name)
97+
skin_versions[name] = version
6398
else:
64-
if name not in extension_names:
99+
if name not in extension_versions:
65100
extensions.append({
66101
'name': name,
67102
'version': version,
68103
'url': url
69104
})
70-
extension_names.append(name)
105+
extension_versions[name] = version
106+
107+
match, last_vr_id = last_versions_match(session, last_sr_id, skin_versions, extension_versions)
108+
if match:
109+
return last_vr_id
71110

72111
version_record = VersionRecord()
73112
session.add(version_record)

0 commit comments

Comments
 (0)