This requires NPM to be installed.
If your project does not already have a 'package.json
' file; run:
FROM python:3-alpine | |
RUN apk update && \ | |
apk add curl bash git openssh rsync augeas shadow rssh sudo && \ | |
#### SSHD | |
deluser $(getent passwd 33 | cut -d: -f1) && \ | |
delgroup $(getent group 33 | cut -d: -f1) 2>/dev/null || true && \ | |
mkdir -p ~root/.ssh /etc/authorized_keys && chmod 700 ~root/.ssh/ && \ | |
augtool 'set /files/etc/ssh/sshd_config/AuthorizedKeysFile ".ssh/authorized_keys /etc/authorized_keys/%u"' && \ | |
echo -e "Port 22\n" >> /etc/ssh/sshd_config && \ |
class InterceptHandler(logging.Handler): | |
def emit(self, record): | |
# Get corresponding Loguru level if it exists | |
try: | |
level = logger.level(record.levelname).name | |
except ValueError: | |
level = record.levelno | |
# Find caller from where originated the logged message |
def setup_console(sys_enc="utf-8"): | |
reload(sys) | |
try: | |
# для win32 вызываем системную библиотечную функцию | |
if sys.platform.startswith("win"): | |
import ctypes | |
enc = "cp%d" % ctypes.windll.kernel32.GetOEMCP() #TODO: проверить на win64/python64 | |
else: | |
# для Linux всё, кажется, есть и так | |
enc = (sys.stdout.encoding if sys.stdout.isatty() else |
/* Useful celery config. | |
app = Celery('tasks', | |
broker='redis://localhost:6379', | |
backend='redis://localhost:6379') | |
app.conf.update( | |
CELERY_TASK_RESULT_EXPIRES=3600, | |
CELERY_QUEUES=( | |
Queue('default', routing_key='tasks.#'), |
from django.db import models | |
from django.contrib.contenttypes.fields import GenericForeignKey | |
from django.contrib.contenttypes.models import ContentType | |
from django.contrib.contenttypes.fields import GenericRelation | |
# создадим класс, хранящий множество записей, которые могут привязываться к разным моделями | |
class Accumulator(models.Model): | |
# Ссылка на встроенную модель, где фигурируют все модели всех зарегистрированных приложений | |
content_type = models.ForeignKey(ContentType, on_delete = models.PROTECT, editable = False, db_index = True) |
<? | |
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); | |
$USER->Authorize(1); | |
global $USER; | |
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); | |
?> |
<?php | |
CJSCore::Init(['ui']); | |
$items = [ | |
['NAME' => 'Первый вариант', 'VALUE' => '1'], | |
['NAME' => 'Второй вариант', 'VALUE' => '2'], | |
]; | |
?> | |
<div style="padding: 100px" id="filter"> | |
<div data-name="SELECT_SINGLE" class="main-ui-filter-wield-with-label main-ui-filter-date-group main-ui-control-field-group"> |
function dump_debug($input, $collapse=false) { | |
$recursive = function($data, $level=0) use (&$recursive, $collapse) { | |
global $argv; | |
$isTerminal = isset($argv); | |
if (!$isTerminal && $level == 0 && !defined("DUMP_DEBUG_SCRIPT")) { | |
define("DUMP_DEBUG_SCRIPT", true); | |
echo '<script language="Javascript">function toggleDisplay(id) {'; |
import importlib | |
from typing import Any, Optional | |
def import_class_by_path(path: str) -> Optional[Any]: | |
""" Делает динамический импорт класса по пути типа apps.app.lib.classes.MyClass """ | |
# Разбиваем модули на куски | |
modules = path.split('.') | |
# Берем конечный модуль из которого импортируем класс |