Pandas: noauth_local_webserver

Pandas: noauth_local_webserver

我已经有几个星期没有在 pandas 中使用 io 来访问 google 分析的 API,但据我所知,它在历史上一直运行良好,没有打嗝。我今天又 运行 它看起来好像 tools.run 语法已被弃用,所以我做了一个拉动并将 tools.py 替换为 this update 并且我已更改为 [= pandas 内的 17=] 为:

def authenticate(flow, storage=None):
    """
    Try to retrieve a valid set of credentials from the token store if possible
    Otherwise use the given authentication flow to obtain new credentials
    and return an authenticated http object

    Parameters
    ----------
    flow : authentication workflow
    storage: token storage, default None
    """
    http = httplib2.Http()

    # Prepare credentials, and authorize HTTP object with them.
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        credentials = tools.run_flow(flow, storage, FLAGS)

    http = credentials.authorize(http)
    return http

我感觉我对 FLAGS 的用法不正确。

有什么帮助吗?谢谢!

这是我的代码和错误:

df = ga.read_ga(
    account_id  = id,
    profile_id  = profile,
    property_id = property,
    metrics     = ['transactionRevenue', 'transactions'],
    dimensions  = ['transactionId', 'city', 'region', 'date', 'hour', 'minute', 'cityId'],
    start_date  = "2015-07-11",
    end_date    = "2015-07-16",
    index_col = 0,
    parse_dates = {'new_date': [3,4,5]})

抛出的错误:

C:\Users\mburke\AppData\Local\Continuum\Anaconda64\lib\site-packages\pandas\io\auth.py in authenticate(flow, storage)
    106     credentials = storage.get()
    107     if credentials is None or credentials.invalid:
--> 108         credentials = tools.run_flow(flow, storage, FLAGS)
    109 
    110     http = credentials.authorize(http)

C:\Users\mburke\AppData\Local\Continuum\Anaconda64\lib\site-packages\oauth2client\util.pyc in positional_wrapper(*args, **kwargs)
    140                 else:  # IGNORE
    141                     pass
--> 142             return wrapped(*args, **kwargs)
    143         return positional_wrapper
    144 

C:\Users\mburke\AppData\Local\Continuum\Anaconda64\lib\site-packages\oauth2client\tools.pyc in run_flow(flow, storage, flags, http)
    148     logging.getLogger().setLevel(getattr(logging, flags.logging_level))
--> 149     if not flags.noauth_local_webserver:
    150         success = False
    151         port_number = 0

C:\Users\mburke\AppData\Local\Continuum\Anaconda64\lib\site-packages\python_gflags-2.0-py2.7.egg\gflags.pyc in __getattr__(self, name)
   1057     fl = self.FlagDict()
   1058     if name not in fl:
-> 1059       raise AttributeError(name)
   1060     return fl[name].value
   1061 

AttributeError: noauth_local_webserver

我做了一些挖掘,你认为 FLAGS 的用法不正确的假设是正确的。 docstring for tools.run_flow() 状态:

flags: ``argparse.Namespace``, The command-line flags. This is the
       object returned from calling ``parse_args()`` on
       ``argparse.ArgumentParser`` as described above.

快速修复方法如下:

credentials = tools.run_flow(flow, storage, tools.argparser.parse_args([]))

我认为如果 tools.run 真的被弃用,pandas.io 的维护者将其更新为新的工作流程是一个更强大的解决方案。