Source code for okcupyd.essay

from . import util
from . import helpers
from .xpath import xpb


[docs]class Essays(object): """Interface to reading and writing essays.""" @staticmethod
[docs] def build_essay_property(essay_index, essay_name): essay_xpb = xpb.div(id='essay_{0}'.format(essay_index)) essay_text_xpb = essay_xpb.div.with_class('text').div.with_class('essay') @property def essay(self): try: essay_text = essay_text_xpb.get_text_(self._essays).strip() except IndexError: return None if essay_name not in self._short_name_to_title: self._short_name_to_title[essay_name] = helpers.replace_chars( essay_xpb.a.with_class('essay_title').get_text_( self._profile.profile_tree ) ) return essay_text @essay.setter def set_essay_text(self, essay_text): self._submit_essay(essay_index, essay_text) return set_essay_text
@classmethod def _init_essay_properties(cls): for essay_index, essay_name in enumerate(cls.essay_names): setattr(cls, essay_name, cls.build_essay_property(essay_index, essay_name)) _essays_xpb = xpb.div(id='main_column') #: A list of the attribute names that are used to store the text of #: of essays on instances of this class. essay_names = ['self_summary', 'my_life', 'good_at', 'people_first_notice', 'favorites', 'six_things', 'think_about', 'friday_night', 'private_admission', 'message_me_if'] def __init__(self, profile): """:param profile: A :class:`.Profile`""" self._profile = profile self._short_name_to_title = {} @property def short_name_to_title(self): for i in self: pass # Make sure that all essays names have been retrieved return self._short_name_to_title @util.cached_property def _essays(self): return self._essays_xpb.one_(self._profile.profile_tree) def _submit_essay(self, essay_id, essay_body): self._profile.authcode_post('profileedit2', data={ "essay_id": essay_id, "essay_body": essay_body, "okc_api": 1 }) self.refresh()
[docs] def refresh(self): self._profile.refresh() util.cached_property.bust_caches(self)
def __iter__(self): for essay_name in self.essay_names: yield getattr(self, essay_name)
Essays._init_essay_properties()