-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support full reconstruction of HCL from output dictionary #177
Open
weaversam8
wants to merge
16
commits into
amplify-education:main
Choose a base branch
from
weaversam8:feature/hcl2-reverse-transformer
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
78c264a
Initial commit of a "reverse transformer" to turn HCL2 dicts into Lar…
weaversam8 d7350f6
Add tests for the reverse reconstructor
weaversam8 0b2282f
Add different handling to the reverse reconstructor depending on data…
weaversam8 ddfbb12
Add support for multiple block labels
weaversam8 23c63c3
Fix accidentally escaping quotes within interpolated strings
weaversam8 373aa78
Properly handle escapes within HCL strings (closes #171)
weaversam8 613afad
Standardize string output from transformer within nested structures t…
weaversam8 093db9a
Fix block labels and booleans during reconstruction
weaversam8 d3f8760
Better handle nested interpolation (fixes #173)
weaversam8 98f7fd8
Begin refactor of whitespace handling (more to come)
weaversam8 6c86b49
Midway thru whitespace handling refactor, need to complete modificati…
weaversam8 a0291c4
Finish overhaul of whitespace handling, remove old logic.
weaversam8 281b706
Fix Pylint warnings
weaversam8 1ad6758
Fix a few formatting issues in reconstruction
weaversam8 8652de4
Add a "builder" class for constructing HCL files from Python
weaversam8 92071ea
Update the docs for reconstruction
weaversam8 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
"""A utility class for constructing HCL documents from Python code.""" | ||
|
||
from typing import List | ||
from typing_extensions import Self | ||
|
||
|
||
class Builder: | ||
def __init__(self, attributes: dict = {}): | ||
self.blocks = {} | ||
self.attributes = attributes | ||
|
||
def block( | ||
self, block_type: str, labels: List[str] = [], **attributes: dict | ||
) -> Self: | ||
"""Create a block within this HCL document.""" | ||
block = Builder(attributes) | ||
|
||
# initialize a holder for blocks of that type | ||
if block_type not in self.blocks: | ||
self.blocks[block_type] = [] | ||
|
||
# store the block in the document | ||
self.blocks[block_type].append((labels.copy(), block)) | ||
|
||
return block | ||
|
||
def build(self): | ||
"""Return the Python dictionary for this HCL document.""" | ||
body = { | ||
"__start_line__": -1, | ||
"__end_line__": -1, | ||
**self.attributes, | ||
} | ||
|
||
for block_type, blocks in self.blocks.items(): | ||
|
||
# initialize a holder for blocks of that type | ||
if block_type not in body: | ||
body[block_type] = [] | ||
|
||
for labels, block_builder in blocks: | ||
# build the sub-block | ||
block = block_builder.build() | ||
|
||
# apply any labels | ||
labels.reverse() | ||
for label in labels: | ||
block = {label: block} | ||
|
||
# store it in the body | ||
body[block_type].append(block) | ||
|
||
return body |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems to fix the problem, but I did not run the tests to check it. It does parse this file correctly tho.