A preprocessor to turn python code with braces into python
Project description
CurlyPy: Python with Brackets
CurlyPy is a preprocessor that translates Python code written using curly braces ({}) into standard Python, making indentation obsolete. It provides the flexibility to use semicolons (;) as optional statement separators, making Python syntax more familiar to developers accustomed to languages like C, Java, or JavaScript.
With CurlyPy, you can write Python code using braces to define code blocks, eliminating the need for indentation while still retaining Python's powerful features.
Key Features
- Curly Braces for Code Blocks: Use
{}to denote the start and end of code blocks, removing the need for indentation. - Semi-Mandatory Semicolons: Semicolons (
;) are supported as optional separators between statements, but they are still not strictly required after every statement. They will, however, be required if you are writing multiple instructions in the same line. - Flexible Syntax: Write Python code with a more structured format, closer to languages like C, Java, or JavaScript, while keeping all the strengths of Python.
- Compatible with Python: CurlyPy preprocesses your code into standard Python, so it can be executed by any Python interpreter.
- Dictionary and Set Types: The standard Python dictionary and set types are available in CurlyPy, using type hints.
Valid CurlyPy syntax:
# Dictionaries and sets are defined using type hints
dictionary_test: dict[str, str] = {
"foo":"bar",
"baz":{
"qux":"quux"
}
}
set_test: set[str] = {"foo", "bar", "baz"}
print(dictionary_test["foo"], set_test)
CurlyPy makes even this syntax possible!
def check_even_odd(num) { print(f"{num} is {'even' if num % 2 == 0 else 'odd'};"); }; check_even_odd(10); check_even_odd(7);
Installation
Install from PyPI:
pip install CurlyPy
Usage
Once you have CurlyPy installed, you can preprocess your Python files written with curly braces and optional semicolons into standard Python.
Module usage:
# some_file.py
from curlypy import CurlyPyTranslator
translator = CurlyPyTranslator(filename="curlypython.cpy")
translated_code: str = translator.translate()
with open("translated.py", "+w") as out:
out.write(translated_code)
CurlyPy will convert your code with brackets into traditional Python with correct indentation and block structures.
Example
Here’s how Python code with curly braces and semicolons looks with CurlyPy:
def HelloWorld(name: str) {
if name {
print (f"Hello {name}!")
}
else {
print ("Hello World!")
}
}
After running CurlyPy, it will be converted into regular Python:
def HelloWorld(name: str) :
if name :
print (f"Hello {name}!")
else :
print ("Hello World!")
Why CurlyPy?
Python’s indentation-based syntax is great for readability but may feel unfamiliar to developers used to brace-based languages like C, Java, or JavaScript. CurlyPy gives you the freedom to write Python code with curly braces, making it easier for those developers to transition to Python without abandoning the structured code block formatting they’re used to.
CurlyPy doesn't take away Python’s flexibility—if you love type hints and it's strong typing, you can keep using them as is. CurlyPy opens up new possibilities for those who prefer braces.
CurlyPy:
# For loop
for n in range(10){
if n % 3 == 0 and n % 5 == 0 {
print("FizzBuzz")
}
elif n % 3 == 0 {
print("Fizz")
}
elif n % 5 == 0 {
print("Buzz")
}
else{
print(n)
}
}
Translated Python:
# For loop
for n in range(10):
if n % 3 == 0 and n % 5 == 0 :
print("FizzBuzz")
elif n % 3 == 0 :
print("Fizz")
elif n % 5 == 0 :
print("Buzz")
else:
print(n)
Upcoming improvements
- Better documentation
- Documentation on using CurlyPy as a python module
- Script to directly run the translated python code
- Possibly a new name
- Better command line argument parsing
- Error checking
Current Limitations
- Empty blocks are not supported, leading to a syntax error in python.
x = 5;
if x == 5 {
; # Will cause python code to be problematic
}
# Use this instead
if x == 5 {
pass;
}
- Error checking is not implemented
def incomplete_func() {
print("This will fail");
# Missing closing bracket, but translated code will work. (Rare case)
- Complex typehints for dictionary and set types are not supported and will lead to a syntax error in the generated python code.
complex_type: dict[str, set[int]] = {"evens": {0, 2, 4}, "odds": {1, 3, 5}}; # Complex type hint with sets and dicts
Contributing
Contributions are welcome! If you want to contribute to CurlyPy or report an issue, please feel free to open an issue or submit a pull request.
Steps to Contribute:
- Fork the repository
- Create a new branch for your feature or bug fix
- Submit a pull request with a clear description of the change
Why not bython?
I wanted to make my own version of a preprocessor for Python with braces, that's all.
License
This project is licensed under the GNU General Public License. See the LICENSE file for details.
Enjoy writing Python with the structure and familiarity of braces with CurlyPy!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file curlypy-0.0.2.tar.gz.
File metadata
- Download URL: curlypy-0.0.2.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b80b60cd0d322c9211a2ca20186cd7f77c87612eac50e1bc594578f8cf877ccb
|
|
| MD5 |
e069e4d3a72905ad412224b531d5da19
|
|
| BLAKE2b-256 |
fc5bf2edfd13f3f3b5e7f9359821d34b47cdebb7cdbcda855b4abd3bb4965bb7
|
File details
Details for the file CurlyPy-0.0.2-py3-none-any.whl.
File metadata
- Download URL: CurlyPy-0.0.2-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b9187bbe462c971bb82984f16c4938f6685205f4b159090aa273ae3a0ba6444
|
|
| MD5 |
c8475e17cd2a4210557ceabb0fe65405
|
|
| BLAKE2b-256 |
5dbd1334f8ac65785aad24372375df151bcef367a1ded291179f4652dbca64d2
|