1- from models import ScrapeRecord , VersionRecord , Skin , Extension
1+ from models import ScrapeRecord , VersionRecord , SkinLink , SkinData , ExtensionLink , ExtensionData
22from sqlalchemy import select
33from utils import log_message
44import json
@@ -42,23 +42,31 @@ def last_versions_match(session, last_sr_id, skin_versions, extension_versions):
4242 if vr_id is None :
4343 return False , None
4444
45- stmt = select (Skin ).where (Skin .w8y_sk_vr_id == vr_id )
45+ stmt = select (SkinData ).join_from (
46+ SkinLink ,
47+ SkinData ,
48+ SkinLink .w8y_sl_sd_id == SkinData .w8y_sd_sd_id
49+ ).where (SkinLink .w8y_sl_vr_id == vr_id )
4650 last_skins = session .scalars (stmt )
4751 count = 0
4852 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 ]:
53+ name = skin .w8y_sd_name
54+ if name not in skin_versions or skin .w8y_sd_version != skin_versions [name ]:
5155 return False , None
5256 count += 1
5357 if len (skin_versions ) != count :
5458 return False , None
5559
56- stmt = select (Extension ).where (Extension .w8y_ex_vr_id == vr_id )
60+ stmt = select (ExtensionData ).join_from (
61+ ExtensionLink ,
62+ ExtensionData ,
63+ ExtensionLink .w8y_el_ed_id == ExtensionData .w8y_ed_ed_id
64+ ).where (ExtensionLink .w8y_el_vr_id == vr_id )
5765 last_extensions = session .scalars (stmt )
5866 count = 0
5967 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 ]:
68+ name = extension .w8y_ed_name
69+ if name not in extension_versions or extension .w8y_ed_version != extension_versions [name ]:
6270 return False , None
6371 count += 1
6472 if len (extension_versions ) != count :
@@ -114,24 +122,46 @@ def create_version_records(session, last_sr_id, components):
114122 vr_id = version_record .w8y_vr_vr_id
115123
116124 for skin in skins :
117- session .add (
118- Skin (
119- w8y_sk_vr_id = vr_id ,
120- w8y_sk_name = skin ['name' ],
121- w8y_sk_version = skin ['version' ],
122- w8y_sk_doc_url = skin ['url' ]
125+ stmt = select (SkinData ).where (
126+ (SkinData .w8y_sd_name == skin ['name' ]) &
127+ (SkinData .w8y_sd_version == skin ['version' ]) &
128+ (SkinData .w8y_sd_doc_url == skin ['url' ])
129+ )
130+ skin_data = session .scalars (stmt ).one_or_none ()
131+ if skin_data is None :
132+ skin_data = SkinData (
133+ w8y_sd_name = skin ['name' ],
134+ w8y_sd_version = skin ['version' ],
135+ w8y_sd_doc_url = skin ['url' ]
123136 )
137+ session .add (skin_data )
138+ session .commit ()
139+ skin_link = SkinLink (
140+ w8y_sl_vr_id = vr_id ,
141+ w8y_sl_sd_id = skin_data .w8y_sd_sd_id
124142 )
143+ session .add (skin_link )
125144
126145 for extension in extensions :
127- session .add (
128- Extension (
129- w8y_ex_vr_id = vr_id ,
130- w8y_ex_name = extension ['name' ],
131- w8y_ex_version = extension ['version' ],
132- w8y_ex_doc_url = extension ['url' ]
146+ stmt = select (ExtensionData ).where (
147+ (ExtensionData .w8y_ed_name == extension ['name' ]) &
148+ (ExtensionData .w8y_ed_version == extension ['version' ]) &
149+ (ExtensionData .w8y_ed_doc_url == extension ['url' ])
150+ )
151+ extension_data = session .scalars (stmt ).one_or_none ()
152+ if extension_data is None :
153+ extension_data = ExtensionData (
154+ w8y_ed_name = extension ['name' ],
155+ w8y_ed_version = extension ['version' ],
156+ w8y_ed_doc_url = extension ['url' ]
133157 )
158+ session .add (extension_data )
159+ session .commit ()
160+ extension_link = ExtensionLink (
161+ w8y_el_vr_id = vr_id ,
162+ w8y_el_ed_id = extension_data .w8y_ed_ed_id
134163 )
164+ session .add (extension_link )
135165
136166 return vr_id
137167
@@ -141,16 +171,11 @@ def scrape_site(url, page_id, last_sr_id, args, session):
141171 timestamp = time .time ()
142172
143173 if not data or 'query' not in data or 'general' not in data ['query' ] or 'statistics' not in data ['query' ]:
144- version_record = VersionRecord ()
145- session .add (version_record )
146- session .commit ()
147- vr_id = version_record .w8y_vr_vr_id
148174 scrape = ScrapeRecord (
149175 w8y_sr_page_id = page_id ,
150176 w8y_sr_api_url = bytes (url , 'utf-8' ),
151177 w8y_sr_timestamp = timestamp ,
152- w8y_sr_is_alive = False ,
153- w8y_sr_vr_id = vr_id
178+ w8y_sr_is_alive = False
154179 )
155180 session .add (scrape )
156181 session .commit ()
@@ -163,11 +188,11 @@ def scrape_site(url, page_id, last_sr_id, args, session):
163188 if 'dbtype' in general and 'dbversion' in general :
164189 db_version = general ['dbtype' ] + ': ' + general ['dbversion' ]
165190 else :
166- db_version = ""
191+ db_version = ''
167192 if 'phpversion' in general and 'phpsapi' in general :
168193 php_version = general ['phpversion' ] + '(' + general ['phpsapi' ] + ')'
169194 else :
170- php_version = ""
195+ php_version = ''
171196 language = general ['lang' ]
172197 if 'logo' in general and len (general ['logo' ]) < 256 :
173198 logo = general ['logo' ]
@@ -183,10 +208,7 @@ def scrape_site(url, page_id, last_sr_id, args, session):
183208 if 'extensions' in query :
184209 vr_id = create_version_records (session , last_sr_id , query ['extensions' ])
185210 else :
186- version_record = VersionRecord ()
187- session .add (version_record )
188- session .commit ()
189- vr_id = version_record .w8y_vr_vr_id
211+ vr_id = None
190212
191213 scrape = ScrapeRecord (
192214 w8y_sr_page_id = page_id ,
0 commit comments