1. Лучший говнокод

    В номинации:
    За время:
  2. Python / Говнокод #28524

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    def __get_column_names(table: str) -> tuple:
        try:
            with conn:
                cur.execute("SELECT name FROM PRAGMA_TABLE_INFO(?)", (table,))
                column_names = cur.fetchall()
        except Exception as excpt:
            print(excpt)
        column_names = tuple(i[0] for i in column_names)
        return column_names
    
    
    def db_register_user(user_data: types.User):
        """
        SQL запрос для внесения данных о пользователе
    
        Args:
            user_data: telebot User объект, содержащий словарь с параметрами пользователя
        """
        user_data = user_data.to_dict()
        column_names: tuple = __get_column_names('Users')
        user_values = tuple(user_data.get(key) for key in column_names if key in user_data)
        try:
            with conn:
                query = 'INSERT INTO Users cn'.replace('cn', str(column_names))+' VALUES (?,?,?,?,0,3)'
                parameters = (*user_values,)
                conn.execute(query, parameters)
        except Exception as excpt:
            print(excpt)
        conn.close()

    На сколько в такой ситуации .format не безопасен? Идея в том, чтобы не объебошится программисту в коде введя неверное значение колонки. Для этого имена колонок берутся из самой базы (есть мысль ещё и типы брать). Есть вариант реализации получше? Спасибо

    rockkley94, 26 Декабря 2022

    Комментарии (82)
  3. PHP / Говнокод #28515

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    function gk_nitter_filter($url) {
        $url = preg_replace('/https?:\/\/(?:mobile\.)?twitter\.com\/(\S*)/', 'https://nitter.kavin.rocks/$1', $url);
        $url = preg_replace('/https?:\/\/pbs\.twimg\.com\/(\S+)\?format=(\w+)(\S*)/', 'https://nitter.kavin.rocks/pic/$1.$2', $url);
        $url = preg_replace('/https?:\/\/pbs\.twimg\.com\/(\S*)/', 'https://nitter.kavin.rocks/pic/$1', $url);
        return $url;
    }

    НИТТЕР КАВИН РОКС!

    gostinho, 20 Декабря 2022

    Комментарии (14)
  4. Куча / Говнокод #28478

    +1

    1. 1
    Только в Самаре втб глючит или у всех?

    cepreu_monoJlb, 07 Декабря 2022

    Комментарии (2)
  5. Куча / Говнокод #28464

    +1

    1. 1
    Nadkusanty sosnooley

    KJlOYDqpJlAPE, 29 Ноября 2022

    Комментарии (0)
  6. Куча / Говнокод #28448

    +1

    1. 1
    Объявляется неделя английского языка

    с воскресенья по субботу общаемся только по-английски; уклонившийся - вонючка

    zhigolo, 18 Ноября 2022

    Комментарии (2)
  7. Python / Говнокод #28423

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    #!/usr/bin/env python3
    # -*- coding: UTF8 -*-
    from datetime import date
    from os import environ, mkdir, system
    from os.path import dirname, exists, join as path_join
    from time import time
    
    
    def check_verbose():
        return environ.get("DEBUG") in ("true", "True", "TRUE", True, "yes", "Yes", "YES")
    
    
    class Timer:
        def __init__(self):
            """
            Объект добавляет в начале текста временные метки
            """
            self.start_epoch = self.last_call = time()
    
        @staticmethod
        def __fully_scope(timer: int or str) -> str:
            """
            Преобразует однозначные значения в двузначные.
            :param timer: Время
            :return: Двузначное значение
            """
            if len(str(timer)) == 2:
                return str(timer)
            elif len(str(timer)) == 1:
                return "0" + str(timer)
            elif len(str(timer)) <= 0:
                return "00"
            elif len(str(timer)) >= 2:
                return str(timer)[:2]
    
        def __formatter(self, timestep: float) -> str:
            """
            Форматирует время
                :return: время hh:mm:ss
            """
            _hours = int(timestep // 3600), int(timestep % 3600)
            _minute = int(_hours[1] // 60), int(_hours[1] % 60)
    
            _current_epoch = f"{self.__fully_scope(_minute[0])}:{self.__fully_scope(_minute[1])}"
            if _hours[0] > 0:
                _current_epoch = f"{_hours[0]}:" + _current_epoch
            return _current_epoch
    
        def __call__(self, fix_call: bool = True) -> str:
            """
            Считает время с начала сценария + с последнего шага
                :return: время hh:mm:ss(+hh:mm:ss)
            """
            current_epoch = self.__formatter(time() - self.start_epoch)
            timedelta_epoch = self.__formatter(time() - self.last_call)
            if fix_call:
                self.last_call = time()
    
            return f"{current_epoch}(+{timedelta_epoch})"
    
        def __bool__(self):
            return True
    
    
    class Logger:
        def __init__(self, name: str):
            self.start_time = time()
            self.name = name.upper()
            self.timer = Timer()
            self.log_file = path_join(environ["RESULT_DIR"], name, f"{name}_{date.today().isoformat()}.log")
    
        def check_file(self):
            if not exists(self.log_file):
                if not exists(dirname(self.log_file)):
                    mkdir(dirname(self.log_file))
                system(f"echo {date.today().isoformat()}> {self.log_file}")
    
        def save_log(self, msg: str):
            self.check_file()
            with open(self.log_file, "a+") as _log_file:
                _log_file.write(msg + "\n")
    
        def massage(self, msg: str):
            print(f"{self.timer()}::{self.name}::{msg}")
            self.check_file()
            self.save_log(f"{self.timer()}::{self.name}::{msg}")
    
        def multi_msg(self, level: str, msg: any):
            if isinstance(msg, (str, int, float, bool)):
                self.massage(f"{level.upper()}::{msg}")
            elif isinstance(msg, (tuple, list, set)):
                for _msg in msg:
                    self.multi_msg(level, _msg)
            elif isinstance(msg, dict):
                for _msg_key in msg:

    Ну собственно самописный логгер, потому что "библиатечный логгер переусложнен НИНАДА!"

    dicklover, 19 Октября 2022

    Комментарии (50)
  8. Python / Говнокод #28403

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    class FileCheckError(Exception):
    
        def __init__(self, check, file):
            self.check = check
            self.file = file
            self.exceptions = ['не является файлом',
                               'не является .wav файлом',
                               'не находится в списке требуемых сэмплов',]
    
        def __str__(self):
            return f'{self.file} {self.exceptions[self.check]}'
    
    
    def validate_pack(pack) -> list:
        """
        Checks for invalid files in a pack folder
        Makes a list of invalid files if found any or
        makes a list of accepted samples
        """
        accepted_samples = []
        found_errors = []
    
        for sample in listdir(pack):
            checks = [isfile(join(pack, sample)),
                      fnmatch(sample, '*.wav'),
                      Path(pack / sample).stem in required_samples, ]
            try:
                for check in range(len(checks)):
                    if not checks[check]:
                        raise FileCheckError(check=check, file=sample)
            except FileCheckError as E:
                found_errors.append(str(E))
                continue
    
            accepted_samples.append(sample)
    
        if len(found_errors) != 0:
            return found_errors
        else:
            return accepted_samples
    
    result = validate_pack(Path('drumpacks/rock'))
    print(result, sep='\n')

    rockkley94, 07 Октября 2022

    Комментарии (8)
  9. PHP / Говнокод #28369

    +1

    1. 1
    С днём программиста, питухи!

    И курицы.

    3_dar, 13 Сентября 2022

    Комментарии (17)
  10. Куча / Говнокод #28368

    +1

    1. 1
    Яндекс сгнил :(

    hormand, 12 Сентября 2022

    Комментарии (5)
  11. Go / Говнокод #28342

    +1

    1. 1
    Конструктор по умолчанию?

    Не, не слышали.
    Рефлексией итерируемся по свойствам и вызываем функцию инициализации полей ))))))))))))))

    3_dar, 22 Августа 2022

    Комментарии (62)