') + ')', 'gi');
if (regex.test(text)) {
found = true;
var frag = document.createDocumentFragment();
var parts = text.split(regex);
parts.forEach(function(part, i) {
if (i % 2 === 0) {
frag.appendChild(document.createTextNode(part));
} else {
var span = document.createElement('span');
span.className = 'userscript-highlight';
span.textContent = part;
frag.appendChild(span);
}
});
node.parentNode.replaceChild(frag, node);
}
});
} else if (node.nodeType === 1 && node.childNodes) { // element
var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];
if (!skipTags.includes(node.tagName)) {
Array.from(node.childNodes).forEach(highlight);
}
}
}
highlight(document.body);
// Re-highlight on dynamic content
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 || node.nodeType === 3) highlight(node);
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Strip utm_, fbclid, gclid, etc. from all links on page
(function() {
var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',
'ref', 'ref_src', 'source', 'medium', 'campaign'];
function cleanUrl(url) {
try {
var u = new URL(url, window.location.origin);
var changed = false;
trackingParams.forEach(function(p) {
if (u.searchParams.has(p)) {
u.searchParams.delete(p);
changed = true;
}
});
return changed ? u.toString() : url;
} catch (e) {
return url;
}
}
function cleanLinks() {
document.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
cleanLinks();
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.tagName === 'A') cleanLinks();
node.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); }
})();
(function(){
try {
var __m = "youtube.com";
var __re = new RegExp('^' + "youtube\\.com" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Auto-enable theater mode on YouTube
(function() {
function tryTheater() {
var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]');
if (btn && !btn.classList.contains('activated')) {
btn.click();
}
}
// Try immediately
tryTheater();
// Try after navigation (SPA)
var lastUrl = location.href;
setInterval(function() {
if (location.href !== lastUrl) {
lastUrl = location.href;
setTimeout(tryTheater, 500);
}
}, 1000);
// Also try on player load
var observer = new MutationObserver(tryTheater);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Remove or un-stick sticky/fixed headers that block content
(function() {
function unstick() {
document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) {
if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {
el.style.position = 'static';
el.style.top = 'auto';
el.style.zIndex = 'auto';
}
});
}
unstick();
var observer = new MutationObserver(unstick);
observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });
})();
}
} catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); }
})();
})();
GitHub - FLYAI4/ArtAPI-FastAPI: 프로젝트 API 백엔드 서버 repo · GitHub
Repository files navigation ArtCore-FastAPI is a FastAPI server that handles the service. It utilizes PostgreSQL and MongoDB for data storage It communicates with the Go core server through gRPC. To run the service, follow the instructions below:
Clone the repository: git clone https://github.com/robert-min/ArtCore-FastAPI.git Navigate to the project directory: Install the dependencies: pip install -r requirements.txt Run the server: Contributions are welcome! If you would like to contribute to ArtCore-Go, please follow these steps:
Fork the repository.
Create a new branch:
git checkout -b my-feature Make your changes and commit them: git commit -m " Add my feature" Push to your forked repository: git push origin my-feature Open a pull request.
---------- coverage: platform linux, python 3.10.12-final-0 ----------
Name Stmts Miss Cover
-------------------------------------------------------------------
app.py 14 14 0%
src/__init__.py 0 0 100%
src/apps/__init__.py 12 0 100%
src/apps/account/__init__.py 0 0 100%
src/apps/account/controller.py 15 0 100%
src/apps/account/model.py 13 0 100%
src/apps/account/repository.py 44 6 86%
src/apps/account/schema.py 10 0 100%
src/apps/account/service.py 22 0 100%
src/apps/user/controller.py 10 0 100%
src/apps/user/model.py 4 0 100%
src/apps/user/repository.py 10 2 80%
src/apps/user/service.py 16 0 100%
src/libs/__init__.py 2 0 100%
src/libs/api/error_code.py 11 0 100%
src/libs/api/error_handler.py 13 2 85%
src/libs/api/exception.py 13 0 100%
src/libs/api/util.py 35 0 100%
src/libs/api/validator.py 23 0 100%
src/libs/cipher.py 17 0 100%
src/libs/db_manager.py 23 2 91%
src/libs/token.py 10 0 100%
tests/apps/account/test_account_controller.py 53 0 100%
tests/apps/account/test_account_repository.py 45 0 100%
tests/apps/account/test_account_service.py 69 0 100%
tests/apps/user/test_user_controller.py 32 0 100%
tests/apps/user/test_user_repository.py 27 0 100%
tests/apps/user/test_user_service.py 24 0 100%
tests/libs/test_encrypt.py 26 0 100%
tests/libs/test_error_code.py 3 0 100%
tests/libs/test_util.py 24 0 100%
-------------------------------------------------------------------
TOTAL 620 26 96%
You can’t perform that action at this time.