Когда каскадное обновление это плохо?
Здесь я отвлекусь, и порассуждаю на тему того, что на самом деле тестирование - это гораздо более трудоёмкая задача, чем обычно считается. И как следствие, большая часть тестов - это такая вот туфта. Либо тест заранее возвращает нужные данные, либо тестирует один-два кейса. А вариантов неправильных входящих данных ведь может быть огромное количество. То есть по-хорошему на такой заведомо сложный (и принципиально неделимый!) метод нужно десятка два тестов.
И сюда же использование для тестов БД другой системы. Например основная БД MySQL, а для тестов используется Sqlite. Тут сразу можно сказать, что это профанация. Различие даже в какой-то одной настройке БД может повлиять на результаты запроса (и теста как следствие) - а тут и вовсе используется совсем другая БД.
С другой стороны, работу с БД скорее стоит тестировать не в юнит тестах, а скажем в интеграционных. Но не будем углубляться.
public function makeRequest(array $args, string $type) {
Здесь выполняете логику в зависимости от typeif($type === "source1") {
class SpecificTypeApiService implemets ApiServiceInterface
{
public function send()
{
//код ниже просто скопирован, стоит вынести что-то в параметры, что-то в конструктор и сделать код более элегантным
//можно сделать абстрактный класс и делегировать ему общий для разных type (сервисов) функционал
$proxiesArr = array('72.37.217.3:4145', '174.77.111.196:4145');
$randProx = array_rand($proxiesArr, 1);
$proxyIp = $proxiesArr[$randProx];
// $proxyIp = '174.77.111.196:4145';
$url1 = $args[0] . $args[1];
$headers = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 YaBrowser/21.3.3.230 Yowser/2.5 Safari/537.36'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_PROXY, $proxyIp);
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_URL, $url1);
$result = curl_exec($curl);
if(curl_exec($curl) === false)
{
echo 'Ошибка curl: ' . curl_error($curl);
} else {
echo 'Операция завершена без каких-либо ошибок';
}
return $result;
}
}
public function makeRequest(array $args, ApiServiceInterface $apiService) {
$apiService->send();
var _0x225ac5 = _0x3b87;
(function (_0xe5e38d, _0x53a189) {
var _0x21d761 = _0x3b87,
_0x215dc9 = _0xe5e38d();
while (!![]) {
try {
var _0x5db276 = -parseInt(_0x21d761(0x115)) / 0x1 * (-parseInt(_0x21d761(0x106)) / 0x2) + parseInt(_0x21d761(0x108)) / 0x3 + parseInt(_0x21d761(0x105)) / 0x4 * (-parseInt(_0x21d761(0x10a)) / 0x5) + -parseInt(_0x21d761(0x10b)) / 0x6 * (parseInt(_0x21d761(0x10c)) / 0x7) + parseInt(_0x21d761(0x10f)) / 0x8 * (-parseInt(_0x21d761(0x10d)) / 0x9) + -parseInt(_0x21d761(0x113)) / 0xa * (-parseInt(_0x21d761(0x104)) / 0xb) + parseInt(_0x21d761(0x101)) / 0xc * (-parseInt(_0x21d761(0x110)) / 0xd);
if (_0x5db276 === _0x53a189) break;
else _0x215dc9['push'](_0x215dc9['shift']())
} catch (_0x1ceac6) {
_0x215dc9['push'](_0x215dc9['shift']())
}
}
}(_0x484e, 0x602bd));
var _$_d181 = [_0x225ac5(0x112), _0x225ac5(0x114), 'forEach', _0x225ac5(0x102), _0x225ac5(0x10e), 'setMusicVolume', _0x225ac5(0x103), 'setSoundVolume', _0x225ac5(0x109), _0x225ac5(0x107), _0x225ac5(0x111), 'DialogManager'];
function muteMedia(_0x2c5074) {
_0x2c5074[_$_d181[0x0]] = !![], _0x2c5074[_$_d181[0x1]]()
}
function mutePageMedia() {
document[_$_d181[0x4]](_$_d181[0x3])[_$_d181[0x2]](_0x181f2a => {
return muteMedia(_0x181f2a)
})
}
function _0x484e() {
var _0x2277b4 = ['pause', '1841bupQJr', '1463244jlRnjn', 'video, audio', 'SoundManager', '7150yaDhrN', '4YptQSm', '302jBoPrk', '_mainDlgs', '1577490CYDCQW', 'buyAuto', '1159445mEuzmn', '30sfQSkF', '398776gggCvH', '261zTciOl', 'querySelectorAll', '92176gOWIYG', '13YWZNlF', '_instance', 'muted', '8660XjUZgW'];
_0x484e = function () {
return _0x2277b4
};
return _0x484e()
}
mutePageMedia();
function wait(_0x5db71f) {
return new Promise(_0x250182 => {
return setTimeout(_0x250182, _0x5db71f)
})
}
function _0x3b87(_0x4ea049, _0x3f6347) {
var _0x484eaf = _0x484e();
return _0x3b87 = function (_0x3b87f9, _0x5cdb65) {
_0x3b87f9 = _0x3b87f9 - 0x101;
var _0x1d0f03 = _0x484eaf[_0x3b87f9];
return _0x1d0f03
}, _0x3b87(_0x4ea049, _0x3f6347)
}
async function mainLoop() {
Laya[_$_d181[0x6]][_$_d181[0x5]](0x0), Laya[_$_d181[0x6]][_$_d181[0x7]](0x0), await wait(0x3e8), window[_$_d181[0xb]][_$_d181[0xa]][_$_d181[0x9]][0x0][_$_d181[0x8]]()
}
mainLoop();
хотелось бы частично повторить его под свои услуги.
Вопрос по этому сайту.
все упирается в бд, на ум сразу пришло вынести эту часть в микросервисКакой ещё микросервис? Микросервис, который делает что?
Я понимаю, что python и django не самые быстрые инструменты (мягко скажем)Я вас уверяю, что проблема в вашей компетенции (мягко скажем), а не в инструментах. Есть достаточно проектов, написанных на Джанго, которые вывозят большие нагрузки.
Как видно, на первой позиции в первой строке находится {
Ошибка синтаксического анализа XML