1212from xblock .runtime import KvsFieldData
1313from xmodule .modulestore import EdxJSONEncoder
1414from xmodule .modulestore .inheritance import InheritanceKeyValueStore , own_metadata
15+
1516from opaque_keys .edx .keys import UsageKey
1617log = logging .getLogger (__name__ )
18+
1719# assume all XML files are persisted as utf-8.
1820EDX_XML_PARSER = XMLParser (dtd_validation = False , load_dtd = False , remove_blank_text = True , encoding = 'utf-8' )
1921
@@ -142,22 +144,10 @@ def _extract_prereq_url_name(self, prereq_usage_key):
142144 """
143145 Extract the url_name from a prerequisite usage key.
144146 """
145- try :
146- if isinstance (prereq_usage_key , str ):
147- prereq_usage_key = UsageKey .from_string (prereq_usage_key )
148-
149- # Get the block_id which should be the url_name
147+ if isinstance (prereq_usage_key , str ):
148+ prereq_usage_key = UsageKey .from_string (prereq_usage_key )
150149 return prereq_usage_key .block_id
151-
152- except (ImportError , ValueError , AttributeError , TypeError ) as e :
153- log .warning ("Could not extract url_name from prerequisite key %s: %s" , prereq_usage_key , e )
154- # Extract from string as fallback
155- if isinstance (prereq_usage_key , str ):
156- # Assuming format like: block-v1:org+course+run+type@sequential+block@url_name
157- if '@sequential+block@' in prereq_usage_key :
158- parts = prereq_usage_key .split ('@sequential+block@' )
159- if len (parts ) > 1 :
160- return parts [1 ]
150+ else :
161151 return None
162152
163153 def _add_prerequisite_to_xml (self , xml_object ):
@@ -178,23 +168,12 @@ def _add_prerequisite_to_xml(self, xml_object):
178168 prereq_id , min_score , min_completion = prereq_info
179169 prereq_url_name = self ._extract_prereq_url_name (prereq_id )
180170 if not prereq_url_name :
181- log .warning ("Could not extract prerequisite url_name from %s" , prereq_id )
182171 return
183172
184- # Create prerequisite element
185173 prereq_element = etree .Element ('prerequisite' )
186- required_seq_element = etree .Element ('required_sequential' )
187- required_seq_element .set ('url_name' , prereq_url_name )
188- prereq_element .append (required_seq_element )
189- if min_score is not None and int (min_score ) > 0 :
190- min_score_element = etree .Element ('min_score' )
191- min_score_element .text = str (min_score )
192- prereq_element .append (min_score_element )
193- if min_completion is not None and int (min_completion ) > 0 :
194- min_completion_element = etree .Element ('min_completion' )
195- min_completion_element .text = str (min_completion )
196- prereq_element .append (min_completion_element )
197- # Insert at the beginning
174+ prereq_element .set ('required_content' , prereq_url_name )
175+ prereq_element .set ('min_score_element' , str (min_score ))
176+ prereq_element .set ('min_completion' , str (min_completion ))
198177 xml_object .insert (0 , prereq_element )
199178
200179 @staticmethod
@@ -501,7 +480,7 @@ def add_xml_to_node(self, node):
501480 return
502481
503482 if self .category == 'sequential' :
504- self ._add_prerequisite_to_xml (xml_object ) # Uncomment this later
483+ self ._add_prerequisite_to_xml (xml_object )
505484
506485 for aside in self .runtime .get_asides (self ):
507486 if aside .needs_serialization ():
0 commit comments