From 934cc51a6ce412b444cd09af33d88a82b2406e81 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Sun, 22 Sep 2013 13:39:16 -0700 Subject: [PATCH] sending file stats (total lines in file, language name) to api --- wakatime/__init__.py | 15 +- wakatime/packages/pygments/__init__.py | 91 + wakatime/packages/pygments/cmdline.py | 441 ++ wakatime/packages/pygments/console.py | 74 + wakatime/packages/pygments/filter.py | 74 + .../packages/pygments/filters/__init__.py | 356 ++ wakatime/packages/pygments/formatter.py | 95 + .../packages/pygments/formatters/__init__.py | 68 + .../packages/pygments/formatters/_mapping.py | 92 + .../packages/pygments/formatters/bbcode.py | 109 + wakatime/packages/pygments/formatters/html.py | 821 +++ wakatime/packages/pygments/formatters/img.py | 553 ++ .../packages/pygments/formatters/latex.py | 378 ++ .../packages/pygments/formatters/other.py | 115 + wakatime/packages/pygments/formatters/rtf.py | 136 + wakatime/packages/pygments/formatters/svg.py | 154 + .../packages/pygments/formatters/terminal.py | 112 + .../pygments/formatters/terminal256.py | 222 + wakatime/packages/pygments/lexer.py | 765 +++ wakatime/packages/pygments/lexers/__init__.py | 240 + .../packages/pygments/lexers/_asybuiltins.py | 1645 ++++++ .../packages/pygments/lexers/_clbuiltins.py | 232 + .../pygments/lexers/_lassobuiltins.py | 5172 +++++++++++++++++ .../packages/pygments/lexers/_luabuiltins.py | 249 + wakatime/packages/pygments/lexers/_mapping.py | 350 ++ .../pygments/lexers/_openedgebuiltins.py | 562 ++ .../packages/pygments/lexers/_phpbuiltins.py | 3787 ++++++++++++ .../pygments/lexers/_postgres_builtins.py | 233 + .../pygments/lexers/_robotframeworklexer.py | 557 ++ .../pygments/lexers/_scilab_builtins.py | 40 + .../pygments/lexers/_sourcemodbuiltins.py | 1072 ++++ .../pygments/lexers/_stan_builtins.py | 360 ++ .../packages/pygments/lexers/_vimbuiltins.py | 13 + wakatime/packages/pygments/lexers/agile.py | 2290 ++++++++ wakatime/packages/pygments/lexers/asm.py | 398 ++ wakatime/packages/pygments/lexers/compiled.py | 3723 ++++++++++++ wakatime/packages/pygments/lexers/dalvik.py | 104 + wakatime/packages/pygments/lexers/dotnet.py | 671 +++ wakatime/packages/pygments/lexers/foxpro.py | 428 ++ .../packages/pygments/lexers/functional.py | 2731 +++++++++ wakatime/packages/pygments/lexers/hdl.py | 356 ++ wakatime/packages/pygments/lexers/jvm.py | 1112 ++++ wakatime/packages/pygments/lexers/math.py | 1918 ++++++ wakatime/packages/pygments/lexers/other.py | 3778 ++++++++++++ wakatime/packages/pygments/lexers/parsers.py | 778 +++ wakatime/packages/pygments/lexers/shell.py | 424 ++ wakatime/packages/pygments/lexers/special.py | 100 + wakatime/packages/pygments/lexers/sql.py | 559 ++ .../packages/pygments/lexers/templates.py | 1742 ++++++ wakatime/packages/pygments/lexers/text.py | 1893 ++++++ wakatime/packages/pygments/lexers/web.py | 4045 +++++++++++++ wakatime/packages/pygments/modeline.py | 40 + wakatime/packages/pygments/plugin.py | 74 + wakatime/packages/pygments/scanner.py | 104 + wakatime/packages/pygments/style.py | 117 + wakatime/packages/pygments/styles/__init__.py | 70 + wakatime/packages/pygments/styles/autumn.py | 65 + wakatime/packages/pygments/styles/borland.py | 51 + wakatime/packages/pygments/styles/bw.py | 49 + wakatime/packages/pygments/styles/colorful.py | 81 + wakatime/packages/pygments/styles/default.py | 73 + wakatime/packages/pygments/styles/emacs.py | 72 + wakatime/packages/pygments/styles/friendly.py | 72 + wakatime/packages/pygments/styles/fruity.py | 42 + wakatime/packages/pygments/styles/manni.py | 75 + wakatime/packages/pygments/styles/monokai.py | 106 + wakatime/packages/pygments/styles/murphy.py | 80 + wakatime/packages/pygments/styles/native.py | 65 + wakatime/packages/pygments/styles/pastie.py | 75 + wakatime/packages/pygments/styles/perldoc.py | 69 + wakatime/packages/pygments/styles/rrt.py | 33 + wakatime/packages/pygments/styles/tango.py | 141 + wakatime/packages/pygments/styles/trac.py | 63 + wakatime/packages/pygments/styles/vim.py | 63 + wakatime/packages/pygments/styles/vs.py | 38 + wakatime/packages/pygments/token.py | 195 + wakatime/packages/pygments/unistring.py | 140 + wakatime/packages/pygments/util.py | 277 + wakatime/stats.py | 52 + 79 files changed, 48613 insertions(+), 2 deletions(-) create mode 100644 wakatime/packages/pygments/__init__.py create mode 100644 wakatime/packages/pygments/cmdline.py create mode 100644 wakatime/packages/pygments/console.py create mode 100644 wakatime/packages/pygments/filter.py create mode 100644 wakatime/packages/pygments/filters/__init__.py create mode 100644 wakatime/packages/pygments/formatter.py create mode 100644 wakatime/packages/pygments/formatters/__init__.py create mode 100755 wakatime/packages/pygments/formatters/_mapping.py create mode 100644 wakatime/packages/pygments/formatters/bbcode.py create mode 100644 wakatime/packages/pygments/formatters/html.py create mode 100644 wakatime/packages/pygments/formatters/img.py create mode 100644 wakatime/packages/pygments/formatters/latex.py create mode 100644 wakatime/packages/pygments/formatters/other.py create mode 100644 wakatime/packages/pygments/formatters/rtf.py create mode 100644 wakatime/packages/pygments/formatters/svg.py create mode 100644 wakatime/packages/pygments/formatters/terminal.py create mode 100644 wakatime/packages/pygments/formatters/terminal256.py create mode 100644 wakatime/packages/pygments/lexer.py create mode 100644 wakatime/packages/pygments/lexers/__init__.py create mode 100644 wakatime/packages/pygments/lexers/_asybuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_clbuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_lassobuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_luabuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_mapping.py create mode 100644 wakatime/packages/pygments/lexers/_openedgebuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_phpbuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_postgres_builtins.py create mode 100644 wakatime/packages/pygments/lexers/_robotframeworklexer.py create mode 100644 wakatime/packages/pygments/lexers/_scilab_builtins.py create mode 100644 wakatime/packages/pygments/lexers/_sourcemodbuiltins.py create mode 100644 wakatime/packages/pygments/lexers/_stan_builtins.py create mode 100644 wakatime/packages/pygments/lexers/_vimbuiltins.py create mode 100644 wakatime/packages/pygments/lexers/agile.py create mode 100644 wakatime/packages/pygments/lexers/asm.py create mode 100644 wakatime/packages/pygments/lexers/compiled.py create mode 100644 wakatime/packages/pygments/lexers/dalvik.py create mode 100644 wakatime/packages/pygments/lexers/dotnet.py create mode 100644 wakatime/packages/pygments/lexers/foxpro.py create mode 100644 wakatime/packages/pygments/lexers/functional.py create mode 100644 wakatime/packages/pygments/lexers/hdl.py create mode 100644 wakatime/packages/pygments/lexers/jvm.py create mode 100644 wakatime/packages/pygments/lexers/math.py create mode 100644 wakatime/packages/pygments/lexers/other.py create mode 100644 wakatime/packages/pygments/lexers/parsers.py create mode 100644 wakatime/packages/pygments/lexers/shell.py create mode 100644 wakatime/packages/pygments/lexers/special.py create mode 100644 wakatime/packages/pygments/lexers/sql.py create mode 100644 wakatime/packages/pygments/lexers/templates.py create mode 100644 wakatime/packages/pygments/lexers/text.py create mode 100644 wakatime/packages/pygments/lexers/web.py create mode 100644 wakatime/packages/pygments/modeline.py create mode 100644 wakatime/packages/pygments/plugin.py create mode 100644 wakatime/packages/pygments/scanner.py create mode 100644 wakatime/packages/pygments/style.py create mode 100644 wakatime/packages/pygments/styles/__init__.py create mode 100644 wakatime/packages/pygments/styles/autumn.py create mode 100644 wakatime/packages/pygments/styles/borland.py create mode 100644 wakatime/packages/pygments/styles/bw.py create mode 100644 wakatime/packages/pygments/styles/colorful.py create mode 100644 wakatime/packages/pygments/styles/default.py create mode 100644 wakatime/packages/pygments/styles/emacs.py create mode 100644 wakatime/packages/pygments/styles/friendly.py create mode 100644 wakatime/packages/pygments/styles/fruity.py create mode 100644 wakatime/packages/pygments/styles/manni.py create mode 100644 wakatime/packages/pygments/styles/monokai.py create mode 100644 wakatime/packages/pygments/styles/murphy.py create mode 100644 wakatime/packages/pygments/styles/native.py create mode 100644 wakatime/packages/pygments/styles/pastie.py create mode 100644 wakatime/packages/pygments/styles/perldoc.py create mode 100644 wakatime/packages/pygments/styles/rrt.py create mode 100644 wakatime/packages/pygments/styles/tango.py create mode 100644 wakatime/packages/pygments/styles/trac.py create mode 100644 wakatime/packages/pygments/styles/vim.py create mode 100644 wakatime/packages/pygments/styles/vs.py create mode 100644 wakatime/packages/pygments/token.py create mode 100644 wakatime/packages/pygments/unistring.py create mode 100644 wakatime/packages/pygments/util.py create mode 100644 wakatime/stats.py diff --git a/wakatime/__init__.py b/wakatime/__init__.py index e333873..e4bc289 100644 --- a/wakatime/__init__.py +++ b/wakatime/__init__.py @@ -31,6 +31,7 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'packages')) from .log import setup_logging from .project import find_project +from .stats import get_file_stats from .packages import argparse from .packages import simplejson as json try: @@ -122,7 +123,7 @@ def get_user_agent(plugin): return user_agent -def send_action(project=None, branch=None, key=None, targetFile=None, +def send_action(project=None, branch=None, stats={}, key=None, targetFile=None, timestamp=None, endtime=None, isWrite=None, plugin=None, **kwargs): url = 'https://www.wakati.me/api/v1/actions' log.debug('Sending action to api at %s' % url) @@ -130,6 +131,10 @@ def send_action(project=None, branch=None, key=None, targetFile=None, 'time': timestamp, 'file': targetFile, } + if stats.get('lines'): + data['lines'] = stats['lines'] + if stats.get('language'): + data['language'] = stats['language'] if endtime: data['endtime'] = endtime if isWrite: @@ -187,11 +192,17 @@ def main(argv=None): if os.path.isfile(args.targetFile): branch = None name = None + stats = get_file_stats(args.targetFile) project = find_project(args.targetFile) if project: branch = project.branch() name = project.name() - if send_action(project=name, branch=branch, **vars(args)): + if send_action( + project=name, + branch=branch, + stats=stats, + **vars(args) + ): return 0 return 102 else: diff --git a/wakatime/packages/pygments/__init__.py b/wakatime/packages/pygments/__init__.py new file mode 100644 index 0000000..2bfd8ba --- /dev/null +++ b/wakatime/packages/pygments/__init__.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +""" + Pygments + ~~~~~~~~ + + Pygments is a syntax highlighting package written in Python. + + It is a generic syntax highlighter for general use in all kinds of software + such as forum systems, wikis or other applications that need to prettify + source code. Highlights are: + + * a wide range of common languages and markup formats is supported + * special attention is paid to details, increasing quality by a fair amount + * support for new languages and formats are added easily + * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image + formats that PIL supports, and ANSI sequences + * it is usable as a command-line tool and as a library + * ... and it highlights even Brainfuck! + + The `Pygments tip`_ is installable with ``easy_install Pygments==dev``. + + .. _Pygments tip: + http://bitbucket.org/birkenfeld/pygments-main/get/tip.zip#egg=Pygments-dev + + :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +__version__ = '1.6' +__docformat__ = 'restructuredtext' + +__all__ = ['lex', 'format', 'highlight'] + + +import sys + +from pygments.util import StringIO, BytesIO + + +def lex(code, lexer): + """ + Lex ``code`` with ``lexer`` and return an iterable of tokens. + """ + try: + return lexer.get_tokens(code) + except TypeError, err: + if isinstance(err.args[0], str) and \ + 'unbound method get_tokens' in err.args[0]: + raise TypeError('lex() argument must be a lexer instance, ' + 'not a class') + raise + + +def format(tokens, formatter, outfile=None): + """ + Format a tokenlist ``tokens`` with the formatter ``formatter``. + + If ``outfile`` is given and a valid file object (an object + with a ``write`` method), the result will be written to it, otherwise + it is returned as a string. + """ + try: + if not outfile: + #print formatter, 'using', formatter.encoding + realoutfile = formatter.encoding and BytesIO() or StringIO() + formatter.format(tokens, realoutfile) + return realoutfile.getvalue() + else: + formatter.format(tokens, outfile) + except TypeError, err: + if isinstance(err.args[0], str) and \ + 'unbound method format' in err.args[0]: + raise TypeError('format() argument must be a formatter instance, ' + 'not a class') + raise + + +def highlight(code, lexer, formatter, outfile=None): + """ + Lex ``code`` with ``lexer`` and format it with the formatter ``formatter``. + + If ``outfile`` is given and a valid file object (an object + with a ``write`` method), the result will be written to it, otherwise + it is returned as a string. + """ + return format(lex(code, lexer), formatter, outfile) + + +if __name__ == '__main__': + from pygments.cmdline import main + sys.exit(main(sys.argv)) diff --git a/wakatime/packages/pygments/cmdline.py b/wakatime/packages/pygments/cmdline.py new file mode 100644 index 0000000..c25204b --- /dev/null +++ b/wakatime/packages/pygments/cmdline.py @@ -0,0 +1,441 @@ +# -*- coding: utf-8 -*- +""" + pygments.cmdline + ~~~~~~~~~~~~~~~~ + + Command line interface. + + :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +import sys +import getopt +from textwrap import dedent + +from pygments import __version__, highlight +from pygments.util import ClassNotFound, OptionError, docstring_headline +from pygments.lexers import get_all_lexers, get_lexer_by_name, get_lexer_for_filename, \ + find_lexer_class, guess_lexer, TextLexer +from pygments.formatters import get_all_formatters, get_formatter_by_name, \ + get_formatter_for_filename, find_formatter_class, \ + TerminalFormatter # pylint:disable-msg=E0611 +from pygments.filters import get_all_filters, find_filter_class +from pygments.styles import get_all_styles, get_style_by_name + + +USAGE = """\ +Usage: %s [-l | -g] [-F [:]] [-f ] + [-O ] [-P ] [-o ] [] + + %s -S + + +

%(title)s

+ +''' + +DOC_HEADER_EXTERNALCSS = '''\ + + + + + %(title)s + + + + +

%(title)s

+ +''' + +DOC_FOOTER = '''\ + + +''' + + +class HtmlFormatter(Formatter): + r""" + Format tokens as HTML 4 ```` tags within a ``
`` tag, wrapped
+    in a ``
`` tag. The ``
``'s CSS class can be set by the `cssclass` + option. + + If the `linenos` option is set to ``"table"``, the ``
`` is
+    additionally wrapped inside a ```` which has one row and two
+    cells: one containing the line numbers and one containing the code.
+    Example:
+
+    .. sourcecode:: html
+
+        
+
+ + +
+
1
+            2
+
+
def foo(bar):
+              pass
+            
+
+ + (whitespace added to improve clarity). + + Wrapping can be disabled using the `nowrap` option. + + A list of lines can be specified using the `hl_lines` option to make these + lines highlighted (as of Pygments 0.11). + + With the `full` option, a complete HTML 4 document is output, including + the style definitions inside a ``