Skip to content

Commit

Permalink
Merge 32ab330 into 8ba220a
Browse files Browse the repository at this point in the history
  • Loading branch information
ekampf committed Dec 19, 2018
2 parents 8ba220a + 32ab330 commit bfd5388
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@

[![Build Status](https://travis-ci.org/ekampf/cql.svg?branch=master)](https://travis-ci.org/ekampf/cql)
[![Coverage Status](https://coveralls.io/repos/github/ekampf/gql/badge.svg?branch=master)](https://coveralls.io/github/ekampf/gql?branch=master)

Work in progress! Do NOT use yet...
37 changes: 37 additions & 0 deletions gql/utils_codegen.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import os

SPACES = ' ' * 4


class CodeGenerator:
def __init__(self):
self.lines = []
self.level = 0

def indent(self):
self.level += 1

def undent(self):
if self.level > 0:
self.level -= 1

@property
def indent_string(self):
return self.level * SPACES

def write(self, value: str, *args, **kwargs):
value = self.indent_string + value
if args or kwargs:
value = value.format(*args, **kwargs)

self.lines.append(value)

def write_lines(self, lines):
for line in lines:
self.lines.append(self.indent_string + line)

def __add__(self, value: str):
self.write(value)

def __str__(self):
return os.linesep.join(self.lines)
55 changes: 55 additions & 0 deletions tests/test_utils_codegen.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import pytest
from gql.utils_codegen import CodeGenerator


def test_codegen_write_simple_strings(module_compiler):
gen = CodeGenerator()
gen.write('def sum(a, b):')
gen.indent()
gen.write('return a + b')

code = str(gen)

m = module_compiler(code)
assert m.sum(2, 3) == 5


def test_codegen_write_template_strings_args(module_compiler):
gen = CodeGenerator()
gen.write('def {0}(a, b):', 'sum')
gen.indent()
gen.write('return a + b')

code = str(gen)

m = module_compiler(code)
assert m.sum(2, 3) == 5


def test_codegen_write_template_strings_kwargs(module_compiler):
gen = CodeGenerator()
gen.write('def {method}(a, b):', method='sum')
gen.indent()
gen.write('return a + b')

code = str(gen)

m = module_compiler(code)
assert m.sum(2, 3) == 5


def test_codegen_write_lines(module_compiler):
lines = [
'@staticmethod',
'def sum(a, b):'
' return a + b'
]
gen = CodeGenerator()
gen.write('class Math:')
gen.indent()
gen.write_lines(lines)

code = str(gen)

m = module_compiler(code)
assert m.Math.sum(2, 3) == 5

0 comments on commit bfd5388

Please sign in to comment.