Изменен способ получения значения 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.
|
||||
|
||||
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_sec = '6LcJpHMgAAAAAIUf4Jg_7NvawQKZoLoVypDU6-d8'
|
||||
capcha_site_url='https://www.google.com/recaptcha/api/siteverify'
|
||||
@ -583,7 +583,7 @@ def restfact_detail():
|
||||
if app.debug:
|
||||
logger.debug(json.dumps(ret))
|
||||
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()
|
||||
if len(res) <= 0:
|
||||
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