Изменен способ получения значения capcha_score из переменной окружения. Исправлен порядок сортировки результатов запроса в базе данных на убывание. Исправлены отступы и форматирование кода для соответствия стандартам. Удален ненужный файл правил для Python/Flask.
This commit is contained in:
parent
545b60ff47
commit
e169ad65a0
@ -1,8 +1,3 @@
|
|||||||
---
|
|
||||||
description:
|
|
||||||
globs:
|
|
||||||
alwaysApply: true
|
|
||||||
---
|
|
||||||
|
|
||||||
You are an expert in Python, Flask, and scalable API development.
|
You are an expert in Python, Flask, and scalable API development.
|
||||||
|
|
||||||
4
app.py
4
app.py
@ -28,7 +28,7 @@ import logging
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
capcha_score: float = 0.1
|
capcha_score: float = os.environ.get('CAPCHA_SCORE',0.5)
|
||||||
capcha_site = '6LcJpHMgAAAAAMQLNY_g8J2Kv_qmCGureRN_lbGl'
|
capcha_site = '6LcJpHMgAAAAAMQLNY_g8J2Kv_qmCGureRN_lbGl'
|
||||||
capcha_site_sec = '6LcJpHMgAAAAAIUf4Jg_7NvawQKZoLoVypDU6-d8'
|
capcha_site_sec = '6LcJpHMgAAAAAIUf4Jg_7NvawQKZoLoVypDU6-d8'
|
||||||
capcha_site_url='https://www.google.com/recaptcha/api/siteverify'
|
capcha_site_url='https://www.google.com/recaptcha/api/siteverify'
|
||||||
@ -583,7 +583,7 @@ def restfact_detail():
|
|||||||
if app.debug:
|
if app.debug:
|
||||||
logger.debug(json.dumps(ret))
|
logger.debug(json.dumps(ret))
|
||||||
return response
|
return response
|
||||||
cur.execute("select vin, ip, status, dt, cost from billing where access_code = :p1 and dt > CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) - 45 and made = 1 order by id", {'p1': str(access_code)})
|
cur.execute("select vin, ip, status, dt, cost from billing where access_code = :p1 and dt > CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) - 45 and made = 1 order by id desc", {'p1': str(access_code)})
|
||||||
res = cur.fetchall()
|
res = cur.fetchall()
|
||||||
if len(res) <= 0:
|
if len(res) <= 0:
|
||||||
ret = {'status': 'billing not found'}
|
ret = {'status': 'billing not found'}
|
||||||
|
|||||||
93
rules.md
Normal file
93
rules.md
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
|
||||||
|
You are an expert in Python, Flask, and scalable API development.
|
||||||
|
|
||||||
|
Key Principles
|
||||||
|
- Write concise, technical responses with accurate Python examples.
|
||||||
|
- Use functional, declarative programming; avoid classes where possible except for Flask views.
|
||||||
|
- Prefer iteration and modularization over code duplication.
|
||||||
|
- Use descriptive variable names with auxiliary verbs (e.g., is_active, has_permission).
|
||||||
|
- Use lowercase with underscores for directories and files (e.g., blueprints/user_routes.py).
|
||||||
|
- Favor named exports for routes and utility functions.
|
||||||
|
- Use the Receive an Object, Return an Object (RORO) pattern where applicable.
|
||||||
|
|
||||||
|
Python/Flask
|
||||||
|
- Use def for function definitions.
|
||||||
|
- Use type hints for all function signatures where possible.
|
||||||
|
- File structure: Flask app initialization, blueprints, models, utilities, config.
|
||||||
|
- Avoid unnecessary curly braces in conditional statements.
|
||||||
|
- For single-line statements in conditionals, omit curly braces.
|
||||||
|
- Use concise, one-line syntax for simple conditional statements (e.g., if condition: do_something()).
|
||||||
|
|
||||||
|
Error Handling and Validation
|
||||||
|
- Prioritize error handling and edge cases:
|
||||||
|
- Handle errors and edge cases at the beginning of functions.
|
||||||
|
- Use early returns for error conditions to avoid deeply nested if statements.
|
||||||
|
- Place the happy path last in the function for improved readability.
|
||||||
|
- Avoid unnecessary else statements; use the if-return pattern instead.
|
||||||
|
- Use guard clauses to handle preconditions and invalid states early.
|
||||||
|
- Implement proper error logging and user-friendly error messages.
|
||||||
|
- Use custom error types or error factories for consistent error handling.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
- Flask
|
||||||
|
- Flask-RESTful (for RESTful API development)
|
||||||
|
- Flask-SQLAlchemy (for ORM)
|
||||||
|
- Flask-Migrate (for database migrations)
|
||||||
|
- Marshmallow (for serialization/deserialization)
|
||||||
|
- Flask-JWT-Extended (for JWT authentication)
|
||||||
|
|
||||||
|
Flask-Specific Guidelines
|
||||||
|
- Use Flask application factories for better modularity and testing.
|
||||||
|
- Organize routes using Flask Blueprints for better code organization.
|
||||||
|
- Use Flask-RESTful for building RESTful APIs with class-based views.
|
||||||
|
- Implement custom error handlers for different types of exceptions.
|
||||||
|
- Use Flask's before_request, after_request, and teardown_request decorators for request lifecycle management.
|
||||||
|
- Utilize Flask extensions for common functionalities (e.g., Flask-SQLAlchemy, Flask-Migrate).
|
||||||
|
- Use Flask's config object for managing different configurations (development, testing, production).
|
||||||
|
- Implement proper logging using Flask's app.logger.
|
||||||
|
- Use Flask-JWT-Extended for handling authentication and authorization.
|
||||||
|
|
||||||
|
Performance Optimization
|
||||||
|
- Use Flask-Caching for caching frequently accessed data.
|
||||||
|
- Implement database query optimization techniques (e.g., eager loading, indexing).
|
||||||
|
- Use connection pooling for database connections.
|
||||||
|
- Implement proper database session management.
|
||||||
|
- Use background tasks for time-consuming operations (e.g., Celery with Flask).
|
||||||
|
|
||||||
|
Key Conventions
|
||||||
|
1. Use Flask's application context and request context appropriately.
|
||||||
|
2. Prioritize API performance metrics (response time, latency, throughput).
|
||||||
|
3. Structure the application:
|
||||||
|
- Use blueprints for modularizing the application.
|
||||||
|
- Implement a clear separation of concerns (routes, business logic, data access).
|
||||||
|
- Use environment variables for configuration management.
|
||||||
|
|
||||||
|
Database Interaction
|
||||||
|
- Use Flask-SQLAlchemy for ORM operations.
|
||||||
|
- Implement database migrations using Flask-Migrate.
|
||||||
|
- Use SQLAlchemy's session management properly, ensuring sessions are closed after use.
|
||||||
|
|
||||||
|
Serialization and Validation
|
||||||
|
- Use Marshmallow for object serialization/deserialization and input validation.
|
||||||
|
- Create schema classes for each model to handle serialization consistently.
|
||||||
|
|
||||||
|
Authentication and Authorization
|
||||||
|
- Implement JWT-based authentication using Flask-JWT-Extended.
|
||||||
|
- Use decorators for protecting routes that require authentication.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
- Write unit tests using pytest.
|
||||||
|
- Use Flask's test client for integration testing.
|
||||||
|
- Implement test fixtures for database and application setup.
|
||||||
|
|
||||||
|
API Documentation
|
||||||
|
- Use Flask-RESTX or Flasgger for Swagger/OpenAPI documentation.
|
||||||
|
- Ensure all endpoints are properly documented with request/response schemas.
|
||||||
|
|
||||||
|
Deployment
|
||||||
|
- Use Gunicorn or uWSGI as WSGI HTTP Server.
|
||||||
|
- Implement proper logging and monitoring in production.
|
||||||
|
- Use environment variables for sensitive information and configuration.
|
||||||
|
|
||||||
|
Refer to Flask documentation for detailed information on Views, Blueprints, and Extensions for best practices.
|
||||||
|
|
||||||
40
telegram_bot.py
Normal file
40
telegram_bot.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import os
|
||||||
|
import requests
|
||||||
|
from flask import Flask
|
||||||
|
from telegram import Update, Bot
|
||||||
|
from telegram.ext import CommandHandler, CallbackContext, ApplicationBuilder
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' # Замените на ваш токен
|
||||||
|
|
||||||
|
async def start(update: Update, context: CallbackContext) -> None:
|
||||||
|
await update.message.reply_text('Привет! Используйте /decode <vin> для декодирования VIN или /check <vin> для проверки VIN.')
|
||||||
|
|
||||||
|
def decode_vin(update: Update, context: CallbackContext) -> None:
|
||||||
|
vin = context.args[0] if context.args else None
|
||||||
|
if vin:
|
||||||
|
response = requests.get(f'http://localhost:5000/search?vin={vin}')
|
||||||
|
update.message.reply_text(response.text)
|
||||||
|
else:
|
||||||
|
update.message.reply_text('Пожалуйста, укажите VIN.')
|
||||||
|
|
||||||
|
def check_vin(update: Update, context: CallbackContext) -> None:
|
||||||
|
vin = context.args[0] if context.args else None
|
||||||
|
if vin:
|
||||||
|
response = requests.get(f'http://localhost:5000/detail/{vin}.html')
|
||||||
|
update.message.reply_text(response.text)
|
||||||
|
else:
|
||||||
|
update.message.reply_text('Пожалуйста, укажите VIN.')
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
application = ApplicationBuilder().token(TOKEN).build()
|
||||||
|
dispatcher = application.dispatcher
|
||||||
|
|
||||||
|
dispatcher.add_handler(CommandHandler("start", start))
|
||||||
|
dispatcher.add_handler(CommandHandler("decode", decode_vin))
|
||||||
|
dispatcher.add_handler(CommandHandler("check", check_vin))
|
||||||
|
|
||||||
|
application.run_polling()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Loading…
x
Reference in New Issue
Block a user