# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""An cherry app to play as a fake Telemetry service.

This is a short term solution in order to deprecation devserver.py from labs.
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import cherrypy  # pylint: disable=import-error


def get_config():
  """Get cherrypy config for this application."""
  return {
      '/': {
          'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
      }
  }


@cherrypy.expose
class FakeTelemetry(object):
  """An application to handle fake telemetry requests."""
  def GET(self, **kwargs):
    """A URL handler for setting up telemetry."""
    archive_url = kwargs.get('archive_url')
    return 'Fake Telemetry: To be implemented. Archive URL: %s\n' % archive_url
