Виталий Глибин, HeadHunter
модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо связанных заменяемых компонентов со стандартизированными интерфейсами и протоколам взаимодействия.
Источник: Wikipedia
 
     
    Источник: Akamai
 
    class Page(page.PageHandler):
    @page.user_page(xsl='pages/index.xsl')
    def get_page(self):
        self.doc.put(
            self.get_url('{}/resumes'.format(resumeHost)),
            self.get_url('{}/negotiations'.format(negHost))
        ) 
     
     
     
    def session(handler, callback):
    def _session_callback(session):
        handler.session = session
        callback()
    session_client.get_session(_session_callback, ...)
		class MobilePageHandler(tortik.page.RequestHandler):
    preprocessors = [
        session,
        pagedata
    ]
		self.add('name', data) self.complete({'name': data})def get(self):
    self.add('server_time', int(time.time))
    self.add('data', {...})
    self.complete()
def template(handler, data, callback):
    out = template_engine.render(handler.template_name,
                                 data=handler.get_data())
    callback(handler, out)
class MobilePageHandler(tortik.page.RequestHandler):
    postprocessors = [
        template,
        translation
    ]
		self.fetch_requests([
    self.make_request(
        name='vacancies',
        method='GET',
        full_url='https://api.hh.ru/vacancies/8252535'),
        ...
    ], callback=self.complete)
		
			self.fetch_requests([
    ('vacancies', 'https://api.hh.ru/vacancies/8252535'),
    ...
], callback=_cb)
            
		
    def _cb():
    response = self.responses['vacancies']
    data = response.data # json или xml
    # плюс автоматический
    # self.add('vacancies', response.data)
    self.complete()
            
		handler.log.stage_started('render')
# do some hard render stuff
handler.log.stage_complete('render')
        
		handler.fetch_requests(
    ...
    callback=_cb,
    stage='session'
)
        
		MONIK handler=hhmobile.pages.Page method=GET code=200 
total=93 session=13.98 page=47.14 render=21.77 
translation=7.30 
    MONIK handler=hhmobile.pages.Page method=GET code=200 
total=93 session=13.98 page=47.14 render=21.77 
translation=7.30 
    MONIK handler=hhmobile.pages.Page method=GET code=200 
total=93 session=13.98 page=47.14 render=21.77 
translation=7.30 
    MONIK handler=hhmobile.pages.Page method=GET code=200 
total=93 session=13.98 page=47.14 render=21.77 
translation=7.30 
     
     
    
            Виталий Глибин, HeadHunter
            
            @glibin, glibin.ru