Skip to content

Commit df9349d

Browse files
committed
first commit
0 parents  commit df9349d

5 files changed

Lines changed: 162 additions & 0 deletions

File tree

.gitignore

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Python
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
*.so
6+
.Python
7+
build/
8+
develop-eggs/
9+
dist/
10+
downloads/
11+
eggs/
12+
.eggs/
13+
lib/
14+
lib64/
15+
parts/
16+
sdist/
17+
var/
18+
wheels/
19+
*.egg-info/
20+
.installed.cfg
21+
*.egg
22+
23+
# Virtual Environment
24+
venv/
25+
ENV/
26+
env/
27+
.env
28+
.venv
29+
30+
# Coverage Reports
31+
htmlcov/
32+
.tox/
33+
.coverage
34+
.coverage.*
35+
.cache
36+
coverage.xml
37+
*.cover
38+
.pytest_cache/
39+
test-results/
40+
41+
# IDE specific files
42+
.idea/
43+
.vscode/
44+
*.swp
45+
*.swo
46+
.DS_Store

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Simple Python OpenSource Test
2+
3+
A simple Python repository to test the [CodeBeaver](https://www.codebeaver.ai) features in open source, cross repo PRs.

expense_tracker.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class ExpenseTracker:
2+
def __init__(self):
3+
self.expenses = []
4+
self.categories = set(
5+
["food", "transport", "utilities", "entertainment", "other"]
6+
)
7+
8+
9+
# test
10+
def main():
11+
# Example usage
12+
tracker = ExpenseTracker()
13+
14+
print("nothing here yet")
15+
16+
17+
if __name__ == "__main__":
18+
main()

investment_tracker.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
class InvestmentTracker:
2+
# test
3+
def __init__(self):
4+
self.expenses = []
5+
self.categories = set(
6+
["food", "transport", "utilities", "entertainment", "other"]
7+
)
8+
9+
## new and improved defs below
10+
11+
def record_transaction(self, amount, category, description):
12+
"""Add a new expense to the tracker."""
13+
if not isinstance(amount, (int, float)) or amount <= 0:
14+
raise ValueError("Amount must be a positive number")
15+
16+
if category.lower() not in self.categories:
17+
raise ValueError(f"Category must be one of: {', '.join(self.categories)}")
18+
19+
expense = {
20+
"amount": amount,
21+
"category": category.lower(),
22+
"description": description,
23+
}
24+
self.expenses.append(expense)
25+
return True
26+
27+
def calculate_overall_spending(self):
28+
"""Calculate total expenses."""
29+
return sum(expense["amount"] for expense in self.expenses)
30+
31+
def filter_by_category(self, category):
32+
"""Get all expenses for a specific category."""
33+
if category.lower() not in self.categories:
34+
raise ValueError(f"Category must be one of: {', '.join(self.categories)}")
35+
36+
return [
37+
expense
38+
for expense in self.expenses
39+
if expense["category"] == category.lower()
40+
]
41+
42+
def compute_category_sum(self, category):
43+
"""Get total expenses for a specific category."""
44+
if category.lower() not in self.categories:
45+
raise ValueError(f"Category must be one of: {', '.join(self.categories)}")
46+
47+
return sum(
48+
expense["amount"]
49+
for expense in self.expenses
50+
if expense["category"] == category.lower()
51+
)
52+
53+
def register_new_category(self, category):
54+
"""Add a new expense category."""
55+
if not isinstance(category, str) or not category.strip():
56+
raise ValueError("Category must be a non-empty string")
57+
58+
category = category.lower().strip()
59+
if category in self.categories:
60+
return False
61+
62+
self.categories.add(category)
63+
return True
64+
65+
66+
def main():
67+
# Example usage
68+
tracker = InvestmentTracker()
69+
70+
# Add some sample expenses
71+
tracker.record_transaction(25.50, "food", "Lunch at cafe")
72+
tracker.record_transaction(35.00, "transport", "Uber ride")
73+
tracker.record_transaction(150.00, "utilities", "Electricity bill")
74+
75+
# Print total expenses
76+
print(f"Total expenses: ${tracker.calculate_overall_spending():.2f}")
77+
78+
# Print food expenses
79+
food_expenses = tracker.filter_by_category("food")
80+
print("\nFood expenses:")
81+
for expense in food_expenses:
82+
print(f"${expense['amount']:.2f} - {expense['description']}")
83+
84+
85+
if __name__ == "__main__":
86+
main()

test/test_investment_tracker.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import pytest
2+
from datetime import datetime
3+
from investment_tracker import record_transaction
4+
5+
6+
class TestInvestment:
7+
def test_record_transaction(self):
8+
print("test_record_transaction")
9+
assert True

0 commit comments

Comments
 (0)