lambda-erp 0.1.32__tar.gz → 0.1.34__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/PKG-INFO +1 -1
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/oauth.py +4 -4
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/database.py +2 -2
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/pyproject.toml +1 -1
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/.gitignore +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/LICENSE +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/README.md +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/attachments.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/auth.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/bootstrap.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/chat.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/demo_limits.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/deps.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/errors.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/main.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/pdf.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/providers.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/remarks_md.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/accounting.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/admin.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/analytics.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/bank_reconciliation.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/documents.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/masters.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/proposals.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/reports.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/routers/setup.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/services.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/templates/document.html +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/api/templates/proposal.html +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/docs/agents/README.md +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/frontend/README.md +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/frontend/src/api/client.ts +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/bank_transaction.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/budget.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/chart_of_accounts.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/general_ledger.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/journal_entry.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/payment_entry.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/pos_invoice.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/purchase_invoice.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/revaluation.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/sales_invoice.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/accounting/subscription.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/buying/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/buying/purchase_order.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/controllers/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/controllers/currency.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/controllers/defaults.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/controllers/pricing_rule.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/controllers/taxes_and_totals.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/exceptions.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/hooks.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/model.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/selling/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/selling/proposal.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/selling/quotation.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/selling/sales_order.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/simulation.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/stock/__init__.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/stock/delivery_note.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/stock/purchase_receipt.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/stock/stock_entry.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/stock/stock_ledger.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/lambda_erp/utils.py +0 -0
- {lambda_erp-0.1.32 → lambda_erp-0.1.34}/terraform/README.md +0 -0
|
@@ -233,12 +233,12 @@ def _email_is_verified(claims: dict) -> bool:
|
|
|
233
233
|
|
|
234
234
|
def _find_by_identity(db, provider: str, subject: str) -> dict | None:
|
|
235
235
|
rows = db.sql(
|
|
236
|
-
'SELECT
|
|
236
|
+
'SELECT user_name FROM "User OAuth Identity" WHERE provider = ? AND subject = ?',
|
|
237
237
|
[provider, subject],
|
|
238
238
|
)
|
|
239
239
|
if not rows:
|
|
240
240
|
return None
|
|
241
|
-
user_name = rows[0]["
|
|
241
|
+
user_name = rows[0]["user_name"]
|
|
242
242
|
users = db.sql(
|
|
243
243
|
'SELECT name, email, full_name, role, enabled FROM "User" WHERE name = ?',
|
|
244
244
|
[user_name],
|
|
@@ -249,7 +249,7 @@ def _find_by_identity(db, provider: str, subject: str) -> dict | None:
|
|
|
249
249
|
def _link_identity(db, user_name: str, provider: str, subject: str, email: str | None):
|
|
250
250
|
db.insert("User OAuth Identity", {
|
|
251
251
|
"name": f"OAI-{uuid.uuid4().hex[:8]}",
|
|
252
|
-
"
|
|
252
|
+
"user_name": user_name,
|
|
253
253
|
"provider": provider,
|
|
254
254
|
"subject": subject,
|
|
255
255
|
"email": (email or "").lower() or None,
|
|
@@ -325,7 +325,7 @@ def list_identities(user: dict = Depends(get_current_user)):
|
|
|
325
325
|
"""The signed-in user's linked providers (for a 'Linked accounts' UI)."""
|
|
326
326
|
db = get_db()
|
|
327
327
|
rows = db.sql(
|
|
328
|
-
'SELECT provider, email, creation FROM "User OAuth Identity" WHERE
|
|
328
|
+
'SELECT provider, email, creation FROM "User OAuth Identity" WHERE user_name = ? ORDER BY creation',
|
|
329
329
|
[user["name"]],
|
|
330
330
|
)
|
|
331
331
|
return [dict(r) for r in rows]
|
|
@@ -1294,13 +1294,13 @@ class Database:
|
|
|
1294
1294
|
# OAuth-only user just carries a sentinel, non-matchable hash).
|
|
1295
1295
|
"""CREATE TABLE IF NOT EXISTS "User OAuth Identity" (
|
|
1296
1296
|
name TEXT PRIMARY KEY,
|
|
1297
|
-
|
|
1297
|
+
user_name TEXT NOT NULL,
|
|
1298
1298
|
provider TEXT NOT NULL,
|
|
1299
1299
|
subject TEXT NOT NULL,
|
|
1300
1300
|
email TEXT,
|
|
1301
1301
|
creation TEXT,
|
|
1302
1302
|
UNIQUE(provider, subject),
|
|
1303
|
-
FOREIGN KEY (
|
|
1303
|
+
FOREIGN KEY (user_name) REFERENCES "User"(name)
|
|
1304
1304
|
)""",
|
|
1305
1305
|
|
|
1306
1306
|
"""CREATE TABLE IF NOT EXISTS "Settings" (
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|