Skip to content

Instantly share code, notes, and snippets.

View AlonsoMackenlly's full-sized avatar
🗻
A happy life begins with peace of mind.

AlonsoMackenlly AlonsoMackenlly

🗻
A happy life begins with peace of mind.
View GitHub Profile
@AlonsoMackenlly
AlonsoMackenlly / Dockerfile
Created November 29, 2022 06:59
Dockerfile to build image with python and sshd
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 && \
@AlonsoMackenlly
AlonsoMackenlly / settings_logging.py
Last active December 2, 2023 17:47
Loguru with Django
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
@AlonsoMackenlly
AlonsoMackenlly / setup_console.py
Last active October 17, 2022 06:46
Устанавливает кодировку принтов в консоли (JetBrains иногда неверно определяет кодировку, из за этого в консоли каракули у кириллицы)
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
@AlonsoMackenlly
AlonsoMackenlly / _WebStorm Babel file-watcher setup basics.md
Created February 11, 2022 08:17
WebStorm/PHPStorm (and so on...) Babel file-watcher setup basics

Basic Babel file-watcher setup

This requires NPM to be installed.

Adding file-watchers

package.json file

If your project does not already have a 'package.json' file; run:

@AlonsoMackenlly
AlonsoMackenlly / celery.sh
Created June 29, 2021 12:31
Команды для celery
/* 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)
@AlonsoMackenlly
AlonsoMackenlly / auth.php
Created March 1, 2021 06:46
Авторизация Битрикс из под FTP
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$USER->Authorize(1);
global $USER;
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>
@AlonsoMackenlly
AlonsoMackenlly / entity_field.php
Last active March 1, 2021 06:53 — forked from konratnox/index.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) {';
@AlonsoMackenlly
AlonsoMackenlly / imports.py
Created February 9, 2021 06:10
Импорт класса по строковому пути к модулю
import importlib
from typing import Any, Optional
def import_class_by_path(path: str) -> Optional[Any]:
""" Делает динамический импорт класса по пути типа apps.app.lib.classes.MyClass """
# Разбиваем модули на куски
modules = path.split('.')
# Берем конечный модуль из которого импортируем класс