def _handle_pairs_of_parts_and_bodies(self): try: locales_to_bodies = {} locales_to_fields = {} locale = self.doc._locale_kwarg default_locale = None split_content = Format.split_front_matter(self.content) for part, body in utils.every_two(split_content): fields = utils.load_yaml(part, pod=self.doc.pod) if '$locale' in fields and '$locales' in fields: text = 'You must specify either $locale or $locales, not both.' raise BadFormatError(text) if '$locales' in fields: doc_locales = fields['$locales'] else: doc_locales = [fields.get('$locale', default_locale)] for doc_locale in doc_locales: locales_to_fields[doc_locale] = fields locales_to_bodies[doc_locale] = body fields = locales_to_fields.get(default_locale) if locale in locales_to_fields: localized_fields = locales_to_fields[locale] if fields is None: fields = {} fields.update(localized_fields) default_body = locales_to_bodies.get(default_locale) self.body = locales_to_bodies.get(locale, default_body) self.body = self.body.strip() if self.body is not None else None self.fields = fields except (yaml.composer.ComposerError, yaml.scanner.ScannerError) as e: message = 'Error parsing {}: {}'.format(self.doc.pod_path, e) logging.exception(message) raise BadFormatError(message)
def _handle_pairs_of_parts_and_bodies(self): locales_to_bodies = {} locales_to_fields = {} locale = str(self.doc.locale) default_locale = str(self.doc.default_locale) for part, body in utils.every_two(Format.split_front_matter(self.content)): fields = yaml.load(part) doc_locale = fields.get('$locale', default_locale) locales_to_fields[doc_locale] = fields locales_to_bodies[doc_locale] = body fields = locales_to_fields.get(default_locale) if locale in locales_to_fields: localized_fields = locales_to_fields[locale] if fields is None: fields = {} fields.update(localized_fields) self.body = locales_to_bodies.get(locale, locales_to_bodies.get(default_locale)) self.body = self.body.strip() if self.body is not None else None self.fields = fields
def _iterate_content(self): pairs = utils.every_two(Format.split_front_matter(self.content)) return [(part, body) for part, body in pairs]