Skip to content

Instantly share code, notes, and snippets.

View uralov's full-sized avatar

Alexander Uralov uralov

  • Rostov-on-Don, Russia
View GitHub Profile
@uralov
uralov / powershell_elevated.py
Created October 13, 2020 14:36
Windows PowerShell elevation with exit code status
import subprocess
ps_path = 'powershell.exe'
arguments = 'dir'
def wrap_ps_notation_elevated(program: str, command: str) -> str:
return f"$p=saps {program} -ArgumentList '{command}' " \
f"-Verb runas " \
f"-Passthru -Wait; " \
@uralov
uralov / rules.py
Last active March 2, 2024 17:58
PythonNest group rules
RULES = (
'В группе имеет смысл обсуждать любые связанные с Python и его экосистемой темы. Связанные хотя бы косвенно.',
'Прежде чем задать вопрос в группу, потратьте 10 минут в поисковике, пытаясь понять проблему - это поможет сформулировать вопрос.',
'Предложения работы разрешены только постоянным членам группы. Формат поста - согласуйте с администратором, у нас не HR паблик.',
'И не место для политических дискуссий, троллинга и пассивной агрессии - старайтесь вести конструктивную беседу.',
'Иногда лучше воздержаться от провокационного коммента, мы все люди и можем ошибаться:)',
'Вещание потока сознания в эфир будет расцениваться как флуд, старайтесь формулировать свои мысли четко.',
'Профессиональным хейтерам тут не рады.',
)
cache:
paths:
- .cache/pip
- venv/
stages:
- test
before_script:
- python -V # Print out python version for debugging
@uralov
uralov / SmsBot: factories.py
Created February 18, 2019 10:42
Tests use FactoryBoy library
import factory
from faker import Faker
from phonenumber_field.modelfields import PhoneNumberField
from routing.tests.factories import IterCountryFactory, FAKER_LOCALE
from sender.models import List, Contact, Sender, Message, MESSAGE_MAX_LENGTH, \
SendBatch
from users.tests.factories import AdminUserFactory
FROM python:3.6
ENV PYTHONUNBUFFERED=1 \
HOME_DIR=/home/... \
USER_NAME=... \
USER_GROUP=...
RUN useradd -u 1000 -d ${HOME_DIR} -G ${USER_GROUP} ${USER_NAME}
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
apt-get update && apt-get install -y --no-install-recommends nodejs
@uralov
uralov / chronica: __init__.py
Last active February 18, 2019 10:29
DDT library has been used to reduce code duplication
import os
import json
from collections import namedtuple
from unittest.mock import MagicMock
from unittest import TestCase
class BaseApiHandlerTestCase(BaseTestCase):
def _test_api_handler(self, handler: callable, event: dict, expected_status: int, empty_response: bool = False,
compare_with: BaseEntity = None):
@uralov
uralov / chronica: swagger.yml
Created February 15, 2019 01:53
Swagger specification for Chronica API
swagger: "2.0"
info:
description: "Influenced by: https://blog.philipphauer.de/restful-api-design-best-practices/ and http://jsonapi.org/"
version: "0.3.0"
title: "Chronica API"
host: "0.0.0.0:8000"
basePath: "/v1"
tags:
- name: "JSON Schemas"
description: "API for user-defined data types"
@uralov
uralov / chronica: decorators.py
Last active February 15, 2019 02:10
Chronica: Custom user auth by AWS Cognito JWT token
def user_auth(func):
""" User authentication and authorization """
@wraps(func)
def wrapper(*args, **kwargs):
user_id = ANONYMOUS_USER_ID
user_groups = [ANONYMOUS_GROUP]
jwt_token = kwargs.get('event', {}).get('headers', {}).get(JWT_TOKEN_HEADER)
if jwt_token:
try:

tmux cheatsheet

As configured in my dotfiles.

start new:

tmux

start new with session name:

@uralov
uralov / password_validation.py
Created June 25, 2018 12:42
Django user password validation
import re
from functools import partial
from django.contrib.auth.hashers import check_password
from django.core.exceptions import ValidationError
from django.template.defaultfilters import pluralize
from django.utils.translation import ugettext_lazy as _
from users.models import PasswordHistory