Merge remote changes + autocompra project card

This commit is contained in:
Tatiana Villa Ema 2026-04-27 02:05:57 +02:00
commit c3966852d7
4237 changed files with 474720 additions and 9616 deletions

2
.dockerignore Normal file
View File

@ -0,0 +1,2 @@
.git
Dockerfile

View File

@ -1,151 +1,380 @@
/* Variables de tus colores */
/* ============================================================
TAI AGE | Estilos principales
Paleta VS Code Dark + acentos azul AGE
============================================================ */
:root {
/* --primary-blue: #0054a4;
--medium-blue: #286291;
--dark-blue: #1a3668;
--light-blue: #a4d7f4;
--accent-orange: #ff9900;
--light-gold: #ffc24a;
--bg-dark: #0f172a;
*/
/* Paleta de el tiempo */
--color-primario: #F5F5F5;
--color-hover: #1E3A5F;
--color-secundario: #A1A1A1;
--color-fondo: #0D0D0D;
--color-texto: #E5E5E5;
--blanco-puro: #FFFFFF;
--sombra: rgba(47, 58, 86, 0.15);
--color-tarjeta: #1A1A1A;
--color-acento: #a4d7f4;
--gray: #acb3bf;
--color-borde: rgba(95, 174, 219, 0.3);
--color-cabecera: rgba(0,0,0,0.80);
--bg-vs: #1e1e1e; /* Fondo principal */
--bg-nav: #252526; /* Fondo de barra de navegación */
--bg-card: #2d2d2d; /* Fondo de tarjetas/secciones */
--keyword: #aaffff; /* Azul grisaceo */
--string: #ce9178; /* Naranja/Salmón (textos) */
--comment: #6a9955; /* Verde (comentarios) */
--var-name: #9cdcfe; /* Azul claro (variables) */
--text: #d4d4d4; /* Gris claro (texto normal) */
--border-editor: #3e3e42; /* Color de bordes y líneas */
--bg: #1e1e1e;
--bg-alt: #252526;
--bg-hover: #2a2d2e;
--border: #3c3c3c;
--text: #d4d4d4;
--text-muted: #858585;
--accent: #007acc;
--accent-2: #4ec9b0;
--success: #6a9955;
--error: #f44747;
--warning: #d7ba7d;
--sidebar-w: 290px;
--topbar-h: 52px;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 16px; scroll-behavior: smooth; }
body {
font-family: Consolas, 'Roboto', 'Inter', sans-serif;
background-color: var(--color-fondo);
color: var(--color-texto);
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.7;
}
/* Navbar */
.navbar {
background-color: var(--color-cabecera); /* var(--color-cabecera) con opacidad */
border-bottom: 2px solid var(--color-borde);
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
/* ── Scrollbar ───────────────────────────────────────────── */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
/* ============================================================
TOPBAR
============================================================ */
.topbar {
position: fixed;
top: 0; left: 0; right: 0;
height: var(--topbar-h);
background: var(--bg-alt);
border-bottom: 1px solid var(--border);
display: flex;
align-items: center;
padding: 0 1.2rem;
gap: 1rem;
z-index: 100;
}
.navbar-brand {
font-weight: bold;
color: var(--color-acento) !important;
.topbar-brand {
font-size: 1.05rem;
font-weight: 700;
color: var(--accent-2);
letter-spacing: .02em;
white-space: nowrap;
}
.nav-link {
color: var(--color-texto) !important;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 1px;
.topbar-nav { display: flex; gap: .5rem; margin-left: auto; }
.topbar-nav a {
padding: .35rem .85rem;
border-radius: 6px;
font-size: .85rem;
font-weight: 600;
color: var(--text);
transition: background .15s;
}
.topbar-nav a:hover,
.topbar-nav a.active { background: var(--bg-hover); color: var(--accent-2); text-decoration: none; }
.topbar-progress {
font-size: .8rem;
color: var(--text-muted);
white-space: nowrap;
}
.nav-link:hover {
color: var(--color-acento) !important;
/* hamburger (solo móvil) */
.menu-toggle {
display: none;
background: none;
border: none;
color: var(--text);
font-size: 1.4rem;
cursor: pointer;
padding: .2rem .4rem;
}
/* Hero Section */
.hero-section {
min-height: 80vh;
/* ============================================================
HOME PÁGINA ÍNDICE
============================================================ */
.home-hero {
margin-top: var(--topbar-h);
padding: 3.5rem 2rem 2.5rem;
text-align: center;
background: linear-gradient(135deg, #252526 0%, #1e1e1e 100%);
border-bottom: 1px solid var(--border);
}
.highlight {
color: var(--color-acento);
text-decoration: underline;
font-style: italic;
.home-hero h1 {
font-size: 2.2rem;
color: var(--accent-2);
margin-bottom: .5rem;
}
.home-hero p {
color: var(--text-muted);
font-size: 1.05rem;
max-width: 640px;
margin: 0 auto 1.5rem;
}
.celeste {
color: var(--color-acento);
text-decoration: underline;
font-style: italic;
.home-stats {
display: flex;
justify-content: center;
gap: 2rem;
flex-wrap: wrap;
margin-bottom: 1.5rem;
}
.stat-item { text-align: center; }
.stat-num { font-size: 1.8rem; font-weight: 700; color: var(--accent); }
.stat-lbl { font-size: .78rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .08em; }
/* ── Cuenta atrás ──────────────────────────────────────────── */
.countdown-wrap {
margin-top: 2rem;
display: flex;
flex-direction: column;
align-items: center;
gap: .6rem;
}
.countdown-label {
font-size: .8rem;
color: var(--text-muted);
letter-spacing: .05em;
text-transform: uppercase;
}
.countdown-units {
display: flex;
align-items: center;
gap: .35rem;
}
.cd-unit {
display: flex;
flex-direction: column;
align-items: center;
background: var(--bg-alt);
border: 1px solid var(--border);
border-radius: 8px;
padding: .5rem .8rem;
min-width: 3.5rem;
}
.cd-num {
font-size: 1.8rem;
font-weight: 700;
color: var(--accent);
line-height: 1;
font-variant-numeric: tabular-nums;
}
.cd-lbl {
font-size: .65rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: .05em;
margin-top: .2rem;
}
.cd-sep {
font-size: 1.6rem;
font-weight: 700;
color: var(--text-muted);
padding-bottom: 1rem;
}
.btn-custom {
background-color: var(--color-fondo);
color: var(--color-texto);
border-radius: 50px;
padding: 12px 35px;
font-weight: bold;
border: none;
transition: 0.3s;
.btn {
display: inline-block;
padding: .65rem 1.5rem;
border-radius: 8px;
font-size: .95rem;
font-weight: 600;
cursor: pointer;
border: none;
transition: opacity .15s, transform .1s;
}
.btn:hover { opacity: .88; transform: translateY(-1px); text-decoration: none; }
.btn-primary { background: var(--accent); color: #fff; }
.btn-outline { background: transparent; border: 1.5px solid var(--accent); color: var(--accent); }
.btn-secondary { background: var(--bg-hover); color: var(--text); }
/* Bloques grid */
.bloques-section {
max-width: 1100px;
margin: 2.5rem auto;
padding: 0 1.5rem;
}
.bloques-section h2 {
font-size: 1.2rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: .1em;
margin-bottom: 1.2rem;
}
.btn-custom:hover {
background-color: var(--color-acento);
color: var(--blanco-puro);
transform: translateY(-3px);
.bloques-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 1.1rem;
}
/* Cards de Proyectos */
.section-title {
border-left: 5px solid var(--bg-nav);
padding-left: 15px;
.bloque-card {
background: var(--bg-alt);
border: 1px solid var(--border);
border-top: 3px solid var(--accent);
border-radius: 10px;
padding: 1.4rem;
transition: border-color .2s, transform .15s;
cursor: pointer;
}
.bloque-card:nth-child(2) { border-top-color: #c586c0; }
.bloque-card:nth-child(3) { border-top-color: var(--warning); }
.bloque-card:nth-child(4) { border-top-color: var(--accent-2); }
.bloque-card:hover { transform: translateY(-3px); }
.bloque-num {
font-size: .7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .12em;
color: var(--accent);
margin-bottom: .4rem;
}
.bloque-card:nth-child(2) .bloque-num { color: #c586c0; }
.bloque-card:nth-child(3) .bloque-num { color: var(--warning); }
.bloque-card:nth-child(4) .bloque-num { color: var(--accent-2); }
.bloque-card h3 { font-size: 1.05rem; color: var(--text); margin-bottom: .5rem; line-height: 1.3; }
.bloque-card p { font-size: .82rem; color: var(--text-muted); margin-bottom: 1rem; }
.bloque-temas-list {
list-style: none;
font-size: .8rem;
color: var(--text-muted);
}
.bloque-temas-list li { padding: .18rem 0; border-bottom: 1px solid var(--border); }
.bloque-temas-list li:last-child { border-bottom: none; }
/* Cuestionarios card */
.quiz-card {
max-width: 1100px;
margin: 0 auto 3rem;
padding: 0 1.5rem;
}
.project-card {
background-color: var(--color-tarjeta);
border: 1px solid var(--color-borde);
border-radius: 1.5rem;
transition: 0.3s;
overflow: hidden;
.quiz-banner {
background: linear-gradient(135deg, #1a2a3a 0%, #1e1e1e 100%);
border: 1px solid var(--accent);
border-radius: 10px;
padding: 1.6rem;
display: flex;
align-items: center;
gap: 1.5rem;
flex-wrap: wrap;
}
.project-card:hover {
border-color: var(--color-hover);
transform: translateY(-10px);
.quiz-banner-icon { font-size: 2.5rem; }
.quiz-banner h3 { font-size: 1.2rem; color: var(--accent-2); margin-bottom: .3rem; }
.quiz-banner p { color: var(--text-muted); font-size: .9rem; }
.quiz-banner .btn { margin-left: auto; }
/* ============================================================
PLAYER CURSO
============================================================ */
.player-layout {
display: flex;
margin-top: var(--topbar-h);
min-height: calc(100vh - var(--topbar-h));
}
.card-img-placeholder {
height: 180px;
background-color: var(--color-borde);
text-align: center;
line-height: 180px;
/* ── Sidebar ─────────────────────────────────────────────── */
.sidebar {
width: var(--sidebar-w);
flex-shrink: 0;
background: var(--bg-alt);
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
position: fixed;
top: var(--topbar-h);
bottom: 0;
overflow-y: auto;
transition: transform .25s ease;
z-index: 90;
}
.card-title {
color: var(--color-acento);
background-color: var(--bg-nav);
width: 100%;
padding: 5px 10px;
text-align: center;
border-radius: 10px;
.sidebar-header {
padding: 1rem 1.1rem .6rem;
font-size: .7rem;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
color: var(--text-muted);
border-bottom: 1px solid var(--border);
}
.card-text {
color: var(--color-texto) !important;
/* Bloque agrupador */
.bloque-group { border-bottom: 1px solid var(--border); }
.bloque-group-header {
display: flex;
align-items: center;
gap: .5rem;
padding: .7rem 1rem;
cursor: pointer;
font-size: .82rem;
font-weight: 700;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: .06em;
user-select: none;
transition: background .12s;
}
.bloque-group-header:hover { background: var(--bg-hover); }
.bloque-group-header .chevron {
margin-left: auto;
font-size: .7rem;
transition: transform .2s;
}
.bloque-group.open .chevron { transform: rotate(90deg); }
.bloque-group-items { display: none; }
.bloque-group.open .bloque-group-items { display: block; }
.sidebar-item {
display: flex;
align-items: flex-start;
gap: .55rem;
padding: .55rem 1rem .55rem 1.5rem;
font-size: .82rem;
color: var(--text);
cursor: pointer;
transition: background .12s;
border-left: 3px solid transparent;
}
.sidebar-item:hover { background: var(--bg-hover); }
.sidebar-item.active {
background: var(--bg-hover);
border-left-color: var(--accent);
color: var(--accent-2);
}
.sidebar-item .item-num {
flex-shrink: 0;
width: 1.3rem;
font-size: .7rem;
color: var(--text-muted);
padding-top: .1rem;
}
.card-tecnologia {
font-size: 0.75rem;
font-style: italic;
color: var(--gray) !important;
/* ── Content pane ────────────────────────────────────────── */
.content-pane {
flex: 1;
margin-left: var(--sidebar-w);
padding: 2.2rem 2.8rem;
max-width: 860px;
}
.btn-link {
color: var(--color-acento);
text-decoration: none;
font-style: italic;
font-weight: 600;
/* Spinner */
.spinner {
display: flex;
justify-content: center;
padding: 4rem;
font-size: 1.4rem;
color: var(--text-muted);
}
/* Card color variants */
@ -177,9 +406,296 @@ body {
color: var(--color-texto);
}
.border-dashed {
border: 2px dashed var(--color-borde) !important;
background: transparent;
/* Render Markdown */
.md-body { line-height: 1.75; }
.md-body h1 { font-size: 1.9rem; color: var(--accent-2); margin: 0 0 1.2rem; border-bottom: 2px solid var(--border); padding-bottom: .5rem; }
.md-body h2 { font-size: 1.35rem; color: var(--accent); margin: 1.8rem 0 .7rem; }
.md-body h3 { font-size: 1.1rem; color: var(--warning); margin: 1.4rem 0 .5rem; }
.md-body h4 { font-size: 1rem; color: var(--text-muted); margin: 1.2rem 0 .4rem; text-transform: uppercase; letter-spacing: .04em; }
.md-body p { margin-bottom: .9rem; }
.md-body ul, .md-body ol { margin: .5rem 0 .9rem 1.6rem; }
.md-body li { margin-bottom: .3rem; }
.md-body strong { color: #fff; }
.md-body em { color: var(--warning); }
.md-body code {
background: #2d2d2d;
color: #ce9178;
padding: .1em .35em;
border-radius: 4px;
font-family: 'JetBrains Mono', Consolas, monospace;
font-size: .88em;
}
.md-body pre {
background: #1a1a1a;
border: 1px solid var(--border);
border-left: 3px solid var(--accent);
border-radius: 6px;
padding: 1rem 1.2rem;
overflow-x: auto;
margin: 1rem 0 1.2rem;
}
.md-body pre code { background: none; padding: 0; color: var(--text); font-size: .85rem; }
.md-body blockquote {
border-left: 4px solid var(--accent-2);
background: #1a2a2a;
padding: .7rem 1rem;
border-radius: 0 6px 6px 0;
margin: 1rem 0;
color: var(--text-muted);
}
.md-body table { border-collapse: collapse; width: 100%; margin: 1rem 0 1.2rem; font-size: .88rem; }
.md-body th { background: #2d2d2d; color: var(--accent-2); text-align: left; padding: .55rem .8rem; border: 1px solid var(--border); }
.md-body td { padding: .45rem .8rem; border: 1px solid var(--border); }
.md-body tr:hover td { background: var(--bg-hover); }
.md-body hr { border: none; border-top: 1px solid var(--border); margin: 1.8rem 0; }
.md-body a { color: var(--accent); }
/* Navegación prev/next */
.lesson-nav {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 2.5rem;
padding-top: 1.2rem;
border-top: 1px solid var(--border);
gap: 1rem;
}
.lesson-nav-btn {
display: inline-flex;
align-items: center;
gap: .5rem;
padding: .6rem 1.2rem;
border-radius: 8px;
font-size: .88rem;
font-weight: 600;
background: var(--bg-alt);
border: 1px solid var(--border);
color: var(--text);
cursor: pointer;
transition: background .15s, border-color .15s;
}
.lesson-nav-btn:hover { background: var(--bg-hover); border-color: var(--accent); color: var(--accent-2); text-decoration: none; }
.lesson-nav-btn.disabled { opacity: .3; pointer-events: none; }
.lesson-pos { font-size: .8rem; color: var(--text-muted); text-align: center; }
/* ============================================================
CUESTIONARIOS
============================================================ */
/* ── Supuesto selector ──────────────────────────────────────── */
.sup-sel-header { text-align: center; margin-bottom: 1.5rem; }
.sup-sel-header h2 { font-size: 1.3rem; color: var(--accent); margin-bottom: .4rem; }
.sup-sel-header p { color: var(--text-muted); font-size: .9rem; }
.sup-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.25rem;
margin-bottom: 2rem;
}
.sup-card {
background: var(--bg-alt);
border: 1px solid var(--border);
border-radius: 10px;
padding: 1.25rem;
}
.sup-card-header {
display: flex;
align-items: center;
gap: .5rem;
margin-bottom: .6rem;
font-size: 1rem;
color: var(--accent);
}
.sup-card-num {
margin-left: auto;
font-size: .8rem;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 20px;
padding: .15rem .55rem;
color: var(--text-muted);
}
.sup-card-desc { font-size: .85rem; color: var(--text-muted); margin-bottom: .75rem; line-height: 1.5; }
.sup-material { margin-bottom: .75rem; }
/* Context hint inside question card */
.supuesto-context {
background: color-mix(in srgb, var(--accent) 8%, transparent);
border-left: 3px solid var(--accent);
border-radius: 0 6px 6px 0;
padding: .6rem .9rem;
font-size: .85rem;
color: var(--text-muted);
margin-bottom: 1rem;
line-height: 1.5;
}
.supuesto-context i { color: var(--accent); margin-right: .35rem; }
/* ── PDF docs bar ───────────────────────────────────────────── */
.exam-pdfs {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: .5rem;
background: var(--bg-alt);
border: 1px solid var(--border);
border-radius: 8px;
padding: .6rem 1rem;
margin-bottom: 1rem;
}
.exam-pdfs-label {
font-size: .8rem;
color: var(--text-muted);
white-space: nowrap;
margin-right: .25rem;
}
.exam-pdf-link {
display: inline-flex;
align-items: center;
gap: .35rem;
font-size: .8rem;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 6px;
padding: .3rem .65rem;
color: var(--accent);
text-decoration: none;
transition: background .15s, border-color .15s;
}
.exam-pdf-link:hover { background: color-mix(in srgb, var(--accent) 12%, transparent); border-color: var(--accent); }
/* ── Repaso de fallos ────────────────────────────────────────── */
.repaso-wrap {
margin-top: 2rem;
border-top: 1px solid var(--border);
padding-top: 1.5rem;
}
.repaso-titulo {
font-size: 1.1rem;
color: var(--warning);
margin-bottom: .5rem;
display: flex;
align-items: center;
gap: .5rem;
}
.repaso-intro {
font-size: .9rem;
color: var(--text-muted);
margin-bottom: 1.2rem;
}
.repaso-grupo {
border: 1px solid var(--border);
border-radius: 8px;
margin-bottom: .75rem;
overflow: hidden;
}
.repaso-grupo > summary {
list-style: none;
cursor: pointer;
padding: .7rem 1rem;
background: var(--bg-alt);
display: flex;
align-items: center;
justify-content: space-between;
gap: .5rem;
user-select: none;
}
.repaso-grupo > summary::-webkit-details-marker { display: none; }
.repaso-grupo[open] > summary { border-bottom: 1px solid var(--border); }
.repaso-tema-name { font-size: .9rem; font-weight: 600; color: var(--fg); display: flex; align-items: center; gap: .45rem; }
.repaso-tema-name i { color: var(--accent); }
.repaso-badge {
background: color-mix(in srgb, var(--error) 18%, transparent);
color: var(--error);
border: 1px solid color-mix(in srgb, var(--error) 35%, transparent);
border-radius: 20px;
font-size: .75rem;
font-weight: 700;
padding: .15rem .6rem;
white-space: nowrap;
}
.repaso-lista {
list-style: none;
margin: 0;
padding: 0;
}
.repaso-item {
padding: .75rem 1rem;
border-bottom: 1px solid var(--border);
}
.repaso-item:last-child { border-bottom: none; }
.repaso-q {
font-size: .85rem;
color: var(--fg);
margin-bottom: .45rem;
line-height: 1.5;
}
.repaso-answers {
display: flex;
flex-direction: column;
gap: .25rem;
}
.repaso-ans {
font-size: .8rem;
padding: .25rem .5rem;
border-radius: 4px;
display: flex;
align-items: flex-start;
gap: .4rem;
line-height: 1.4;
}
.repaso-ans.ko {
background: color-mix(in srgb, var(--error) 12%, transparent);
color: var(--error);
}
.repaso-ans.ok {
background: color-mix(in srgb, var(--success) 12%, transparent);
color: var(--success);
}
.repaso-link-tema {
display: inline-flex;
align-items: center;
gap: .4rem;
font-size: .82rem;
color: var(--accent);
text-decoration: none;
padding: .5rem 1rem;
background: color-mix(in srgb, var(--accent) 8%, transparent);
border-top: 1px solid var(--border);
width: 100%;
transition: background .15s;
}
.repaso-link-tema:hover { background: color-mix(in srgb, var(--accent) 18%, transparent); }
.repaso-perfecto {
text-align: center;
font-size: .95rem;
color: var(--success);
padding: 1rem;
display: flex;
align-items: center;
justify-content: center;
gap: .5rem;
}
.repaso-perfecto i { color: var(--warning); font-size: 1.1rem; }
/* ── Layout ─────────────────────────────────────────────────── */
.quiz-layout {
margin-top: var(--topbar-h);
max-width: 800px;
margin-left: auto;
margin-right: auto;
padding: 2rem 1.5rem;
}
#countdown {
@ -194,32 +710,149 @@ footer {
color: var(--color-acento);
}
/* --- Ajuste para dispositivos pequeños --- */
@media (max-width: 600px) {
header h1 {
font-size: 1.6rem;
}
.quiz-header { margin-bottom: 2rem; text-align: center; }
.quiz-header h1 { font-size: 1.8rem; color: var(--accent-2); margin-bottom: .4rem; }
.quiz-header p { color: var(--text-muted); font-size: .95rem; }
nav ul {
flex-direction: column;
align-items: center;
}
.container {
gap: 1.2rem;
}
.quiz-controls {
display: flex;
gap: 1rem;
flex-wrap: wrap;
align-items: center;
justify-content: center;
margin-bottom: 1.5rem;
}
.contact-links a {
color: var(--color-acento);
text-decoration: none;
font-weight: bold;
transition: 0.3s;
.quiz-select {
padding: .55rem 1rem;
background: var(--bg-alt);
border: 1px solid var(--border);
color: var(--text);
border-radius: 8px;
font-size: .95rem;
cursor: pointer;
flex: 1;
min-width: 200px;
max-width: 360px;
}
.quiz-select:focus { outline: none; border-color: var(--accent); }
.quiz-scoreboard {
display: flex;
gap: 1.2rem;
justify-content: center;
flex-wrap: wrap;
margin-bottom: 1.8rem;
}
.score-chip {
display: flex;
flex-direction: column;
align-items: center;
background: var(--bg-alt);
border: 1px solid var(--border);
border-radius: 10px;
padding: .7rem 1.4rem;
min-width: 90px;
}
.score-chip .val { font-size: 1.6rem; font-weight: 700; }
.score-chip .lbl { font-size: .7rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .08em; }
.score-chip.aciertos .val { color: var(--success); }
.score-chip.fallos .val { color: var(--error); }
.score-chip.total .val { color: var(--accent); }
.question-card {
background: var(--bg-alt);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.8rem;
margin-bottom: 1rem;
}
.timeline {
background-color: var(--color-tarjeta);
border-left: 1px solid var(--color-primario);
margin-bottom: 1.5rem;
transition: 0.3s;
}
.question-num {
font-size: .75rem;
text-transform: uppercase;
letter-spacing: .1em;
color: var(--text-muted);
margin-bottom: .6rem;
}
.question-text {
font-size: 1.05rem;
color: var(--text);
margin-bottom: 1.3rem;
line-height: 1.6;
}
.options-list { list-style: none; display: flex; flex-direction: column; gap: .6rem; }
.option-label {
display: flex;
align-items: flex-start;
gap: .75rem;
padding: .75rem 1rem;
border-radius: 8px;
border: 1.5px solid var(--border);
cursor: pointer;
transition: border-color .15s, background .15s;
font-size: .95rem;
}
.option-label:hover { border-color: var(--accent); background: var(--bg-hover); }
.option-label input { margin-top: .15rem; accent-color: var(--accent); }
.option-label.correct { border-color: var(--success); background: #1a2a1a; color: #6a9955; }
.option-label.incorrect { border-color: var(--error); background: #2a1a1a; color: var(--error); }
.option-letter {
flex-shrink: 0;
width: 1.4rem;
font-weight: 700;
color: var(--accent-2);
font-size: .88rem;
}
.question-feedback {
margin-top: 1rem;
padding: .75rem 1rem;
border-radius: 8px;
font-size: .9rem;
font-weight: 600;
display: none;
}
.question-feedback.show { display: block; }
.question-feedback.ok { background: #1a2a1a; border: 1px solid var(--success); color: var(--success); }
.question-feedback.ko { background: #2a1a1a; border: 1px solid var(--error); color: var(--error); }
.quiz-nav-row { display: flex; justify-content: flex-end; margin-top: 1rem; }
.final-screen {
text-align: center;
padding: 3rem 1rem;
}
.final-screen h2 { font-size: 1.8rem; color: var(--accent-2); margin-bottom: 1rem; }
.final-score-big { font-size: 3rem; font-weight: 700; color: var(--accent); margin-bottom: .3rem; }
.final-score-sub { color: var(--text-muted); margin-bottom: 2rem; }
/* Empty state */
.empty-state {
text-align: center;
padding: 4rem 1rem;
color: var(--text-muted);
}
.empty-state i { font-size: 3rem; margin-bottom: 1rem; display: block; }
/* ============================================================
RESPONSIVE
============================================================ */
@media (max-width: 768px) {
.menu-toggle { display: block; }
.sidebar {
transform: translateX(-100%);
width: min(var(--sidebar-w), 85vw);
}
.sidebar.open { transform: translateX(0); }
.content-pane { margin-left: 0; padding: 1.2rem 1rem; }
.home-hero h1 { font-size: 1.5rem; }
.bloques-grid { grid-template-columns: 1fr; }
.quiz-layout { padding: 1rem; }
}

View File

@ -1,52 +0,0 @@
# Temario TAI AGE
## I [Organización del Estado y Administración electrónica](bloque1/bloque1.md)
1. [La Constitución Española de 1978. Derechos y deberes fundamentales. Su garantía y suspensión. La Corona: funciones constitucionales del Rey.](bloque1/tema1.md)
2. [Las Cortes Generales: atribuciones del Congreso de los Diputados y del Senado. El Tribunal Constitucional: composición y atribuciones. El Defensor del Pueblo.](bloque1/tema2.md)
3. [El Gobierno: composición, nombramiento y cese. Las funciones del Gobierno. Relaciones entre el Gobierno y las Cortes Generales.](bloque1/tema3.md)
4. [Estatuto Básico del Empleado Público: derechos y deberes, provisión de puestos, promoción interna, carrera profesional, situaciones administrativas, incompatibilidades y régimen sancionador. Ley 19/2013 de transparencia. Agenda 2030 y ODS.](bloque1/tema4.md)
5. [Políticas de igualdad y contra la violencia de género. Igualdad LGTBI. Discapacidad y dependencia.](bloque1/tema5.md)
6. [Sociedad de la información. Identidad y firma electrónica. DNIe. Agenda Digital para España.](bloque1/tema6.md)
7. [Protección de datos personales: principios, derechos y obligaciones. Derechos digitales.](bloque1/tema7.md)
8. [Acceso electrónico a los servicios públicos. Registros, notificaciones, medios electrónicos. ENS y ENI. NTI.](bloque1/tema8.md)
9. [Instrumentos de acceso electrónico: sedes electrónicas, canales, identificación y autenticación. Infraestructuras y servicios comunes.](bloque1/tema9.md)
---
## II [Tecnología básica](bloque2/bloque2.md)
1. [Informática básica. Representación y comunicación de la información: elementos constitutivos de un sistema de información. Características y funciones. Arquitectura de ordenadores. Componentes internos de los equipos microinformáticos.](bloque2/tema1.md)
2. [Periféricos: conectividad y administración. Elementos de impresión. Elementos de almacenamiento. Elementos de visualización y digitalización.](bloque2/tema2.md)
3. [Tipos abstractos y Estructuras de datos. Organizaciones de ficheros. Algoritmos. Formatos de información y ficheros.](bloque2/tema3.md)
4. [Sistemas operativos. Características y elementos constitutivos. Sistemas Windows. Sistemas Unix y Linux. Sistemas operativos para dispositivos móviles.](bloque2/tema4.md)
5. [Sistemas de gestión de bases de datos relacionales, orientados a objetos y NoSQL: características y componentes.](bloque2/tema5.md)
---
## III [Desarrollo de sistemas](bloque3/bloque3.md)
1. [Modelado de datos, metodologías y reglas. Entidades, atributos y relaciones. Diseño de bases de datos. Diseño lógico y físico. El modelo lógico relacional. Normalización.](bloque3/tema1.md)
2. [Lenguajes de programación. Representación de tipos de datos. Operadores. Instrucciones condicionales. Bucles y recursividad. Procedimientos, funciones y parámetros. Vectores y registros. Estructura de un programa.](bloque3/tema2.md)
3. [Lenguajes de interrogación de bases de datos. Estándar ANSI SQL. Procedimientos almacenados. Eventos y disparadores.](bloque3/tema3.md)
4. [Diseño y programación orientada a objetos. Elementos y componentes software: objetos, clases, herencia, métodos, sobrecarga. Ventajas e inconvenientes. Patrones de diseño y lenguaje de modelado unificado (UML).](bloque3/tema4.md)
5. [Arquitectura Java EE/Jakarta EE y plataforma .NET: componentes, persistencia y seguridad. Características, elementos, lenguajes y funciones en ambos entornos. Desarrollo de interfaces.](bloque3/tema5.md)
6. [Arquitectura de sistemas cliente/servidor y multicapas: componentes y operación. Arquitecturas de servicios web y protocolos asociados.](bloque3/tema6.md)
7. [Aplicaciones web. Desarrollo web front-end y en servidor, multiplataforma y multidispositivo. Lenguajes: HTML, XML y sus derivaciones. Navegadores y lenguajes de programación web. Lenguajes de script.](bloque3/tema7.md)
8. [Accesibilidad, diseño universal y usabilidad. Acceso y usabilidad de las tecnologías, productos y servicios relacionados con la sociedad de la información. Confidencialidad y disponibilidad de la información en puestos de usuario final. Conceptos de seguridad en el desarrollo de los sistemas.](bloque3/tema8.md)
9. [Repositorios: estructura y actualización. Generación de código y documentación. Metodologías de desarrollo. Pruebas. Programas para control de versiones. Plataformas de desarrollo colaborativo de software.](bloque3/tema9.md)
---
## IV [Sistemas y comunicaciones](bloque4/bloque4.md)
1. [Administración del Sistema operativo y software de base. Actualización, mantenimiento y reparación del sistema operativo.](bloque4/tema1.md)
2. [Administración de bases de datos. Sistemas de almacenamiento y su virtualización. Políticas, sistemas y procedimientos de backup y su recuperación. Backup de sistemas físicos y virtuales. Virtualización de sistemas y virtualización de puestos de usuario.](bloque4/tema2.md)
3. [Administración de servidores de correo electrónico y sus protocolos. Administración de contenedores y microservicios.](bloque4/tema3.md)
4. [Administración de redes de área local. Gestión de usuarios. Gestión de dispositivos. Monitorización y control de tráfico.](bloque4/tema4.md)
5. [Conceptos de seguridad de los sistemas de información. Seguridad física. Seguridad lógica. Amenazas y vulnerabilidades. Técnicas criptográficas y protocolos seguros. Mecanismos de firma digital. Infraestructura física de un CPD: acondicionamiento y equipamiento. Sistemas de gestión de incidencias. Control remoto de puestos de usuario.](bloque4/tema5.md)
6. [Comunicaciones. Medios de transmisión. Modos de comunicación. Equipos terminales y equipos de interconexión y conmutación. Redes de comunicaciones. Redes de conmutación y redes de difusión. Comunicaciones móviles e inalámbricas.](bloque4/tema6.md)
7. [El modelo TCP/IP y el modelo de referencia de interconexión de sistemas abiertos (OSI) de ISO. Protocolos TCP/IP.](bloque4/tema7.md)
8. [Internet: arquitectura de red. Origen, evolución y estado actual. Principales servicios. Protocolos HTTP, HTTPS y SSL/TLS.](bloque4/tema8.md)
9. [Seguridad y protección en redes de comunicaciones. Seguridad perimetral. Acceso remoto seguro a redes. Redes privadas virtuales (VPN). Seguridad en el puesto del usuario.](bloque4/tema9.md)
10. [Redes locales. Tipología. Técnicas de transmisión. Métodos de acceso. Dispositivos de interconexión.](bloque4/tema10.md)

File diff suppressed because it is too large Load Diff

View File

@ -1,39 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bloque 1 - Organización del Estado y Administración electrónica</title>
</head>
<body>
<header>
<link rel="icon" href="../img/eltiempo-logo.png" type="image/x-icon">
<link rel="stylesheet" href="../css/estilos.css">
<h1>Bloque 1 - Organización del Estado y Administración electrónica</h1>
<nav>
<ul>
<li><a href="../index.html">Temario</a></li>
<li><a href="../notas.md">Notas</a></li>
</ul>
</nav>
</header>
<main>
<h2>I Organización del Estado y Administración electrónica</h2>
<ol>
<li><a href="tema1.html">La Constitución Española de 1978. Derechos y deberes fundamentales. Su garantía y suspensión. La Corona: funciones constitucionales del Rey.</a></li>
<li><a href="tema2.html">Las Cortes Generales: atribuciones del Congreso de los Diputados y del Senado. El Tribunal Constitucional: composición y atribuciones. El Defensor del Pueblo.</a></li>
<li><a href="tema3.html">El Gobierno: composición, nombramiento y cese. Las funciones del Gobierno. Relaciones entre el Gobierno y las Cortes Generales.</a></li>
<li><a href="tema4.html">Estatuto Básico del Empleado Público: derechos y deberes, provisión de puestos, promoción interna, carrera profesional, situaciones administrativas, incompatibilidades y régimen sancionador. Ley 19/2013 de transparencia. Agenda 2030 y ODS.</a></li>
<li><a href="tema5.html">Políticas de igualdad y contra la violencia de género. Igualdad LGTBI. Discapacidad y dependencia.</a></li>
<li><a href="tema6.html">Sociedad de la información. Identidad y firma electrónica. DNIe. Agenda Digital para España.</a></li>
<li><a href="tema7.html">Protección de datos personales: principios, derechos y obligaciones. Derechos digitales.</a></li>
<li><a href="tema8.html">Acceso electrónico a los servicios públicos. Registros, notificaciones, medios electrónicos. ENS y ENI. NTI.</a></li>
<li><a href="tema9.html">Instrumentos de acceso electrónico: sedes electrónicas, canales, identificación y autenticación. Infraestructuras y servicios comunes.</a></li>
</ol>
</main>
[⬅️ Volver al temario](../README.md)
</body>
</html>

View File

@ -1,764 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>La Constitución Española de 1978</title>
</head>
<body>
<header>
<link rel="icon" href="../img/logo.png" type="image/x-icon">
<link rel="stylesheet" href="../css/estilos.css">
<h1>1. La Constitución Española de 1978. <br>
Derechos y deberes fundamentales. <br>
Su garantía y suspensión. <br>
La Corona: funciones constitucionales del Rey.</h1>
</header>
<h2>Introducción a la Constitución Española</h2>
<p>La Constitución Española de 1978 es <strong>la norma suprema</strong> de nuestro ordenamiento jurídico. Entró en vigor el <strong>29 de diciembre de 1978</strong> y simboliza la transición de España hacia un sistema democrático después de un periodo histórico complejo.</p>
<p>Todo lo que hacen los poderes públicos —Gobierno, Cortes Generales, jueces, administraciones— debe respetar esta Constitución.</p>
<p>Su finalidad es <strong>organizar el Estado</strong>, <strong>garantizar la convivencia</strong>, asegurar la <strong>libertad</strong>, la <strong>igualdad</strong>, y reconocer un sistema político basado en el <strong>pluralismo</strong> y la <strong>participación ciudadana</strong>.</p>
<p><strong>Características de la constitución</strong>: Escrita y codificada, extensa, origen popular, rígida, Consensuada y elástica, abierta e inacabada.</p>
<h3>1.1. Estructura de la Constitución Española</h3>
<p>La Constitución está perfectamente organizada para facilitar el entendimiento del Estado y de los derechos ciudadanos.</p>
<table>
<tr>
<th>Título</th>
<th>Nombre</th>
<th>Artículos</th>
</tr>
<tr>
<td></td>
<td>Preámbulo</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Título preliminar</td>
<td>1-9</td>
</tr>
<tr>
<td>1</td>
<td>De los derechos y deberes fundamentales</td>
<td>10-55</td>
</tr>
<tr>
<td>2</td>
<td>De la Corona</td>
<td>56-65</td>
</tr>
<tr>
<td>3</td>
<td>De las Cortes Generales</td>
<td>66-96</td>
</tr>
<tr>
<td>4</td>
<td>Del Gobierno y la Administración</td>
<td>97-107</td>
</tr>
<tr>
<td>5</td>
<td>De la relación entre el Gobierno y las Cortes Generales</td>
<td>108-116</td>
</tr>
<tr>
<td>6</td>
<td>Del Poder Judicial</td>
<td>117-127</td>
</tr>
<tr>
<td>7</td>
<td>Economía y Hacienda</td>
<td>128-135</td>
</tr>
<tr>
<td>8</td>
<td>La Organización Territorial del Estado</td>
<td>137-158</td>
</tr>
<tr>
<td>9</td>
<td>El Tribunal Constitucional</td>
<td>159-165</td>
</tr>
<tr>
<td>10</td>
<td>De la Reforma Constitucional</td>
<td>166-169</td>
</tr>
<tr>
<td></td>
<td>Disposiciones adicionales</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Disposiciones transitorias</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Disposiciones derogatorias</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Disposiciones finales</td>
<td></td>
</tr>
</table>
<h3>Preámbulo</h3>
<p>No tiene valor jurídico, pero expresa los principios inspiradores: convivencia, justicia, libertad, seguridad y promoción del bienestar.</p>
<h3>Títulos (arts. 10-169):</h3>
<ul>
<li>Título Preliminar: principios básicos del ordenamiento jurídico.</li>
<li>Título I: derechos y deberes fundamentales.</li>
<ul>
<li>Capítulo 1: derechos de los españoles y extranjeros.</li>
<li>Capítulo 2: derechos fundamentales y libertades públicas.</li>
<ul>
<li>Sección 1: De los derechos fundamentales y libertades públicas.</li>
<li>Sección 2: De los derechos y deberes de los ciudadanos.</li>
</ul>
<li>Capítulo 3: principios rectores de la política social y económica.</li>
</ul>
<li>Título II: la Corona.</li>
<li>Título III: las Cortes Generales.</li>
<ul>
<li>Sección 1: De las Cortes Generales.</li>
<li>Sección 2: De la elaboración de las leyes.</li>
<li>Sección 3: De los tratados internacionales.</li>
</ul>
<li>Título IV: el Gobierno y la Administración.</li>
<li>Título V: relación entre el Gobierno y las Cortes Generales.</li>
<li>Título VI: el Poder Judicial.</li>
<li>Título VII: economía y Hacienda.</li>
<li>Título VIII: organización territorial del Estado.</li>
<ul>
<li>Principios generales.</li>
<li>De la Administración local.</li>
<li>De las comunidades autónomas.</li>
</ul>
<li>Título IX: el Tribunal Constitucional.</li>
<li>Título X: reforma constitucional.</li>
</ul>
<h3>Disposiciones Adicionales, Transitorias, Derogatoria y Final.</h3>
<p>Son normas complementarias para adaptaciones legales y organización del territorio (por ejemplo, régimen foral vasco y navarro).</p>
<h2> TÍTULO I DE LA CONSTITUCIÓN ESPAÑOLA </h2>
<h3> Derechos y deberes fundamentales </h3>
<h4>Capítulo Segundo · Derechos y libertades (Arts. 1438)</h4>
<h5> Sección 1.ª: Derechos FUNDAMENTALES y libertades públicas (Arts. 1529 CE) </h5>
<table>
<tr>
<th>Artículo</th>
<th>Derecho FUNDAMENTAL</th>
</tr>
<tr>
<td><strong>15</strong></td>
<td>Derecho a la vida e integridad física y moral</td>
</tr>
<tr>
<td><strong>16</strong></td>
<td>Libertad ideológica, religiosa y de culto</td>
</tr>
<tr>
<td><strong>17</strong></td>
<td>Derecho a la libertad y a la seguridad</td>
</tr>
<tr>
<td><strong>18.1</strong></td>
<td>Derecho al honor, a la intimidad y a la propia imagen</td>
</tr>
<tr>
<td><strong>18.2</strong></td>
<td>Inviolabilidad del domicilio</td>
</tr>
<tr>
<td><strong>18.3</strong></td>
<td>Secreto de las comunicaciones</td>
</tr>
<tr>
<td><strong>18.4</strong></td>
<td><strong>Protección de datos (uso de la informática)</strong></td>
</tr>
<tr>
<td><strong>19</strong></td>
<td>Libre elección de residencia y circulación</td>
</tr>
<tr>
<td><strong>20</strong></td>
<td>Libertad de expresión y creación</td>
</tr>
<tr>
<td><strong>21</strong></td>
<td>Derecho de reunión</td>
</tr>
<tr>
<td><strong>22</strong></td>
<td>Derecho de asociación</td>
</tr>
<tr>
<td><strong>23</strong></td>
<td>Participación en asuntos públicos y acceso a cargos públicos</td>
</tr>
<tr>
<td><strong>24</strong></td>
<td>Tutela judicial efectiva</td>
</tr>
<tr>
<td><strong>25</strong></td>
<td>Legalidad penal y sancionadora</td>
</tr>
<tr>
<td><strong>26</strong></td>
<td>Prohibición de Tribunales de Honor</td>
</tr>
<tr>
<td><strong>27</strong></td>
<td>Derecho a la educación y libertad de enseñanza</td>
</tr>
<tr>
<td><strong>28</strong></td>
<td>Libertad sindical y derecho de huelga</td>
</tr>
<tr>
<td><strong>29</strong></td>
<td>Derecho de petición</td>
</tr>
</table>
<div class="nota">
Claves de examen TAI:
<ul>
<li>Protección reforzada (art. 53.2 CE): Procedimiento basado en principios de preferencia y sumariedad.</li>
<li>Recurso de amparo ante el Tribunal Constitucional.</li>
<li>Desarrollo mediante Ley Orgánica.</li>
<li>Nota: El Art. 18.4 es fundamental para el bloque de informática de la oposición.</li>
</ul>
</div>
<h5> Sección 2.ª: Derechos y deberes de los ciudadanos (Arts. 30 - 38 CE) </h5>
<table>
<tr>
<th>Artículo</th>
<th>Derecho / Deber (NO FUNDAMENTALES)</th>
</tr>
<tr>
<td><strong>30</strong></td>
<td>Derecho y deber de defender España</td>
</tr>
<tr>
<td><strong>31</strong></td>
<td>Deber de contribuir a los gastos públicos</td>
</tr>
<tr>
<td><strong>32</strong></td>
<td>Derecho a contraer matrimonio</td>
</tr>
<tr>
<td><strong>33</strong></td>
<td>Derecho a la propiedad privada y a la herencia</td>
</tr>
<tr>
<td><strong>34</strong></td>
<td>Derecho de fundación</td>
</tr>
<tr>
<td><strong>35</strong></td>
<td>Derecho y deber al trabajo</td>
</tr>
<tr>
<td><strong>36</strong></td>
<td>Colegios profesionales</td>
</tr>
<tr>
<td><strong>37</strong></td>
<td>Negociación colectiva y conflicto colectivo</td>
</tr>
<tr>
<td><strong>38</strong></td>
<td>Libertad de empresa</td>
</tr>
</table>
<div class="nota">
Claves de examen TAI:
<ul>
<li>No son derechos fundamentales, por lo que no tienen protección reforzada ni recurso de amparo.</li>
<li>Se regulan por Ley Ordinaria, no por Ley Orgánica.</li>
</ul>
</div>
<h4>Capítulo Tercero · Principios rectores de la política social y económica (Arts. 39-52 CE)</h4>
<p>No son derechos subjetivos exigibles directamente.</p>
<table>
<tr>
<th>Artículo</th>
<th>Materia</th>
</tr>
<tr>
<td><strong>39</strong></td>
<td>Protección de la familia</td>
</tr>
<tr>
<td><strong>40</strong></td>
<td>Progreso social y económico</td>
</tr>
<tr>
<td><strong>41</strong></td>
<td>Seguridad Social</td>
</tr>
<tr>
<td><strong>42</strong></td>
<td>Defensa nacional</td>
</tr>
<tr>
<td><strong>43</strong></td>
<td>Protección de la salud</td>
</tr>
<tr>
<td><strong>44</strong></td>
<td>Acceso a la cultura</td>
</tr>
<tr>
<td><strong>45</strong></td>
<td>Medio ambiente</td>
</tr>
<tr>
<td><strong>47</strong></td>
<td>Vivienda digna</td>
</tr>
<tr>
<td><strong>49</strong></td>
<td>Protección de las personas con discapacidad</td>
</tr>
<tr>
<td><strong>50</strong></td>
<td>Pensiones</td>
</tr>
<tr>
<td><strong>51</strong></td>
<td>Defensa de consumidores y usuarios</td>
</tr>
<tr>
<td><strong>52</strong></td>
<td>Organizaciones profesionales</td>
</tr>
</table>
<div class="nota">
Claves de examen TAI:
<ul>
<li>Informan la legislación y la actuación de los poderes públicos.</li>
<li><strong>No hay amparo constitucional.</strong></li>
<li>Solo son alegables según leyes de desarrollo.</li>
</ul>
</div>
<h4>Reforma de la Constitución</h4>
<h5>X. La reforma de la Constitución Española</h5>
<p>La Constitución Española prevé su propia modificación mediante procedimientos especiales regulados en el <strong>Título X (arts. 166 a 169 CE)</strong>.
Se trata de un procedimiento <strong>rígido</strong>, con garantías reforzadas para proteger los elementos esenciales del sistema constitucional.</p>
<hr>
<h5>1. Iniciativa de la reforma constitucional (art. 166 CE)</h5>
<p>La iniciativa de reforma corresponde a los mismos sujetos que la iniciativa legislativa ordinaria:</p>
<ul>
<li>El <strong>Gobierno</strong></li>
<li>El <strong>Congreso de los Diputados</strong></li>
<li>El <strong>Senado</strong></li>
<li>Las <strong>Asambleas Legislativas de las Comunidades Autónomas</strong></li>
</ul>
<p></p>📌 <em>Nota de examen</em>:
Las Comunidades Autónomas <strong>sí pueden iniciar</strong> una reforma constitucional.</p>
<hr>
<h5>2. Tipos de procedimiento de reforma</h5>
<p>La Constitución distingue <strong>dos procedimientos</strong> de reforma:</p>
<table>
<tr>
<th>Procedimiento</th>
<th>Artículo</th>
<th>Ámbito de aplicación</th>
</tr>
<tr>
<td>Ordinario</td>
<td>Art. 167 CE</td>
<td>Regla general</td>
</tr>
<tr>
<td>Agravado</td>
<td>Art. 168 CE</td>
<td>Reformas especialmente sensibles</td>
</tr>
</table>
<hr>
<h5>3. Procedimiento ordinario de reforma (art. 167 CE)</h5>
Se aplica a la **mayoría de los preceptos constitucionales**.
**Requisitos:**
- Aprobación por **mayoría de 3/5** en **cada Cámara**
- Si no hay acuerdo → **Comisión Mixta CongresoSenado**
- Si persiste el desacuerdo → el **Congreso puede aprobar por 2/3**
- **Referéndum opcional**, solo si lo solicita **1/10 de diputados o senadores**
📌 *Clave de examen*:
No todas las reformas constitucionales exigen referéndum.
---
#### 4. Procedimiento agravado de reforma (art. 168 CE)
Se aplica cuando la reforma afecta a:
- El **Título Preliminar**
- La **Sección 1.ª del Capítulo II del Título I** (derechos fundamentales)
- El **Título II (La Corona)**
- La **revisión total** de la Constitución
**Fases obligatorias:**
1. Aprobación por **2/3 de cada Cámara**
2. **Disolución inmediata de las Cortes Generales**
3. Nuevas Cortes → nueva aprobación por **2/3**
4. **Referéndum obligatorio**
📌 *Muy preguntado*:
En el procedimiento agravado el referéndum es **siempre obligatorio**.
---
#### 5. Límites temporales a la reforma constitucional (art. 169 CE)
No podrá iniciarse la reforma constitucional cuando esté declarado alguno de los siguientes estados:
- **Estado de alarma**
- **Estado de excepción**
- **Estado de sitio**
---
### *1. TÍTULO PRELIMINAR*
**Artículo 1**
1. España se constituye en un Estado social y democrático de Derecho, que propugna como valores superiores de su ordenamiento jurídico la libertad, la justicia, la igualdad y el pluralismo político.
2. La soberanía nacional reside en el pueblo español, del que emanan los poderes del Estado.
3. La forma política del Estado español es la Monarquía parlamentaria.
**Artículo 2** La Constitución se fundamenta en la indisoluble unidad de la Nación española, patria común e indivisible de todos los españoles, y reconoce y garantiza el derecho a la autonomía de las nacionalidades y regiones que la integran y la solidaridad entre todas ellas.
**Artículo 3**
1. El castellano es la lengua española oficial del Estado. Todos los españoles tienen el deber de conocerla y el derecho a usarla.
2. Las demás lenguas españolas serán también oficiales en las respectivas Comunidades Autónomas de acuerdo con sus Estatutos.
3. La riqueza de las distintas modalidades lingüísticas de España es un patrimonio cultural que será objeto de especial respeto y protección.
**Artículo 4**
1. La bandera de España está formada por tres franjas horizontales, roja, amarilla y roja, siendo la amarilla de doble anchura que cada una de las rojas.
2. Los Estatutos podrán reconocer banderas y enseñas propias de las Comunidades Autónomas. Estas se utilizarán junto a la bandera de España en sus edificios públicos y en sus actos oficiales.
**Artículo 5** La capital del Estado es la villa de Madrid.
### Derechos y deberes fundamentales
### *Titulo 1. De los derechos y deberes fundamentales*
### **Articulo 10.**
1. La dignidad de la persona, los derechos inviolables que le son inherentes, el libre desarrollo de la personalidad, el respeto a la ley y a los derechos de los demás son fundamento del orden político y de la paz social.
2. Las normas relativas a los derechos fundamentales y a las libertades que la Constitución reconoce se interpretarán de conformidad con la Declaración Universal de Derechos Humanos y los tratados y acuerdos internacionales sobre las mismas materias ratificados por España.
### **CAPÍTULO PRIMERO - De los españoles y los extranjeros**
### **Artículo 11**
1. La nacionalidad española se adquiere, se conserva y se pierde de acuerdo con lo establecido por la ley.
2. Ningún español de origen podrá ser privado de su nacionalidad.
3. El Estado podrá concertar tratados de doble nacionalidad con los países iberoamericanos o con aquellos que hayan tenido o tengan una particular vinculación con España. En estos mismos países, aun cuando no reconozcan a sus ciudadanos un derecho recíproco, podrán naturalizarse los españoles sin perder su nacionalidad de origen.
**Artículo 12** Los españoles son mayores de edad a los dieciocho años.
### **Artículo 13**
1. Los extranjeros gozarán en España de las libertades públicas que garantiza el presente Título en los términos que establezcan los tratados y la ley.
2. Solamente los españoles serán titulares de los derechos reconocidos en el artículo 23, salvo lo que, atendiendo a criterios de reciprocidad, pueda establecerse por tratado o ley para el derecho de sufragio activo y pasivo en las elecciones municipales.
3. La extradición sólo se concederá en cumplimiento de un tratado o de la ley, atendiendo al principio de reciprocidad. Quedan excluidos de la extradición los delitos políticos, no considerándose como tales los actos de terrorismo.
4. La ley establecerá los términos en que los ciudadanos de otros países y los apátridas podrán gozar del derecho de asilo en España.
### CAPÍTULO SEGUNDO - Derechos y libertades
### **Artículo 14** Los españoles son iguales ante la ley, sin que pueda prevalecer discriminación alguna por razón de nacimiento, raza, sexo, religión, opinión o cualquier otra condición o circunstancia personal o social.
### **Sección 1.ª De los derechos fundamentales y de las libertades públicas**
**Artículo 15**
Todos tienen derecho a la vida y a la integridad física y moral, sin que, en ningún caso, puedan ser sometidos a tortura ni a penas o tratos inhumanos o degradantes. Queda abolida la pena de muerte, salvo lo que puedan disponer las leyes penales militares para tiempos de guerra.
### **Artículo 16**
1. Se garantiza la libertad ideológica, religiosa y de culto de los individuos y las comunidades sin más limitación, en sus manifestaciones, que la necesaria para el mantenimiento del orden público protegido por la ley.
2. Nadie podrá ser obligado a declarar sobre su ideología, religión o creencias.
3. Ninguna confesión tendrá carácter estatal. Los poderes públicos tendrán en cuenta las creencias religiosas de la sociedad española y mantendrán las consiguientes relaciones de cooperación con la Iglesia Católica y las demás confesiones.
### **Artículo 17**
1. Toda persona tiene derecho a la libertad y a la seguridad. Nadie puede ser privado de su libertad, sino con la observancia de lo establecido en este artículo y en los casos y en la forma previstos en la ley.
2. La detención preventiva no podrá durar más del tiempo estrictamente necesario para la realización de las averiguaciones tendentes al esclarecimiento de los hechos, y, en todo caso, en el plazo máximo de setenta y dos horas, el detenido deberá ser puesto en libertad o a disposición de la autoridad judicial.
3. 3. Toda persona detenida debe ser informada de forma inmediata, y de modo que le sea comprensible, de sus derechos y de las razones de su detención, no pudiendo ser obligada a declarar. Se garantiza la asistencia de abogado al detenido en las diligencias policiales y judiciales, en los términos que la ley establezca.
4. La ley regulará un procedimiento de «habeas corpus» para producir la inmediata puesta a disposición judicial de toda persona detenida ilegalmente. Asimismo, por ley se determinará el plazo máximo de duración de la prisión provisional.
### **Artículo 18**
1. Se garantiza el derecho al honor, a la intimidad personal y familiar y a la propia imagen.
2. El domicilio es inviolable. Ninguna entrada o registro podrá hacerse en él sin consentimiento del titular o resolución judicial, salvo en caso de flagrante delito.
3. Se garantiza el secreto de las comunicaciones y, en especial, de las postales, telegráficas y telefónicas, salvo resolución judicial.
4. La ley limitará el uso de la informática para garantizar el honor y la intimidad personal y familiar de los ciudadanos y el pleno ejercicio de sus derechos.
### **Artículo 19** Los españoles tienen derecho a elegir libremente su residencia y a circular por el territorio nacional. Asimismo, tienen derecho a entrar y salir libremente de España en los términos que la ley establezca. Este derecho no podrá ser limitado por motivos políticos o ideológicos.
### **Artículo 20**
1. Se reconocen y protegen los derechos:
1. A expresar y difundir libremente los pensamientos, ideas y opiniones mediante la palabra, el escrito o cualquier otro medio de reproducción.
2. A la producción y creación literaria, artística, científica y técnica.
3. A la libertad de cátedra.
4. A comunicar o recibir libremente información veraz por cualquier medio de difusión. La ley regulará el derecho a la cláusula de conciencia y al secreto profesional en el ejercicio de estas libertades.
2. El ejercicio de estos derechos no puede restringirse mediante ningún tipo de censura previa.
3. La ley regulará la organización y el control parlamentario de los medios de comunicación social dependientes del Estado o de cualquier ente público y garantizará el acceso a dichos medios de los grupos sociales y políticos significativos, respetando el pluralismo de la sociedad y de las diversas lenguas de España.
4. Estas libertades tienen su límite en el respeto a los derechos reconocidos en este Título, en los preceptos de las leyes que lo desarrollen y, especialmente, en el derecho al honor, a la intimidad, a la propia imagen y a la protección de la juventud y de la infancia.
5. Sólo podrá acordarse el secuestro de publicaciones, grabaciones y otros medios de información en virtud de resolución judicial.
### **Artículo 21**
1. Se reconoce el derecho de reunión pacífica y sin armas. El ejercicio de este derecho no necesitará autorización previa.
2. En los casos de reuniones en lugares de tránsito público y manifestaciones se dará comunicación previa a la autoridad, que sólo podrá prohibirlas cuando existan razones fundadas de alteración del orden público, con peligro para personas o bienes.
### **Artículo 22**
1. Se reconoce el derecho de asociación.
2. Las asociaciones que persigan fines o utilicen medios tipificados como delito son ilegales.
3. Las asociaciones constituidas al amparo de este artículo deberán inscribirse en un registro a los solos efectos de publicidad.
4. Las asociaciones sólo podrán ser disueltas o suspendidas en sus actividades en virtud de resolución judicial motivada.
5. Se prohíben las asociaciones secretas y las de carácter paramilitar.
### **Artículo 23**
1. Los ciudadanos tienen el derecho a participar en los asuntos públicos, directamente o por medio de representantes, libremente elegidos en elecciones periódicas por sufragio universal.
2. Asimismo, tienen derecho a acceder en condiciones de igualdad a las funciones y cargos públicos, con los requisitos que señalen las leyes.
### **Artículo 24**
1. Todas las personas tienen derecho a obtener la tutela efectiva de los jueces y tribunales en el ejercicio de sus derechos e intereses legítimos, sin que, en ningún caso, pueda producirse indefensión.
2. Asimismo, todos tienen derecho al Juez ordinario predeterminado por la ley, a la defensa y a la asistencia de letrado, a ser informados de la acusación formulada contra ellos, a un proceso público sin dilaciones indebidas y con todas las garantías, a utilizar los medios de prueba pertinentes para su defensa, a no declarar contra sí mismos, a no confesarse culpables y a la presunción de inocencia. La ley regulará los casos en que, por razón de parentesco o de secreto profesional, no se estará obligado a declarar sobre hechos presuntamente delictivos.
### **Artículo 25**
1. Nadie puede ser condenado o sancionado por acciones u omisiones que en el momento de producirse no constituyan delito, falta o infracción administrativa, según la legislación vigente en aquel momento.
2. Las penas privativas de libertad y las medidas de seguridad estarán orientadas hacia la reeducación y reinserción social y no podrán consistir en trabajos forzados. El condenado a pena de prisión que estuviere cumpliendo la misma gozará de los derechos fundamentales de este Capítulo, a excepción de los que se vean expresamente limitados por el contenido del fallo condenatorio, el sentido de la pena y la ley penitenciaria. En todo caso, tendrá derecho a un trabajo remunerado y a los beneficios correspondientes de la Seguridad Social, así como al acceso a la cultura y al desarrollo integral de su personalidad.
3. La Administración civil no podrá imponer sanciones que, directa o subsidiariamente, impliquen privación de libertad.
**Artículo 26** Se prohíben los Tribunales de Honor en el ámbito de la Administración civil y de las organizaciones profesionales.
**Artículo 27**
1. Todos tienen el derecho a la educación. Se reconoce la libertad de enseñanza.
2. La educación tendrá por objeto el pleno desarrollo de la personalidad humana en el respeto a los principios democráticos de convivencia y a los derechos y libertades fundamentales.
3. Los poderes públicos garantizan el derecho que asiste a los padres para que sus hijos reciban la formación religiosa y moral que esté de acuerdo con sus propias convicciones.
4. La enseñanza básica es obligatoria y gratuita.
5. Los poderes públicos garantizan el derecho de todos a la educación, mediante una programación general de la enseñanza, con participación efectiva de todos los sectores afectados y la creación de centros docentes.
6. Se reconoce a las personas físicas y jurídicas la libertad de creación de centros docentes, dentro del respeto a los principios constitucionales.
7. Los profesores, los padres y, en su caso, los alumnos intervendrán en el control y gestión de todos los centros sostenidos por la Administración con fondos públicos, en los términos que la ley establezca.
8. Los poderes públicos inspeccionarán y homologarán el sistema educativo para garantizar el cumplimiento de las leyes.
9. Los poderes públicos ayudarán a los centros docentes que reúnan los requisitos que la ley establezca.
10. Se reconoce la autonomía de las Universidades, en los términos que la ley establezca.
**Artículo 28**
1. Todos tienen derecho a sindicarse libremente. La ley podrá limitar o exceptuar el ejercicio de este derecho a las Fuerzas o Institutos armados o a los demás Cuerpos sometidos a disciplina militar y regulará las peculiaridades de su ejercicio para los funcionarios públicos.
2. Se reconoce el derecho a la huelga de los trabajadores para la defensa de sus intereses. La ley que regule el ejercicio de este derecho establecerá las garantías precisas para asegurar el mantenimiento de los servicios esenciales de la comunidad.
**Artículo 29**
1. Todos los españoles tendrán el derecho de petición individual y colectiva, por escrito, en la forma y con los efectos que determine la ley.
2. Los miembros de las Fuerzas o Institutos armados o de los Cuerpos sometidos a disciplina militar podrán ejercer este derecho sólo individualmente y con arreglo a lo dispuesto en su legislación específica.
**Sección 2.ª De los derechos y deberes de los ciudadanos**
**Artículo 30**
1. Los españoles tienen el derecho y el deber de defender a España.
2. La ley fijará las obligaciones militares de los españoles y regulará, con las debidas garantías, la objeción de conciencia, así como las demás causas de exención del servicio militar obligatorio, pudiendo imponer, en su caso, una prestación social sustitutoria.
3. Podrá establecerse un servicio civil para el cumplimiento de fines de interés general.
4. Mediante ley podrán regularse los deberes de los ciudadanos en los casos de grave riesgo, catástrofe o calamidad pública.
**Artículo 31**
1. Todos contribuirán al sostenimiento de los gastos públicos de acuerdo con su capacidad económica mediante un sistema tributario justo inspirado en los principios de igualdad y progresividad que, en ningún caso, tendrá alcance confiscatorio.
2. El gasto público realizará una asignación equitativa de los recursos públicos, y su programación y ejecución responderán a los criterios de eficiencia y economía.
3. Sólo podrán establecerse prestaciones personales o patrimoniales de carácter público con arreglo a la ley.
**Artículo 32**
1. El hombre y la mujer tienen derecho a contraer matrimonio con plena igualdad jurídica.
2. La ley regulará las formas de matrimonio, la edad y capacidad para contraerlo, los derechos y deberes de los cónyuges, las causas de separación y disolución y sus efectos.
**Artículo 33**
1. Se reconoce el derecho a la propiedad privada y a la herencia.
2. La función social de estos derechos delimitará su contenido, de acuerdo con las leyes.
3. Nadie podrá ser privado de sus bienes y derechos sino por causa justificada de utilidad pública o interés social, mediante la correspondiente indemnización y de conformidad con lo dispuesto por las leyes.
**Artículo 34**
1. Se reconoce el derecho de fundación para fines de interés general, con arreglo a la ley.
2. Regirá también para las fundaciones lo dispuesto en los apartados 2 y 4 del artículo 22.
**Artículo 35**
1. Todos los españoles tienen el deber de trabajar y el derecho al trabajo, a la libre elección de profesión u oficio, a la promoción a través del trabajo y a una remuneración suficiente para satisfacer sus necesidades y las de su familia, sin que en ningún caso pueda hacerse discriminación por razón de sexo.
2. La ley regulará un estatuto de los trabajadores.
**Artículo 36** La ley regulará las peculiaridades propias del régimen jurídico de los Colegios Profesionales y el ejercicio de las profesiones tituladas. La estructura interna y el funcionamiento de los Colegios deberán ser democráticos.
**Artículo 37**
1. La ley garantizará el derecho a la negociación colectiva laboral entre los representantes de los trabajadores y empresarios, así como la fuerza vinculante de los convenios.
2. Se reconoce el derecho de los trabajadores y empresarios a adoptar medidas de conflicto colectivo. La ley que regule el ejercicio de este derecho, sin perjuicio de las limitaciones que puedan establecer, incluirá las garantías precisas para asegurar el funcionamiento de los servicios esenciales de la comunidad.
**Artículo 38** Se reconoce la libertad de empresa en el marco de la economía de mercado. Los poderes públicos garantizan y protegen su ejercicio y la defensa de la productividad, de acuerdo con las exigencias de la economía general y, en su caso, de la planificación.
**Artículo 52** La ley regulará las organizaciones profesionales que contribuyan a la defensa de los intereses económicos que les sean propios. Su estructura interna y funcionamiento deberán ser democráticos.
**CAPÍTULO CUARTO De las garantías de las libertades y derechos fundamentales**
**Artículo 53**
1. Los derechos y libertades reconocidos en el Capítulo segundo del presente Título vinculan a todos los poderes públicos. Solo por ley, que en todo caso deberá respetar su contenido esencial, podrá regularse el ejercicio de tales derechos y libertades, que se tutelarán de acuerdo con lo previsto en el artículo 161, 1, a).
2. Cualquier ciudadano podrá recabar la tutela de las libertades y derechos reconocidos en el artículo 14 y la Sección primera del Capítulo segundo ante los Tribunales ordinarios por un procedimiento basado en los principios de preferencia y sumariedad y, en su caso, a través del recurso de amparo ante el Tribunal Constitucional. Este último recurso será aplicable a la objeción de conciencia reconocida en el artículo 30.
3. El reconocimiento, el respeto y la protección de los principios reconocidos en el Capítulo tercero informarán la legislación positiva, la práctica judicial y la actuación de los poderes públicos. Solo podrán ser alegados ante la Jurisdicción ordinaria de acuerdo con lo que dispongan las leyes que los desarrollen.
**Artículo 54** Una ley orgánica regulará la institución del Defensor del Pueblo, como alto comisionado de las Cortes Generales, designado por éstas para la defensa de los derechos comprendidos en este Título, a cuyo efecto podrá supervisar la actividad de la Administración, dando cuenta a las Cortes Generales.
### Su garantía y suspensión
**Artículo 55**
1. Los derechos reconocidos en los artículos 17, 18, apartados 2 y 3, artículos 19, 20, apartados 1, a) y d), y 5, artículos 21, 28, apartado 2, y artículo 37, apartado 2, podrán ser suspendidos cuando se acuerde la declaración del estado de excepción o de sitio en los términos previstos en la Constitución. Se exceptúa de lo establecido anteriormente el apartado 3 del artículo 17 para el supuesto de declaración de estado de excepción.
2. Una ley orgánica podrá determinar la forma y los casos en los que, de forma individual y con la necesaria intervención judicial y el adecuado control parlamentario, los derechos reconocidos en los artículos 17, apartado 2, y 18, apartados 2 y 3, pueden ser suspendidos para personas determinadas, en relación con las investigaciones correspondientes a la actuación de bandas armadas o elementos terroristas. La utilización injustificada o abusiva de las facultades reconocidas en dicha ley orgánica producirá responsabilidad penal, como violación de los derechos y libertades reconocidos por las leyes.
**Artículo 116**
1. Una ley orgánica regulará los estados de alarma, de excepción y de sitio, y las competencias y limitaciones correspondientes.
2. El estado de alarma será declarado por el Gobierno mediante decreto acordado en Consejo de Ministros por un plazo máximo de quince días, dando cuenta al Congreso de los Diputados, reunido inmediatamente al efecto y sin cuya autorización no podrá ser prorrogado dicho plazo. El decreto determinará el ámbito territorial a que se extienden los efectos de la declaración.
3. El estado de excepción será declarado por el Gobierno mediante decreto acordado en Consejo de Ministros, previa autorización del Congreso de los Diputados. La autorización y proclamación del estado de excepción deberá determinar expresamente los efectos del mismo, el ámbito territorial a que se extiende y su duración, que no podrá exceder de treinta días, prorrogables por otro plazo igual, con los mismos requisitos.
4. El estado de sitio será declarado por la mayoría absoluta del Congreso de los Diputados, a propuesta exclusiva del Gobierno. El Congreso determinará su ámbito territorial, duración y condiciones.
5. No podrá procederse a la disolución del Congreso mientras estén declarados algunos de los estados comprendidos en el presente artículo, quedando automáticamente convocadas las Cámaras si no estuvieren en período de sesiones. Su funcionamiento, así como el de los demás poderes constitucionales del Estado, no podrán interrumpirse durante la vigencia de estos estados.
6. Disuelto el Congreso o expirado su mandato, si se produjere alguna de las situaciones que dan lugar a cualquiera de dichos estados, las competencias del Congreso serán asumidas por su Diputación Permanente.
7. La declaración de los estados de alarma, de excepción y de sitio no modificarán el principio de responsabilidad del Gobierno y de sus agentes reconocidos en la Constitución y en las leyes.
### La Corona: Funciones Constitucionales del Rey
**Título II De la Corona (arts. 56-65)**.
**Artículo 56**
1. **El Rey es el Jefe del Estado, símbolo de su unidad y permanencia, arbitra y modera el funcionamiento regular de las instituciones, asume la más alta representación del Estado español en las relaciones internacionales, especialmente con las naciones de su comunidad histórica, y ejerce las funciones que le atribuyen expresamente la Constitución y las leyes.**
2. **Su título es el de Rey de España y podrá utilizar los demás que correspondan a la Corona.**
3. **La persona del Rey es inviolable y no está sujeta a responsabilidad. Sus actos estarán siempre refrendados en la forma establecida en el artículo 64, careciendo de validez sin dicho refrendo, salvo lo dispuesto en el artículo 65, 2.**
**Artículo 57**
1. La Corona de España es hereditaria en los sucesores de S. M. Don Juan Carlos I de Borbón, legítimo heredero de la dinastía histórica. La sucesión en el trono seguirá el orden regular de primogenitura y representación, siendo preferida siempre la línea anterior a las posteriores; en la misma línea, el grado más próximo al más remoto; en el mismo grado, el varón a la mujer, y en el mismo sexo, la persona de más edad a la de menos.
2. El Príncipe heredero, desde su nacimiento o desde que se produzca el hecho que origine el llamamiento, tendrá la dignidad de Príncipe de Asturias y los demás títulos vinculados tradicionalmente al sucesor de la Corona de España.
3. Extinguidas todas las líneas llamadas en Derecho, las Cortes Generales proveerán a la sucesión en la Corona en la forma que más convenga a los intereses de España.
4. Aquellas personas que teniendo derecho a la sucesión en el trono contrajeren matrimonio contra la expresa prohibición del Rey y de las Cortes Generales, quedarán excluidas en la sucesión a la Corona por sí y sus descendientes.
5. Las abdicaciones y renuncias y cualquier duda de hecho o de derecho que ocurra en el orden de sucesión a la Corona se resolverán por una ley orgánica.
**Artículo 58** La Reina consorte o el consorte de la Reina no podrán asumir funciones constitucionales, salvo lo dispuesto para la Regencia.
**Artículo 59**
1. Cuando el Rey fuere menor de edad, el padre o la madre del Rey y, en su defecto, el pariente mayor de edad más próximo a suceder en la Corona, según el orden establecido en la Constitución, entrará a ejercer inmediatamente la Regencia y la ejercerá durante el tiempo de la minoría de edad del Rey.
2. Si el Rey se inhabilitare para el ejercicio de su autoridad y la imposibilidad fuere reconocida por las Cortes Generales, entrará a ejercer inmediatamente la Regencia el Príncipe heredero de la Corona, si fuere mayor de edad. Si no lo fuere, se procederá de la manera prevista en el apartado anterior, hasta que el Príncipe heredero alcance la mayoría de edad.
3. Si no hubiere ninguna persona a quien corresponda la Regencia, ésta será nombrada por las Cortes Generales, y se compondrá de una, tres o cinco personas.
4. Para ejercer la Regencia es preciso ser español y mayor de edad.
5. La Regencia se ejercerá por mandato constitucional y siempre en nombre del Rey.
**Artículo 60**
1. Será tutor del Rey menor la persona que en su testamento hubiese nombrado el Rey difunto, siempre que sea mayor de edad y español de nacimiento; si no lo hubiese nombrado, será tutor el padre o la madre mientras permanezcan viudos. En su defecto, lo nombrarán las Cortes Generales, pero no podrán acumularse los cargos de Regente y de tutor sino en el padre, madre o ascendientes directos del Rey.
2. El ejercicio de la tutela es también incompatible con el de todo cargo o representación política.
**Artículo 61**
1. El Rey, al ser proclamado ante las Cortes Generales, prestará juramento de desempeñar fielmente sus funciones, guardar y hacer guardar la Constitución y las leyes y respetar los derechos de los ciudadanos y de las Comunidades Autónomas.
2. El Príncipe heredero, al alcanzar la mayoría de edad, y el Regente o Regentes al hacerse cargo de sus funciones, prestarán el mismo juramento, así como el de fidelidad al Rey.
**Artículo 62**
Corresponde al Rey:
1. Sancionar y promulgar las leyes.
2. Convocar y disolver las Cortes Generales y convocar elecciones en los términos previstos en la Constitución.
3. Convocar a referéndum en los casos previstos en la Constitución.
4. Proponer el candidato a Presidente del Gobierno y, en su caso, nombrarlo, así como poner fin a sus funciones en los términos previstos en la Constitución.
5. Nombrar y separar a los miembros del Gobierno, a propuesta de su Presidente.
6. Expedir los decretos acordados en el Consejo de Ministros, conferir los empleos civiles y militares y conceder honores y distinciones con arreglo a las leyes.
7. Ser informado de los asuntos de Estado y presidir, a estos efectos, las sesiones del Consejo de Ministros, cuando lo estime oportuno, a petición del Presidente del Gobierno.
8. El mando supremo de las Fuerzas Armadas.
9. Ejercer el derecho de gracia con arreglo a la ley, que no podrá autorizar indultos generales.
10. El Alto Patronazgo de las Reales Academias.
**Artículo 63**
1. El Rey acredita a los embajadores y otros representantes diplomáticos. Los representantes extranjeros en España están acreditados ante él.
2. Al Rey corresponde manifestar el consentimiento del Estado para obligarse internacionalmente por medio de tratados, de conformidad con la Constitución y las leyes.
3. Al Rey corresponde, previa autorización de las Cortes Generales, declarar la guerra y hacer la paz.
**Artículo 64**
1. Los actos del Rey serán refrendados por el Presidente del Gobierno y, en su caso, por los Ministros competentes. La propuesta y el nombramiento del Presidente del Gobierno, y la disolución prevista en el artículo 99, serán refrendados por el Presidente del Congreso.
2. De los actos del Rey serán responsables las personas que los refrenden.
**Artículo 65**
1. El Rey recibe de los Presupuestos del Estado una cantidad global para el sostenimiento de su Familia y Casa, y distribuye libremente la misma.
2. El Rey nombra y releva libremente a los miembros civiles y militares de su Casa.
Perfecto, lo he visto claro 👍
Te dejo el bloque de la Reforma Constitucional ya integrado dentro del Tema 1, con la misma numeración, tono y estilo que llevas, para que lo pegues directamente sin romper coherencia.
👉 Mi recomendación es colocarlo después de la estructura de la Constitución y antes de entrar en el desarrollo detallado del Título I, porque así “cierras” la visión general de la CE.
</body>
</html>

View File

@ -8,7 +8,7 @@ Todo lo que hacen los poderes públicos —Gobierno, Cortes Generales, jueces, a
Su finalidad es **organizar el Estado**, **garantizar la convivencia**, asegurar la **libertad**, la **igualdad**, y reconocer un sistema político basado en el **pluralismo** y la **participación ciudadana**.
**Características de la constitución**: Escrita y codificada, extensa, origen popular, rígida, Consensuada y elástica, abierta e inacabada.
**Características de la constitución**: Escrita y codificada, extensa, origen popular, rígida, Consensuada y elástica, abierta e inacabada, monárquica,
### *1.1. Estructura de la Constitución Española*
@ -515,7 +515,3 @@ Corresponde al Rey:
1. El Rey recibe de los Presupuestos del Estado una cantidad global para el sostenimiento de su Familia y Casa, y distribuye libremente la misma.
2. El Rey nombra y releva libremente a los miembros civiles y militares de su Casa.
Perfecto, lo he visto claro 👍
Te dejo el bloque de la Reforma Constitucional ya integrado dentro del Tema 1, con la misma numeración, tono y estilo que llevas, para que lo pegues directamente sin romper coherencia.
👉 Mi recomendación es colocarlo después de la estructura de la Constitución y antes de entrar en el desarrollo detallado del Título I, porque así “cierras” la visión general de la CE.

View File

@ -1,231 +1,6 @@
# 1. La Constitución Española de 1978. Derechos y deberes fundamentales. Su garantía y suspensión. La Corona: funciones constitucionales del Rey.
### Introducción a la Constitución Española
La Constitución Española de 1978 es **la norma suprema** de nuestro ordenamiento jurídico. Entró en vigor el **29 de diciembre de 1978** y simboliza la transición de España hacia un sistema democrático después de un periodo histórico complejo.
Todo lo que hacen los poderes públicos —Gobierno, Cortes Generales, jueces, administraciones— debe respetar esta Constitución.
Su finalidad es **organizar el Estado**, **garantizar la convivencia**, asegurar la **libertad**, la **igualdad**, y reconocer un sistema político basado en el **pluralismo** y la **participación ciudadana**.
**Características de la constitución**: Escrita y codificada, extensa, origen popular, rígida, Consensuada y elástica, abierta e inacabada, monárquica,
### *1.1. Estructura de la Constitución Española*
La Constitución está perfectamente organizada para facilitar el entendimiento del Estado y de los derechos ciudadanos.
| **Titulo** | **Nombre** | **Artículos** |
| --- | --- | --- |
| | Preámbulo | |
| | Título preliminar | 1-9 |
| 1 | De los derechos y deberes fundamentales | 10-55 |
| 2 | De la Corona | 56-55 |
| 3 | De las Cortes Generales | 66-96 |
| 4 | Del Gobierno y la Administración | 97-107 |
| 5 | De la relación entre el Gobierno y las Cortes Generales | 108-116 |
| 6 | Del Poder Judicial | 117-127 |
| 7 | Economía y Hacienda | 128-135 |
| 8 | La Organización Territorial del Estado | 137-158 |
| 9 | El Tribunal Constitucional | 159-165 |
| 10 | De la Reforma Constitucional | 166-169 |
| | Disposiciones adicionales | |
| | Disposiciones transitorias | |
| | Disposiciones derogatorias | |
| | Disposiciones finales | |
*Preámbulo*
No tiene valor jurídico, pero expresa los principios inspiradores: convivencia, justicia, libertad, seguridad y promoción del bienestar.
*Diez Títulos (arts. 10-169):*
- Título 1: De los Derechos y deberes fundamentales
- De los españoles y los extranjeros
- Derechos y libertades
- De los derechos fundamentales y libertades púbicas
- De los derechos y deberes de los ciudadanos
- De los principios rectores de la política social y económica
- De las garantías de las libertades y derechos fundamentales
- De la suspensión de los derechos y libertades
- Título 2: De la Corona
- Título 3: De las Cortes Generales
- De las cámaras
- De la elaboración de las leyes
- De los tratados internacionales
- Título 4: Del Gobierno y de la Administración
- Título 5: De las Relaciones entre el Gobierno y las Cortes Generales
- Título 6: Del Poder Judicial
- Título 7: Economía y Hacienda
- Título 8: De la Organización territorial del Estado
- Principios Generales
- De la Administración local
- De las comunidades autónomas
- Título 9: Tribunal Constitucional
- Título 10: Reforma constitucional
**● Disposiciones Adicionales, Transitorias, Derogatoria y Final.**
Son normas complementarias para adaptaciones legales y organización del territorio (por ejemplo, régimen foral vasco y navarro).
# TÍTULO I DE LA CONSTITUCIÓN ESPAÑOLA
## Derechos y deberes fundamentales
### 🔹 Capítulo Segundo · Derechos y libertades (Arts. 1438)
#### Sección 1.ª: Derechos FUNDAMENTALES y libertades públicas (Arts. 1529 CE)
| Artículo | Derecho FUNDAMENTAL |
| :--- | :--- |
| **15** | Derecho a la vida e integridad física y moral |
| **16** | Libertad ideológica, religiosa y de culto |
| **17** | Derecho a la libertad y a la seguridad |
| **18.1** | Derecho al honor, a la intimidad y a la propia imagen |
| **18.2** | Inviolabilidad del domicilio |
| **18.3** | Secreto de las comunicaciones |
| **18.4** | **Protección de datos (uso de la informática)** |
| **19** | Libre elección de residencia y circulación |
| **20** | Libertad de expresión y creación |
| **21** | Derecho de reunión |
| **22** | Derecho de asociación |
| **23** | Participación en asuntos públicos y acceso a cargos públicos |
| **24** | Tutela judicial efectiva |
| **25** | Legalidad penal y sancionadora |
| **26** | Prohibición de Tribunales de Honor |
| **27** | Derecho a la educación y libertad de enseñanza | |
| **28** | Libertad sindical y derecho de huelga |
| **29** | Derecho de petición |
> **Claves de examen TAI:**
> - **Protección reforzada (art. 53.2 CE):** Procedimiento basado en principios de preferencia y sumariedad.
> - **Recurso de amparo** ante el Tribunal Constitucional.
> - Desarrollo mediante **Ley Orgánica**.
> - *Nota:* El Art. 18.4 es fundamental para el bloque de informática de la oposición.
#### Sección 2.ª: Derechos y deberes de los ciudadanos (Arts. 3038 CE)
| Artículo | Derecho / Deber (NO FUNDAMENTALES) |
| :--- | :--- |
| **30** | Derecho y deber de defender España |
| **31** | Deber de contribuir a los gastos públicos |
| **32** | Derecho a contraer matrimonio |
| **33** | Derecho a la propiedad privada y a la herencia |
| **34** | Derecho de fundación |
| **35** | Derecho y deber al trabajo |
| **36** | Colegios profesionales |
| **37** | Negociación colectiva y conflicto colectivo |
| **38** | Libertad de empresa |
> **Claves de examen:**
> - **No** son derechos fundamentales.
> - **No** tienen recurso de amparo.
> - Se regulan por **Ley Ordinaria**.
### 🔹 Capítulo Tercero: Principios rectores de la política social y económica (Arts. 3952 CE)
*No son derechos subjetivos exigibles directamente.*
| Artículo | Materia |
| :--- | :--- |
| **39** | Protección de la familia |
| **40** | Progreso social y económico |
| **41** | Seguridad Social |
| **43** | Protección de la salud |
| **44** | Acceso a la cultura |
| **45** | Medio ambiente |
| **47** | Vivienda digna |
| **49** | Protección de las personas con discapacidad |
| **50** | Pensiones |
| **51** | Defensa de consumidores y usuarios |
| **52** | Organizaciones profesionales |
> **Notas para el examen:**
> - Informan la legislación y la actuación de los poderes públicos.
> - **No hay amparo constitucional**.
> - Solo son alegables según leyes de desarrollo.
### Reforma de la constitucion
#### X. La reforma de la Constitución Española
La Constitución Española prevé su propia modificación mediante procedimientos especiales regulados en el **Título X (arts. 166 a 169 CE)**.
Se trata de un procedimiento **rígido**, con garantías reforzadas para proteger los elementos esenciales del sistema constitucional.
---
#### 1. Iniciativa de la reforma constitucional (art. 166 CE)
La iniciativa de reforma corresponde a los mismos sujetos que la iniciativa legislativa ordinaria:
- El **Gobierno**
- El **Congreso de los Diputados**
- El **Senado**
- Las **Asambleas Legislativas de las Comunidades Autónomas**
📌 *Nota de examen*:
Las Comunidades Autónomas **sí pueden iniciar** una reforma constitucional.
---
#### 2. Tipos de procedimiento de reforma
La Constitución distingue **dos procedimientos** de reforma:
| Procedimiento | Artículo | Ámbito de aplicación |
|---------------|----------|---------------------|
| Ordinario | Art. 167 CE | Regla general |
| Agravado | Art. 168 CE | Reformas especialmente sensibles |
---
#### 3. Procedimiento ordinario de reforma (art. 167 CE)
Se aplica a la **mayoría de los preceptos constitucionales**.
**Requisitos:**
- Aprobación por **mayoría de 3/5** en **cada Cámara**
- Si no hay acuerdo → **Comisión Mixta CongresoSenado**
- Si persiste el desacuerdo → el **Congreso puede aprobar por 2/3**
- **Referéndum opcional**, solo si lo solicita **1/10 de diputados o senadores**
📌 *Clave de examen*:
No todas las reformas constitucionales exigen referéndum.
---
#### 4. Procedimiento agravado de reforma (art. 168 CE)
Se aplica cuando la reforma afecta a:
- El **Título Preliminar**
- La **Sección 1.ª del Capítulo II del Título I** (derechos fundamentales)
- El **Título II (La Corona)**
- La **revisión total** de la Constitución
**Fases obligatorias:**
1. Aprobación por **2/3 de cada Cámara**
2. **Disolución inmediata de las Cortes Generales**
3. Nuevas Cortes → nueva aprobación por **2/3**
4. **Referéndum obligatorio**
📌 *Muy preguntado*:
En el procedimiento agravado el referéndum es **siempre obligatorio**.
---
#### 5. Límites temporales a la reforma constitucional (art. 169 CE)
No podrá iniciarse la reforma constitucional cuando esté declarado alguno de los siguientes estados:
- **Estado de alarma**
- **Estado de excepción**
- **Estado de sitio**
---
### *1. TÍTULO PRELIMINAR*
## *1. TÍTULO PRELIMINAR*
**Artículo 1**
@ -248,7 +23,7 @@ No podrá iniciarse la reforma constitucional cuando esté declarado alguno de l
**Artículo 5** La capital del Estado es la villa de Madrid.
### Derechos y deberes fundamentales
## Derechos y deberes fundamentales
### *Titulo 1. De los derechos y deberes fundamentales*
@ -304,7 +79,8 @@ Todos tienen derecho a la vida y a la integridad física y moral, sin que, en ni
3. Se garantiza el secreto de las comunicaciones y, en especial, de las postales, telegráficas y telefónicas, salvo resolución judicial.
4. La ley limitará el uso de la informática para garantizar el honor y la intimidad personal y familiar de los ciudadanos y el pleno ejercicio de sus derechos.
### **Artículo 19** Los españoles tienen derecho a elegir libremente su residencia y a circular por el territorio nacional. Asimismo, tienen derecho a entrar y salir libremente de España en los términos que la ley establezca. Este derecho no podrá ser limitado por motivos políticos o ideológicos.
### **Artículo 19**
Los españoles tienen derecho a elegir libremente su residencia y a circular por el territorio nacional. Asimismo, tienen derecho a entrar y salir libremente de España en los términos que la ley establezca. Este derecho no podrá ser limitado por motivos políticos o ideológicos.
### **Artículo 20**
@ -446,7 +222,7 @@ Todos tienen derecho a la vida y a la integridad física y moral, sin que, en ni
6. Disuelto el Congreso o expirado su mandato, si se produjere alguna de las situaciones que dan lugar a cualquiera de dichos estados, las competencias del Congreso serán asumidas por su Diputación Permanente.
7. La declaración de los estados de alarma, de excepción y de sitio no modificarán el principio de responsabilidad del Gobierno y de sus agentes reconocidos en la Constitución y en las leyes.
### La Corona: Funciones Constitucionales del Rey
## La Corona: Funciones Constitucionales del Rey
**Título II De la Corona (arts. 56-65)**.
@ -464,7 +240,8 @@ Todos tienen derecho a la vida y a la integridad física y moral, sin que, en ni
4. Aquellas personas que teniendo derecho a la sucesión en el trono contrajeren matrimonio contra la expresa prohibición del Rey y de las Cortes Generales, quedarán excluidas en la sucesión a la Corona por sí y sus descendientes.
5. Las abdicaciones y renuncias y cualquier duda de hecho o de derecho que ocurra en el orden de sucesión a la Corona se resolverán por una ley orgánica.
**Artículo 58** La Reina consorte o el consorte de la Reina no podrán asumir funciones constitucionales, salvo lo dispuesto para la Regencia.
**Artículo 58**
La Reina consorte o el consorte de la Reina no podrán asumir funciones constitucionales, salvo lo dispuesto para la Regencia.
**Artículo 59**
@ -513,9 +290,4 @@ Corresponde al Rey:
**Artículo 65**
1. El Rey recibe de los Presupuestos del Estado una cantidad global para el sostenimiento de su Familia y Casa, y distribuye libremente la misma.
2. El Rey nombra y releva libremente a los miembros civiles y militares de su Casa.
Perfecto, lo he visto claro 👍
Te dejo el bloque de la Reforma Constitucional ya integrado dentro del Tema 1, con la misma numeración, tono y estilo que llevas, para que lo pegues directamente sin romper coherencia.
👉 Mi recomendación es colocarlo después de la estructura de la Constitución y antes de entrar en el desarrollo detallado del Título I, porque así “cierras” la visión general de la CE.
2. El Rey nombra y releva libremente a los miembros civiles y militares de su Casa.

View File

@ -0,0 +1,287 @@
## Bloque 1 Tema 1. La Constitución Española de 1978. Derechos y deberes fundamentales. Garantía y suspensión. La Corona
Introducción
La Constitución Española de 1978 es la norma suprema del ordenamiento jurídico español.
Establece la organización del Estado, los derechos y deberes de los ciudadanos y los principios básicos del sistema político.
Es un tema fundamental en la oposición TAI y aparece de forma recurrente en el examen.
---
## 1. La Constitución Española de 1978
La Constitución fue aprobada por las Cortes Generales el 31 de octubre de 1978.
Fue ratificada en referéndum el 6 de diciembre de 1978.
Fue sancionada por el Rey el 27 de diciembre de 1978.
Entró en vigor el 29 de diciembre de 1978.
---
### 1.1 Características
La Constitución Española presenta las siguientes características.
Es una Constitución escrita y codificada.
Es una Constitución rígida, ya que su reforma requiere procedimientos especiales.
Es una Constitución democrática.
Establece un Estado social y democrático de Derecho.
Reconoce la soberanía nacional en el pueblo español.
Establece una monarquía parlamentaria como forma política del Estado.
---
### 1.2 Estructura
La Constitución se estructura en.
Un preámbulo.
Un título preliminar.
Diez títulos numerados del uno al diez.
Disposiciones adicionales, transitorias, derogatoria y finales.
---
Importante para examen
El Título Preliminar abarca los artículos 1 a 9.
---
## 2. Derechos y deberes fundamentales
Se regulan en el Título primero de la Constitución, artículos 10 a 55.
---
### 2.1 Clasificación de los derechos
Los derechos se clasifican en varios grupos.
---
Derechos fundamentales y libertades públicas.
Se recogen en los artículos 15 a 29.
Tienen máxima protección.
---
Derechos y deberes de los ciudadanos.
Se recogen en los artículos 30 a 38.
---
Principios rectores de la política social y económica.
Se recogen en los artículos 39 a 52.
---
### 2.2 Derechos fundamentales más importantes
Derecho a la vida y a la integridad física.
Libertad ideológica y religiosa.
Derecho a la libertad y seguridad.
Derecho al honor, intimidad y propia imagen.
Inviolabilidad del domicilio.
Secreto de las comunicaciones.
Libertad de expresión.
Derecho de reunión.
Derecho de asociación.
Derecho de participación política.
Derecho a la tutela judicial efectiva.
Derecho a la educación.
Derecho de sindicación y huelga.
---
### 2.3 Deberes fundamentales
Entre los deberes destacan.
Defensa de España.
Contribuir al sostenimiento de los gastos públicos mediante impuestos.
---
Importante para examen
Los derechos fundamentales están especialmente protegidos frente a los poderes públicos.
---
## 3. Garantía de los derechos
La Constitución establece mecanismos para garantizar los derechos.
---
### 3.1 Garantías jurisdiccionales
Los ciudadanos pueden acudir a los tribunales para defender sus derechos.
El recurso más importante es el recurso de amparo ante el Tribunal Constitucional.
---
### 3.2 Procedimiento preferente y sumario
Se utiliza para proteger los derechos fundamentales.
Es rápido y prioritario.
---
### 3.3 Defensor del Pueblo
Es el alto comisionado de las Cortes Generales.
Defiende los derechos de los ciudadanos frente a la Administración.
---
### 3.4 Tribunal Constitucional
Es el intérprete supremo de la Constitución.
Controla la constitucionalidad de las leyes.
---
Importante para examen
El recurso de amparo protege los derechos fundamentales de los artículos 14 a 29.
---
## 4. Suspensión de los derechos
En determinadas situaciones, algunos derechos pueden suspenderse.
---
### 4.1 Suspensión general
Se produce en estados excepcionales.
Estado de alarma.
Estado de excepción.
Estado de sitio.
---
### 4.2 Suspensión individual
Puede afectar a personas concretas en casos de terrorismo.
---
Importante para examen
No todos los derechos pueden suspenderse.
---
## 5. La Corona
La Corona es una institución constitucional.
El Rey es el Jefe del Estado.
Representa la unidad y permanencia del Estado.
---
### 5.1 Funciones del Rey
Las funciones del Rey son principalmente simbólicas y representativas.
---
Sancionar y promulgar las leyes.
Convocar y disolver las Cortes Generales.
Convocar elecciones.
Proponer candidato a Presidente del Gobierno.
Nombrar y cesar al Presidente del Gobierno.
Nombrar a los ministros.
Expedir decretos.
Ejercer el mando supremo de las Fuerzas Armadas.
Representar al Estado en las relaciones internacionales.
---
Importante para examen
Los actos del Rey deben ser refrendados por el Gobierno.
---
### 5.2 Refrendo
El refrendo implica que otra autoridad asume la responsabilidad de los actos del Rey.
Normalmente lo realiza el Presidente del Gobierno o los ministros.
---
Idea clave
El Rey no es responsable políticamente.
La responsabilidad recae en quien refrenda.
---
## Resumen final del tema
La Constitución Española de 1978 es la norma suprema del ordenamiento jurídico.
Establece un Estado social y democrático de Derecho.
Los derechos fundamentales se recogen en el Título primero.
Existen mecanismos de garantía como el recurso de amparo.
Los derechos pueden suspenderse en situaciones excepcionales.
El Rey es el Jefe del Estado con funciones representativas.
Sus actos deben ser refrendados por el Gobierno.

View File

@ -0,0 +1,584 @@
# 2. Las Cortes Generales: atribuciones del Congreso de los Diputados y del Senado. El Tribunal Constitucional: composición y atribuciones. El Defensor del Pueblo
## Las Cortes Generales: atribuciones del Congreso de los Diputados y del Senado.
**Titulo 3 de la CE: De las Cortes Generales (artículos del 66 al 96)**
**Artículo 66**
1. Las Cortes Generales representan al pueblo español y están formadas por el Congreso de los Diputados y el Senado.
2. Las Cortes Generales ejercen la potestad legislativa del Estado, aprueban sus Presupuestos, controlan la acción del Gobierno y tienen las demás competencias que les atribuya la Constitución.
3. Las Cortes Generales son inviolables.
**Artículo 67.**
1. Nadie podrá ser miembro de las dos Cámaras simultáneamente, ni acumular el acta de una Asamblea de Comunidad Autónoma con la de Diputado al Congreso.
2. Los miembros de las Cortes Generales no estarán ligados por mandato imperativo.
3. Las reuniones de Parlamentarios que se celebren sin convocatoria reglamentaria no vincularán a las Cámaras, y no podrán ejercer sus funciones ni ostentar sus privilegios.
**Artículo 68.**
1. El Congreso se compone de un mínimo de 300 y un máximo de 400 Diputados, elegidos por sufragio universal, libre, igual, directo y secreto, en los términos que establezca la ley.
2. La circunscripción electoral es la provincia. Las poblaciones de Ceuta y Melilla estarán representadas cada una de ellas por un Diputado. La ley distribuirá el número total de Diputados, asignando una representación mínima inicial a cada circunscripción y distribuyendo los demás en proporción a la población.
3. La elección se verificará en cada circunscripción atendiendo a criterios de representación proporcional.
4. El Congreso es elegido por cuatro años. El mandato de los Diputados termina cuatro años después de su elección o el día de la disolución de la Cámara.
5. Son electores y elegibles todos los españoles que estén en pleno uso de sus derechos políticos. La ley reconocerá y el Estado facilitará el ejercicio del derecho de sufragio a los españoles que se encuentren fuera del territorio de España.
6. Las elecciones tendrán lugar entre los treinta días y sesenta días desde la terminación del mandato. El Congreso electo deberá ser convocado dentro de los veinticinco días siguientes a la celebración de las elecciones.
**Artículo 69.**
1. El Senado es la Cámara de representación territorial.
2. En cada provincia se elegirán cuatro Senadores por sufragio universal, libre, igual, directo y secreto por los votantes de cada una de ellas, en los términos que señale una ley orgánica.
3. En las provincias insulares, cada isla o agrupación de ellas, con Cabildo o Consejo Insular, constituirá una circunscripción a efectos de elección de Senadores, correspondiendo tres a cada una de las islas mayores Gran Canaria, Mallorca y Tenerife y uno a cada una de las siguientes islas o agrupaciones: Ibiza-Formentera, Menorca, Fuerteventura, Gomera, Hierro, Lanzarote y La Palma.
4. Las poblaciones de Ceuta y Melilla elegirán cada una de ellas dos Senadores.
5. Las Comunidades Autónomas designarán además un Senador y otro más por cada millón de habitantes de su respectivo territorio. La designación corresponderá a la Asamblea legislativa o, en su defecto, al órgano colegiado superior de la Comunidad Autónoma, de acuerdo con lo que establezcan los Estatutos, que asegurarán, en todo caso, la adecuada representación proporcional.
6. El Senado es elegido por cuatro años. El mandato de los Senadores termina cuatro años después de su elección o el día de la disolución de la Cámara.
**Artículo 70.**
1. La ley electoral determinará las causas de inelegibilidad e incompatibilidad de los Diputados y Senadores, que comprenderán, en todo caso:
1. A los componentes del Tribunal Constitucional.
2. A los altos cargos de la Administración del Estado que determine la ley, con la excepción de los miembros del Gobierno.
3. Al Defensor del Pueblo.
4. A los Magistrados, Jueces y Fiscales en activo.
5. A los militares profesionales y miembros de las Fuerzas y Cuerpos de Seguridad y Policía en activo.
6. A los miembros de las Juntas Electorales.
2. La validez de las actas y credenciales de los miembros de ambas Cámaras estará sometida al control judicial, en los términos que establezca la ley electoral.
**Artículo 71.**
1. Los Diputados y Senadores gozarán de inviolabilidad por las opiniones manifestadas en el ejercicio de sus funciones.
2. 2. Durante el período de su mandato los Diputados y Senadores gozarán asimismo de inmunidad y sólo podrán ser detenidos en caso de flagrante delito. No podrán ser inculpados ni procesados sin la previa autorización de la Cámara respectiva.
3. En las causas contra Diputados y Senadores será competente la Sala de lo Penal del Tribunal Supremo.
4. Los Diputados y Senadores percibirán una asignación que será fijada por las respectivas Cámaras.
**Artículo 72.**
1. Las Cámaras establecen sus propios Reglamentos, aprueban autónomamente sus presupuestos y, de común acuerdo, regulan el Estatuto del Personal de las Cortes Generales. Los Reglamentos y su reforma serán sometidos a una votación final sobre su totalidad, que requerirá la mayoría absoluta.
2. Las Cámaras eligen sus respectivos Presidentes y los demás miembros de sus Mesas. Las sesiones conjuntas serán presididas por el Presidente del Congreso y se regirán por un Reglamento de las Cortes Generales aprobado por mayoría absoluta de cada Cámara.
3. Los Presidentes de las Cámaras ejercen en nombre de las mismas todos los poderes administrativos y facultades de policía en el interior de sus respectivas sedes.
**Artículo 73.**
1. Las Cámaras se reunirán anualmente en dos períodos ordinarios de sesiones: el primero, de septiembre a diciembre, y el segundo, de febrero a junio.
2. Las Cámaras podrán reunirse en sesiones extraordinarias a petición del Gobierno, de la Diputación Permanente o de la mayoría absoluta de los miembros de cualquiera de las Cámaras. Las sesiones extraordinarias deberán convocarse sobre un orden del día determinado y serán clausuradas una vez que éste haya sido agotado.
**Artículo 74.**
1. Las Cámaras se reunirán en sesión conjunta para ejercer las competencias no legislativas que el Título II atribuye expresamente a las Cortes Generales.
2. Las decisiones de las Cortes Generales previstas en los artículos 94, 1, 145, 2 y 158, 2, se adoptarán por mayoría de cada una de las Cámaras. En el primer caso, el procedimiento se iniciará por el Congreso, y en los otros dos, por el Senado. En ambos casos, si no hubiera acuerdo entre Senado y Congreso, se intentará obtener por una Comisión Mixta compuesta de igual número de Diputados y Senadores. La Comisión presentará un texto que será votado por ambas Cámaras. Si no se aprueba en la forma establecida, decidirá el Congreso por mayoría absoluta.
**Artículo 75.**
1. Las Cámaras funcionarán en Pleno y por Comisiones.
2. Las Cámaras podrán delegar en las Comisiones Legislativas Permanentes la aprobación de proyectos o proposiciones de ley. El Pleno podrá, no obstante, recabar en cualquier momento el debate y votación de cualquier proyecto o proposición de ley que haya sido objeto de esta delegación.
3. Quedan exceptuados de lo dispuesto en el apartado anterior la reforma constitucional, las cuestiones internacionales, las leyes orgánicas y de bases y los Presupuestos Generales del Estado.
**Artículo 76.**
1. El Congreso y el Senado, y, en su caso, ambas Cámaras conjuntamente, podrán nombrar Comisiones de investigación sobre cualquier asunto de interés público. Sus conclusiones no serán vinculantes para los Tribunales, ni afectarán a las resoluciones judiciales, sin perjuicio de que el resultado de la investigación sea comunicado al Ministerio Fiscal para el ejercicio, cuando proceda, de las acciones oportunas.
2. Será obligatorio comparecer a requerimiento de las Cámaras. La ley regulará las sanciones que puedan imponerse por incumplimiento de esta obligación.
**Artículo 77.**
1. Las Cámaras pueden recibir peticiones individuales y colectivas, siempre por escrito, quedando prohibida la presentación directa por manifestaciones ciudadanas.
2. Las Cámaras pueden remitir al Gobierno las peticiones que reciban. El Gobierno está obligado a explicarse sobre su contenido, siempre que las Cámaras lo exijan.
**Artículo 78.**
1. En cada Cámara habrá una Diputación Permanente compuesta por un mínimo de veintiún miembros, que representarán a los grupos parlamentarios, en proporción a su importancia numérica.
2. Las Diputaciones Permanentes estarán presididas por el Presidente de la Cámara respectiva y tendrán como funciones la prevista en el artículo 73, la de asumir las facultades que correspondan a las Cámaras, de acuerdo con los artículos 86 y 116, en caso de que éstas hubieren sido disueltas o hubiere expirado su mandato y la de velar por los poderes de las Cámaras cuando éstas no estén reunidas.
3. Expirado el mandato o en caso de disolución, las Diputaciones Permanentes seguirán ejerciendo sus funciones hasta la constitución de las nuevas Cortes Generales.
4. Reunida la Cámara correspondiente, la Diputación Permanente dará cuenta de los asuntos tratados y de sus decisiones.
**Artículo 79.**
1. Para adoptar acuerdos, las Cámaras deben estar reunidas reglamentariamente y con asistencia de la mayoría de sus miembros.
2. Dichos acuerdos, para ser válidos, deberán ser aprobados por la mayoría de los miembros presentes, sin perjuicio de las mayorías especiales que establezcan la Constitución o las leyes orgánicas y las que para elección de personas establezcan los Reglamentos de las Cámaras.
3. El voto de Senadores y Diputados es personal e indelegable.
**Artículo 80.** Las sesiones plenarias de las Cámaras serán públicas, salvo acuerdo en contrario de cada Cámara, adoptado por mayoría absoluta o con arreglo al Reglamento.
**CAPÍTULO SEGUNDO: De la elaboración de las leyes**
**Artículo 81.**
1. Son leyes orgánicas las relativas al desarrollo de los derechos fundamentales y de las libertades públicas, las que aprueben los Estatutos de Autonomía y el régimen electoral general y las demás previstas en la Constitución.
2. La aprobación, modificación o derogación de las leyes orgánicas exigirá mayoría absoluta del Congreso, en una votación final sobre el conjunto del proyecto.
**Artículo 82.**
1. Las Cortes Generales podrán delegar en el Gobierno la potestad de dictar normas con rango de ley sobre materias determinadas no incluidas en el artículo anterior.
2. La delegación legislativa deberá otorgarse mediante una ley de bases cuando su objeto sea la formación de textos articulados o por una ley ordinaria cuando se trate de refundir varios textos legales en uno solo.
3. La delegación legislativa habrá de otorgarse al Gobierno de forma expresa para materia concreta y con fijación del plazo para su ejercicio. La delegación se agota por el uso que de ella haga el Gobierno mediante la publicación de la norma correspondiente. No podrá entenderse concedida de modo implícito o por tiempo indeterminado. Tampoco podrá permitir la subdelegación a autoridades distintas del propio Gobierno.
4. Las leyes de bases delimitarán con precisión el objeto y alcance de la delegación legislativa y los principios y criterios que han de seguirse en su ejercicio.
5. La autorización para refundir textos legales determinará el ámbito normativo a que se refiere el contenido de la delegación, especificando si se circunscribe a la mera formulación de un texto único o si se incluye la de regularizar, aclarar y armonizar los textos legales que han de ser refundidos.
6. Sin perjuicio de la competencia propia de los Tribunales, las leyes de delegación podrán establecer en cada caso fórmulas adicionales de control.
**Artículo 83.**
Las leyes de bases no podrán en ningún caso:
- Autorizar la modificación de la propia ley de bases.
- Facultar para dictar normas con carácter retroactivo.
**Artículo 84.** Cuando una proposición de ley o una enmienda fuere contraria a una delegación legislativa en vigor, el Gobierno está facultado para oponerse a su tramitación. En tal supuesto, podrá presentarse una proposición de ley para la derogación total o parcial de la ley de delegación.
**Artículo 85.** Las disposiciones del Gobierno que contengan legislación delegada recibirán el título de Decretos Legislativos.
**Artículo 86.**
1. En caso de extraordinaria y urgente necesidad, el Gobierno podrá dictar disposiciones legislativas provisionales que tomarán la forma de Decretos-leyes y que no podrán afectar al ordenamiento de las instituciones básicas del Estado, a los derechos, deberes y libertades de los ciudadanos regulados en el Título I, al régimen de las Comunidades Autónomas ni al Derecho electoral general.
2. Los Decretos-leyes deberán ser inmediatamente sometidos a debate y votación de totalidad al Congreso de los Diputados, convocado al efecto si no estuviere reunido, en el plazo de los treinta días siguientes a su promulgación. El Congreso habrá de pronunciarse expresamente dentro de dicho plazo sobre su convalidación o derogación, para lo cual el Reglamento establecerá un procedimiento especial y sumario.
3. Durante el plazo establecido en el apartado anterior, las Cortes podrán tramitarlos como proyectos de ley por el procedimiento de urgencia.
**Artículo 87.**
1. La iniciativa legislativa corresponde al Gobierno, al Congreso y al Senado, de acuerdo con la Constitución y los Reglamentos de las Cámaras.
2. Las Asambleas de las Comunidades Autónomas podrán solicitar del Gobierno la adopción de un proyecto de ley o remitir a la Mesa del Congreso una proposición de ley, delegando ante dicha Cámara un máximo de tres miembros de la Asamblea encargados de su defensa.
3. Una ley orgánica regulará las formas de ejercicio y requisitos de la iniciativa popular para la presentación de proposiciones de ley. En todo caso se exigirán no menos de 500.000 firmas acreditadas. No procederá dicha iniciativa en materias propias de ley orgánica, tributarias o de carácter internacional, ni en lo relativo a la prerrogativa de gracia.
**Artículo 88.** Los proyectos de ley serán aprobados en Consejo de Ministros, que los someterá al Congreso, acompañados de una exposición de motivos y de los antecedentes necesarios para pronunciarse sobre ellos.
**Artículo 89.**
1. La tramitación de las proposiciones de ley se regulará por los Reglamentos de las Cámaras, sin que la prioridad debida a los proyectos de ley impida el ejercicio de la iniciativa legislativa en los términos regulados por el artículo 87.
2. Las proposiciones de ley que, de acuerdo con el artículo 87, tome en consideración el Senado, se remitirán al Congreso para su trámite en éste como tal proposición.
**Artículo 90.**
1. Aprobado un proyecto de ley ordinaria u orgánica por el Congreso de los Diputados, su Presidente dará inmediata cuenta del mismo al Presidente del Senado, el cual lo someterá a la deliberación de éste.
2. El Senado en el plazo de dos meses, a partir del día de la recepción del texto, puede, mediante mensaje motivado, oponer su veto o introducir enmiendas al mismo. El veto deberá ser aprobado por mayoría absoluta. El proyecto no podrá ser sometido al Rey para sanción sin que el Congreso ratifique por mayoría absoluta, en caso de veto, el texto inicial, o por mayoría simple, una vez transcurridos dos meses desde la interposición del mismo, o se pronuncie sobre las enmiendas, aceptándolas o no por mayoría simple.
3. El plazo de dos meses de que el Senado dispone para vetar o enmendar el proyecto se reducirá al de veinte días naturales en los proyectos declarados urgentes por el Gobierno o por el Congreso de los Diputados.
**Artículo 91.** El Rey sancionará en el plazo de quince días las leyes aprobadas por las Cortes Generales, y las promulgará y ordenará su inmediata publicación.
**Artículo 92.**
1. Las decisiones políticas de especial trascendencia podrán ser sometidas a referéndum consultivo de todos los ciudadanos.
2. El referéndum será convocado por el Rey, mediante propuesta del Presidente del Gobierno, previamente autorizada por el Congreso de los Diputados.
3. Una ley orgánica regulará las condiciones y el procedimiento de las distintas modalidades de referéndum previstas en esta Constitución.
**CAPÍTULO TERCERO - De los Tratados Internacionales**
**Artículo 93.** Mediante ley orgánica se podrá autorizar la celebración de tratados por los que se atribuya a una organización o institución internacional el ejercicio de competencias derivadas de la Constitución. Corresponde a las Cortes Generales o al Gobierno, según los casos, la garantía del cumplimiento de estos tratados y de las resoluciones emanadas de los organismos internacionales o supranacionales titulares de la cesión.
**Artículo 94.**
1. La prestación del consentimiento del Estado para obligarse por medio de tratados o convenios requerirá la previa autorización de las Cortes Generales, en los siguientes casos:
1. Tratados de carácter político.
2. Tratados o convenios de carácter militar.
3. Tratados o convenios que afecten a la integridad territorial del Estado o a los derechos y deberes fundamentales establecidos en el Título I.
4. Tratados o convenios que impliquen obligaciones financieras para la Hacienda Pública.
5. Tratados o convenios que supongan modificación o derogación de alguna ley o exijan medidas legislativas para su ejecución.
2. El Congreso y el Senado serán inmediatamente informados de la conclusión de los restantes tratados o convenios.
**Artículo 95.**
1. La celebración de un tratado internacional que contenga estipulaciones contrarias a la Constitución exigirá la previa revisión constitucional.
2. El Gobierno o cualquiera de las Cámaras puede requerir al Tribunal Constitucional para que declare si existe o no esa contradicción.
**Artículo 96.**
1. Los tratados internacionales válidamente celebrados, una vez publicados oficialmente en España, formarán parte del ordenamiento interno. Sus disposiciones sólo podrán ser derogadas, modificadas o suspendidas en la forma prevista en los propios tratados o de acuerdo con las normas generales del Derecho internacional.
2. Para la denuncia de los tratados y convenios internacionales se utilizará el mismo procedimiento previsto para su aprobación en el artículo 94.
## El Tribunal Constitucional
**TÍTULO 10 de la Constitución- Del Tribunal Constitucional**
**Artículo 159.**
1. El Tribunal Constitucional se compone de 12 miembros nombrados por el Rey; de ellos, cuatro a propuesta del Congreso por mayoría de tres quintos de sus miembros; cuatro a propuesta del Senado, con idéntica mayoría; dos a propuesta del Gobierno, y dos a propuesta del Consejo General del Poder Judicial.
2. Los miembros del Tribunal Constitucional deberán ser nombrados entre Magistrados y Fiscales, Profesores de Universidad, funcionarios públicos y Abogados, todos ellos juristas de reconocida competencia con más de quince años de ejercicio profesional.
3. Los miembros del Tribunal Constitucional serán designados por un período de nueve años y se renovarán por terceras partes cada tres.
4. La condición de miembro del Tribunal Constitucional es incompatible: con todo mandato representativo; con los cargos políticos o administrativos; con el desempeño de funciones directivas en un partido político o en un sindicato y con el empleo al servicio de los mismos; con el ejercicio de las carreras judicial y fiscal, y con cualquier actividad profesional o mercantil. En lo demás los miembros del Tribunal Constitucional tendrán las incompatibilidades propias de los miembros del poder judicial.
5. Los miembros del Tribunal Constitucional serán independientes e inamovibles en el ejercicio de su mandato.
**Artículo 160.** El Presidente del Tribunal Constitucional será nombrado entre sus miembros por el Rey, ****a propuesta del mismo Tribunal en pleno y por un período de tres años.
**Artículo 161.**
1. El Tribunal Constitucional tiene jurisdicción en todo el territorio español y es competente para conocer:
1. Del recurso de inconstitucionalidad contra leyes y disposiciones normativas con fuerza de ley. La declaración de inconstitucionalidad de una norma jurídica con rango de ley, interpretada por la jurisprudencia, afectará a ésta, si bien la sentencia o sentencias recaídas no perderán el valor de cosa juzgada.
2. Del recurso de amparo por violación de los derechos y libertades referidos en el artículo 53, 2, de esta Constitución, en los casos y formas que la ley establezca.
3. De los conflictos de competencia entre el Estado y las Comunidades Autónomas o de los de éstas entre sí.
4. De las demás materias que le atribuyan la Constitución o las leyes orgánicas.
2. El Gobierno podrá impugnar ante el Tribunal Constitucional las disposiciones y resoluciones adoptadas por los órganos de las Comunidades Autónomas. La impugnación producirá la suspensión de la disposición o resolución recurrida, pero el Tribunal, en su caso, deberá ratificarla o levantarla en un plazo no superior a cinco meses.
**Artículo 162.**
1. Están legitimados:
1. Para interponer el recurso de inconstitucionalidad, el Presidente del Gobierno, el Defensor del Pueblo, 50 Diputados, 50 Senadores, los órganos colegiados ejecutivos de las Comunidades Autónomas y, en su caso, las Asambleas de las mismas.
2. Para interponer el recurso de amparo, toda persona natural o jurídica que invoque un interés legítimo, así como el Defensor del Pueblo y el Ministerio Fiscal.
2. En los demás casos, la ley orgánica determinará las personas y órganos legitimados.
**Artículo 163.** Cuando un órgano judicial considere, en algún proceso, que una norma con rango de ley, ****aplicable al caso, de cuya validez dependa el fallo, pueda ser contraria a la Constitución, ****planteará la cuestión ante el Tribunal Constitucional en los supuestos, en la forma y con los ****efectos que establezca la ley, que en ningún caso serán suspensivos.
**Artículo 164.**
1. Las sentencias del Tribunal Constitucional se publicarán en el boletín oficial del Estado con los votos particulares, si los hubiere. Tienen el valor de cosa juzgada a partir del día siguiente de su publicación y no cabe recurso alguno contra ellas. Las que declaren la inconstitucionalidad de una ley o de una norma con fuerza de ley y todas las que no se limiten a la estimación subjetiva de un derecho, tienen plenos efectos frente a todos.
2. Salvo que en el fallo se disponga otra cosa, subsistirá la vigencia de la ley en la parte no afectada por la inconstitucionalidad.
**Artículo 165.** Una ley orgánica regulará el funcionamiento del Tribunal Constitucional, el estatuto de ****sus miembros, el procedimiento ante el mismo y las condiciones para el ejercicio de las ****acciones.
**Artículo 159 CE**
- **Composición:** 12 magistrados nombrados por el Rey:
- 4 a propuesta del Congreso de los Diputados.
- 4 a propuesta del Senado.
- 2 a propuesta del Gobierno.
- 2 a propuesta del Consejo General del Poder Judicial.
- Mandato de 9 años, renovables por terceras partes cada 3 años.
- Eligen entre ellos al Presidente del Tribunal por 3 años.
**Atribuciones**
- Controlar la constitucionalidad de las leyes y normas con fuerza de ley.
- Resolver recursos de inconstitucionalidad y cuestiones de inconstitucionalidad planteadas por jueces y tribunales.
- Conocer del recurso de amparo por violación de derechos fundamentales.
- Resolver conflictos de competencia entre el Estado y las Comunidades Autónomas, o entre estas.
- Controlar la constitucionalidad de los tratados internacionales.
## El Defensor del Pueblo
**Artículo 54 CE.**
Una ley orgánica regulará la institución del Defensor del Pueblo, como **alto comisionado de las Cortes Generales**, designado por éstas para la defensa de los derechos comprendidos en este Título, a cuyo efecto podrá supervisar la actividad de la Administración, dando cuenta a las Cortes Generales.
### Ley orgánica 3/1981 del Defensor del ûeblo
#### TÍTULO PRIMERO
Nombramiento, cese y condiciones
##### CAPÍTULO PRIMERO
###### Carácter y elección
**Artículo primero.**
El Defensor del Pueblo es el alto comisionado de las Cortes Generales designado por éstas para la defensa de los derechos comprendidos en el Título I de la Constitución, a cuyo efecto podrá supervisar la actividad de la Administración, dando cuenta a las Cortes Generales. Ejercerá las funciones que le encomienda la Constitución y la presente Ley.
**Artículo segundo.**
Uno. El Defensor del Pueblo será elegido por las Cortes Generales para un periodo de cinco años, y se dirigirá a las mismas a través de los Presidentes del Congreso y del senado, respectivamente.
Dos. Se designará en las Cortes Generales una Comisión Mixta Congreso-Senado encargada de relacionarse con el Defensor del Pueblo e informar a los respectivos Plenos en cuantas ocasiones sea necesario.
Tres. Dicha Comisión se reunirá cuando así lo acuerden conjuntamente el Presidente del Congreso y del Senado, y en todo caso, para proponer a los Plenos de las Cámaras el candidato o candidatos a Defensor del Pueblo. Los acuerdos de la Comisión se adoptarán por mayoría simple.
Cuatro. Propuesto el candidato o candidatos, se convocará en término no inferior a diez días al Pleno del Congreso para que proceda a su elección. Será designado quien obtuviese una votación favorable de las tres quintas partes de los miembros del Congreso y posteriormente, en un plazo máximo de veinte días, fuese ratificado por esta misma mayoría del Senado.
Cinco. Caso de no alcanzarse las mencionadas mayorías, se procederá en nueva sesión de la Comisión, y en el plazo máximo de un mes, a formular sucesivas propuestas. En tales casos, una vez conseguida la mayoría de los tres quintos en el Congreso, la designación quedará realizada al alcanzarse la mayoría absoluta del Senado.
Seis. Designado el Defensor del Pueblo se reunirá de nuevo la Comisión Mixta Congreso-Senado para otorgar su conformidad previa al nombramiento de los adjuntos que le sean propuestos por aquél.
**Artículo tercero.**
Podrá ser elegido Defensor del Pueblo cualquier español mayor de edad que se encuentre en el pleno disfrute de sus derechos civiles y políticos.
**Artículo cuarto.**
Uno. Los Presidentes del Congreso y del Senado acreditarán conjuntamente con sus firmas el nombramiento del Defensor del Pueblo que se publicará en el «Boletín Oficial del Estado».
Dos. El Defensor del Pueblo tomará posesión de su cargo ante las Mesas de ambas Cámaras reunidas conjuntamente, prestando juramento o promesa de fiel desempeño de su función.
### CAPÍTULO SEGUNDO
#### Cese y sustitución
**Artículo quinto.**
Uno. El Defensor del Pueblo cesará por alguna de las siguientes causas:
1.1. Por renuncia.
1.2. Por expiración del plazo de su nombramiento.
1.3. Por muerte o por incapacidad sobrevenida.
1.4. Por actuar con notoria negligencia en el cumplimiento de las obligaciones y deberes del cargo.
1.5. Por haber sido condenado, mediante sentencia firme, por delito doloso.
Dos. La vacante en el cargo se declarará por el Presidente del Congreso en los casos de muerte, renuncia y expiración del plazo del mandato. En los demás casos se decidirá, por mayoría de las tres quintas partes de los componentes de cada Cámara, mediante debate y previa audiencia del interesado.
Tres. Vacante el cargo se iniciará el procedimiento para el nombramiento de nuevo Defensor del Pueblo en plazo no superior a un mes.
Cuatro. En los casos de muerte, cese o incapacidad temporal o definitiva del Defensor del Pueblo y en tanto no procedan las Cortes Generales a una nueva designación desempeñarán sus funciones, interinamente, en su propio orden, los Adjuntos al Defensor del Pueblo.
### CAPÍTULO TERCERO
#### Prerrogativas e incompatibilidades
**Artículo sexto.**
Uno. El Defensor del Pueblo no estará sujeto a mandato imperativo alguno. No recibirá instrucciones de ninguna Autoridad. Desempeñará sus funciones con autonomía y según su criterio.
Dos. El Defensor del Pueblo gozará de inviolabilidad. No podrá ser detenido, expedientado, multado, perseguido o juzgado en razón a las opiniones que formule o a los actos que realice en el ejercicio de las competencias propias de su cargo.
Tres. En los demás casos, y mientras permanezca en el ejercicio de sus funciones, el Defensor del Pueblo no podrá ser detenido ni retenido sino en caso de flagrante delito, correspondiendo la decisión sobre su inculpación, prisión, procesamiento y juicio exclusivamente a la Sala de lo Penal del Tribunal Supremo.
Cuatro. Las anteriores reglas serán aplicables a los Adjuntos del Defensor del Pueblo en el cumplimiento de sus funciones.
**Artículo séptimo.**
Uno. La condición de Defensor del Pueblo es incompatible con todo mandato representativo; con todo cargo político o actividad de propaganda política; con la permanencia en el servicio activo de cualquier Administración pública; con la afiliación a un partido político o el desempeño de funciones directivas en un partido político o en un sindicato, asociación o fundación, y con el empleo al servicio de los mismos; con el ejercicio de las carreras judicial y fiscal, y con cualquier actividad profesional, liberal, mercantil o laboral.
Dos. El Defensor del Pueblo deberá cesar, dentro de los diez días siguientes a su nombramiento y antes de tomar posesión, en toda situación de incompatibilidad que pudiera afectarle, entendiéndose en caso contrario que no acepta el nombramiento.
Tres. Si la incompatibilidad fuere sobrevenida una vez posesionado del cargo, se entenderá que renuncia al mismo en la fecha en que aquélla se hubiere producido.
### CAPÍTULO CUARTO
#### De los Adjuntos del Defensor del Pueblo.
**Artículo octavo.**
Uno. El Defensor del Pueblo estará auxiliado por un Adjunto Primero y un Adjunto Segundo, en los que podrá delegar sus funciones y que le sustituirán por su orden, en el ejercicio de las mismas, en los supuestos de imposibilidad temporal y en los de cese.
Dos. El Defensor del Pueblo nombrará y separará a sus Adjuntos previa conformidad de las Cámaras en la forma que determinen sus Reglamentos.
Tres. El nombramiento de los Adjuntos será publicado en el «Boletín Oficial del Estado».
Cuatro. A los Adjuntos les será de aplicación lo dispuesto para el Defensor del Pueblo en los artículos tercero, sexto y séptimo de la presente Ley.
### TÍTULO SEGUNDO
#### Del procedimiento
##### CAPÍTULO PRIMERO
###### Iniciación y contenido de la investigación
**Artículo noveno.**
Uno. El Defensor del Pueblo podrá iniciar y proseguir de oficio o a petición de parte, cualquier investigación conducente al esclarecimiento de los actos y resoluciones de la Administración pública y sus agentes, en relación con los ciudadanos, a la luz de lo dispuesto en el artículo ciento tres, uno, de la Constitución, y el respeto debido a los Derechos proclamados en su Título primero.
Dos. Las atribuciones del Defensor del Pueblo se extienden a la actividad de los ministros, autoridades administrativas, funcionarios y cualquier persona que actúe al servicio de las Administraciones públicas.
**Artículo diez.**
Uno. Podrá dirigirse al Defensor del Pueblo toda persona natural o jurídica que invoque un interés legítimo, sin restricción alguna. No podrán constituir impedimento para ello la nacionalidad, residencia, sexo, minoría de edad, la incapacidad legal del sujeto, el internamiento en un centro penitenciario o de reclusión o, en general, cualquier relación especial de sujeción o dependencia de una Administración o Poder público.
Dos. Los Diputados y Senadores individualmente, las comisiones de investigación o relacionadas con la defensa general o parcial de los derechos y libertades públicas y, principalmente, la Comisión Mixta Congreso-Senado de relaciones con el Defensor del Pueblo podrán solicitar, mediante escrito motivado, la intervención del Defensor del Pueblo para la investigación o esclarecimiento de actos, resoluciones y conductas concretas producidas en las Administraciones públicas, que afecten a un ciudadano o grupo de ciudadanos, en el ámbito de sus competencias.
Tres. No podrá presentar quejas ante el Defensor del Pueblo ninguna autoridad administrativa en asuntos de su competencia.
**Artículo once.**
Uno. La actividad del Defensor del Pueblo no se verá interrumpida en los casos en que las Cortes Generales no se encuentren reunidas, hubieren sido disueltas o hubiere expirado su mandato.
Dos. En las situaciones previstas en el apartado anterior, el Defensor del Pueblo se dirigirá a las Diputaciones Permanentes de las Cámaras.
Tres. La declaración de los estados de excepción o de sitio no interrumpirán la actividad del Defensor del Pueblo, ni el derecho de los ciudadanos de acceder al mismo, sin perjuicio de lo dispuesto en el artículo cincuenta y cinco de la Constitución.
### CAPÍTULO SEGUNDO
#### Ámbito de competencias
**Artículo doce.**
Uno. El Defensor del Pueblo podrá, en todo caso, de oficio o a instancia de parte, supervisar por sí mismo la actividad de la Comunidad Autónoma en el ámbito de competencias definido por esta Ley.
Dos. A los efectos de lo previsto en el párrafo anterior, los órganos similares de las Comunidades Autónomas coordinarán sus funciones con las del Defensor del Pueblo y éste podrá solicitar su cooperación.
**Artículo trece.**
Cuando el Defensor del Pueblo reciba quejas referidas al funcionamiento de la Administración de Justicia, deberá dirigirlas al Ministerio Fiscal para que éste investigue su realidad y adopte las medidas oportunas con arreglo a la ley, o bien dé traslado de las mismas al Consejo General del Poder Judicial, según el tipo de reclamación de que se trate; todo ello sin perjuicio de la referencia que en su informe general a las Cortes Generales pueda hacer al tema.
**Artículo catorce.**
El Defensor del Pueblo velará por el respeto de los derechos proclamados en el título primero de la Constitución en el ámbito de la Administración Militar, sin que ella pueda entrañar una interferencia en el mando de la Defensa Nacional.
### CAPÍTULO TERCERO
#### Tramitación de las quejas
**Artículo quince.**
Uno. Toda queja se presentará firmada por el interesado, con indicación de su nombre, apellidos y domicilio, en escrito razonado en papel común y en el plazo máximo de un año, contado a partir del momento en que tuviera conocimiento de los hechos objeto de la misma.
Dos. Todas las actuaciones del Defensor del Pueblo son gratuitas para el interesado y no será preceptiva la asistencia de Letrado ni de Procurador. De toda queja se acusará recibo.
**Artículo dieciséis.**
Uno. La correspondencia dirigida al Defensor del Pueblo y que sea remitida desde cualquier centro de detención, internamiento o custodia de las personas no podrá ser objeto de censura de ningún tipo.
Dos. Tampoco podrán ser objeto de escucha o interferencia las conversaciones que se produzcan entre el Defensor del Pueblo o sus delegados y cualquier otra persona de las enumeradas en el apartado anterior.
**Artículo diecisiete.**
Uno. El Defensor del Pueblo registrará y acusará recibo de las quejas que se formulen, que tramitará o rechazará. En este último caso lo hará en escrito motivado pudiendo informar al interesado sobre las vías más oportunas para ejercitar su acción, caso de que a su entender hubiese alguna y sin perjuicio de que el interesado pueda utilizar las que considere más pertinentes.
Dos. El Defensor del Pueblo no entrará en el examen individual de aquellas quejas sobre las que esté pendiente resolución judicial y lo suspenderá si, iniciada su actuación, se interpusiere por persona interesada demanda o recurso ante las Tribunales ordinarios o el Tribunal Constitucional. Ello no impedirá, sin embargo, la investigación sobre los problemas generales planteados en las quejas presentadas. En cualquier caso velará por que la Administración resuelva expresamente, en tiempo y forma, las peticiones y recursos que le hayan sido formulados.
Tres. El Defensor del Pueblo rechazará las quejas anónimas y podrá rechazar aquellas en las que advierta mala fe, carencia de fundamento, inexistencia de pretensión, así como aquellas otras cuya tramitación irrogue perjuicio al legítimo derecho de tercera persona. Sus decisiones no serán susceptibles de recurso.
**Artículo dieciocho.**
Uno. Admitida la queja, el Defensor del Pueblo promoverá la oportuna investigación sumaria e informal para el esclarecimiento de los supuestos de la misma. En todo caso dará cuenta del contenido sustancial de la solicitud al Organismo o a la Dependencia administrativa procedente con el fin de que por su Jefe en el plazo máximo de quince días, se remita informe escrito. Tal plazo será ampliable cuando concurran circunstancias que lo aconsejen a juicio del Defensor del Pueblo.
Dos. La negativa o negligencia del funcionario o de sus superiores responsables al envío del informe inicial solicitado podrá ser considerada por el Defensor del Pueblo como hostil y entorpecedora de sus funciones, haciéndola pública de inmediato y destacando tal calificación en su informe anual o especial, en su caso, a las Cortes Generales.
### CAPÍTULO CUARTO
#### Obligación de colaboración de los organismos requeridos
**Artículo diecinueve.**
Uno. Todos los poderes públicos están obligados a auxiliar, con carácter preferente y urgente, al Defensor del Pueblo en sus investigaciones e inspecciones.
Dos. En la fase de comprobación e investigación de una queja o en expediente iniciado de oficio, el Defensor del Pueblo su Adjunto, o la persona en quien él delegue, podrán personarse en cualquier centro de la Administración pública, dependientes de la misma a afectos a un servicio público, para comprobar cuantos datos fueren menester, hacer las entrevistas personales pertinentes o proceder al estudio de los expedientes y documentación necesaria.
Tres. A estos efectos no podrá negársele el acceso a ningún expediente o documentación administrativa o que se encuentre relacionada con la actividad o servicio objeto de la investigación, sin perjuicio de lo que se dispone en el artículo veintidós de esta Ley.
**Artículo veinte.**
Uno. Cuando la queja a investigar afectare a la conducta de las personas al servicio de la Administración, en relación con la función que desempeñan, el Defensor del Pueblo dará cuenta de la misma al afectado y a su inmediato superior u Organismo de quien aquél dependiera.
Dos. El afectado responderá por escrito, y con la aportación de cuantos documentos y testimonios considere oportunos, en el plazo que se le haya fijado, que en ningún caso será inferior a diez días, pudiendo ser prorrogado, a instancia de parte, por la mitad del concedido.
Tres. El Defensor del Pueblo podrá comprobar la veracidad de los mismos y proponer al funcionario afectado una entrevista ampliatoria de datos. Los funcionarios que se negaren a ello podrán ser requeridos por aquél para que manifiesten por escrito las razones que justifiquen tal decisión.
Cuatro. La información que en el curso de una investigación pueda aportar un funcionario a través de su testimonio personal tendrá el carácter de reservada, sin perjuicio de lo dispuesto en la Ley de Enjuiciamiento Criminal sobre la denuncia de hechos que pudiesen revestir carácter delictivo.
**Artículo veintiuno.**
El superior jerárquico u Organismo que prohíba al funcionario a sus órdenes o servicio responder a la requisitoria del Defensor del Pueblo o entrevistarse con él, deberá manifestarlo por escrito, debidamente motivado, dirigido al funcionario y al propio Defensor del Pueblo. El Defensor del Pueblo dirigirá en adelante cuantas actuaciones investigadoras sean necesarias al referido superior jerárquico.
### CAPÍTULO QUINTO
#### Sobre documentos reservados
**Artículo veintidós.**
Uno. El Defensor del Pueblo podrá solicitar a los poderes públicos todos los documentos que considere necesarios para el desarrollo de su función, incluidos aquéllos clasificados con el carácter de secretos de acuerdo con la ley. En este último supuesto la no remisión de dichos documentos deberá ser acordada por el Consejo de Ministros y se acompañará una certificación acreditativa del acuerdo denegatorio.
Dos. Las investigaciones que realice el Defensor del Pueblo y el personal dependiente del mismo, así como los trámites procedimentales, se verificarán dentro de la más absoluta reserva, tanto con respecto a los particulares como a las dependencias y demás Organismos públicos, sin perjuicio de las consideraciones que el Defensor del Pueblo considere oportuno incluir en sus informes a las Cortes Generales. Se dispondrán medidas especiales de protección en relación con los documentos clasificados como secretos.
Tres. Cuando entienda que un documento declarado secreto y no remitido por la Administración pudiera afectar de forma decisiva a la buena marcha de su investigación, lo pondrá en conocimiento de la Comisión Mixta Congreso-Senado a que se refiere el artículo 2.° de esta Ley.
### CAPÍTULO SEXTO
#### Responsabilidades de las autoridades y funcionarios
**Artículo veintitrés.**
Cuando las actuaciones practicadas revelen que la queja ha sido originada presumiblemente por el abuso, arbitrariedad, discriminación, error, negligencia u omisión de un funcionario, el Defensor del Pueblo podrá dirigirse al afectado haciéndole constar su criterio al respecto. Con la misma fecha dará traslado de dicho escrito al superior jerárquico, formulando las sugerencias que considere oportunas.
**Artículo veinticuatro.**
Uno. La persistencia en una actitud hostil o entorpecedora de la labor de investigación del Defensor del Pueblo por parte de cualquier Organismo, funcionarios, directivo o persona al servicio de la Administración pública podrá ser objeto de un informe especial, además de destacarlo en la sección correspondiente de su informe anual.
**Artículo veinticinco.**
Uno. Cuando el Defensor del Pueblo, en razón del ejercicio de las funciones propias de su cargo, tenga conocimiento de una conducta o hechos presumiblemente delictivos lo pondrá de inmediato en conocimiento del Fiscal General del Estado.
Dos. En cualquier caso, el Fiscal General del Estado informará periódicamente al Defensor del Pueblo, o cuando éste lo solicite, del trámite en que se hallen las actuaciones iniciadas a su instancia.
Tres. El Fiscal General del Estado pondrá en conocimiento del Defensor del Pueblo todas aquellas posibles irregularidades administrativas de que tenga conocimiento el Ministerio Fiscal en el ejercicio de sus funciones.
**Artículo veintiséis.**
El Defensor del Pueblo podrá, de oficio, ejercitar la acción de responsabilidad contra todas las autoridades, funcionarios y agentes civiles del orden gubernativo o administrativo, incluso local, sin que sea necesaria en ningún caso la previa reclamación por escrito.
### CAPÍTULO SÉPTIMO
#### Gastos causados a particulares
**Artículo veintisiete.**
Los gastos efectuados o perjuicios materiales causados a los particulares que no hayan promovido la queja al ser llamados a informar por el Defensor del Pueblo, serán correspondidos con cargo a su presupuesto una vez justificados debidamente.
### TÍTULO TERCERO
#### De las resoluciones
### CAPÍTULO PRIMERO
#### Contenido de las resoluciones
**Artículo veintiocho.**
Uno. El Defensor del Pueblo, aun no siendo competente para modificar o anular los actos y resoluciones de la Administración Pública, podrá, sin embargo, sugerir la modificación de los criterios utilizados para la producción de aquéllos.
Dos. Si como consecuencia de sus investigaciones llegase al convencimiento de que el cumplimiento riguroso de la norma puede provocar situaciones injustas o perjudiciales para los administrados, podrá sugerir al órgano legislativo competente o a la Administración la modificación de la misma.
Tres. Si las actuaciones se hubiesen realizado con ocasión de servicios prestados por particulares en virtud de acto administrativo habilitante, el Defensor del Pueblo podrá instar de las autoridades administrativas competentes el ejercicio de sus potestades de inspección y sanción.
**Artículo veintinueve.**
El Defensor del Pueblo está legitimado para interponer los recursos de inconstitucionalidad y de amparo, de acuerdo con lo dispuesto en la Constitución y en la Ley Orgánica del Tribunal Constitucional.
**Artículo treinta.**
Uno. El Defensor del Pueblo, con ocasión de sus investigaciones, podrá formular a las autoridades y funcionarios de las Administraciones Públicas advertencias, recomendaciones, recordatorios de sus deberes legales y sugerencias para la adopción de nuevas medidas. En todos los casos, las autoridades y los funcionarios vendrán obligados a responder por escrito en término no superior al de un mes.
Dos. Si formuladas sus recomendaciones dentro de un plazo razonable no se produce una medida adecuada en tal sentido por la autoridad administrativa afectada o éste no informa al Defensor del Pueblo de las razones que estime para no adoptarlas, el Defensor del Pueblo podrá poner en conocimiento del Ministro del Departamento afectado, o sobre la máxima autoridad de la Administración afectada, los antecedentes del asunto y las recomendaciones presentadas. Si tampoco obtuviera una justificación adecuada, incluirá tal asunto en su informe anual o especial con mención de los nombres de las autoridades o funcionarios que hayan adoptado tal actitud entre los casos en que considerando el Defensor del Pueblo que era posible una solución positiva, ésta no se ha conseguido.
### CAPÍTULO SEGUNDO
#### Notificaciones y comunicaciones
**Artículo treinta y uno.**
Uno. El Defensor del Pueblo informará al interesado del resultado de sus investigaciones y gestión así como de la respuesta que hubiese dado la Administración o funcionario implicados, salvo en el caso de que éstas, por su naturaleza, fuesen consideradas como de carácter reservado o declaradas secretas.
Dos. Cuando en intervención se hubiere iniciado de acuerdo con lo dispuesto en el apartado dos del artículo diez, el Defensor del Pueblo informará al parlamentario o Comisión competente que lo hubiese solicitado y al término de sus investigaciones, de los resultados alcanzados. Igualmente, cuando decida no intervenir informará razonando su desestimación.
Tres. El Defensor del Pueblo comunicará el resultado positivo o negativo de sus investigaciones a la autoridad, funcionario o dependencia administrativa acerca de la cual se haya suscitado,
### CAPÍTULO TERCERO
#### Informe a las Cortes
**Artículo treinta y dos.**
Uno. El Defensor del Pueblo dará cuenta anualmente a las Cortes Generales de la gestión realizada en un informe que presentará ante las mismas cuando se hallen reunidas en periodo ordinario de sesiones.
Dos. Cuando la gravedad o urgencia de los hechos lo aconsejen podrá presentar un informe extraordinario que dirigirá a las Diputaciones Permanentes de las Cámaras si éstas no se encontraran reunidas.
Tres. Los informes anuales y, en su caso los extraordinarios, serán publicados.
**Artículo treinta y tres.**
Uno. El Defensor del Pueblo en su informe anual dará cuenta del número y tipo de quejas presentadas; de aquellas que hubiesen sido rechazadas y sus causas, así como de las que fueron objeto de investigación y el resultado de las mismas, con especificación de las sugerencias o recomendaciones admitidas por las Administraciones Públicas.
Dos. En el informe no constarán datos personales que permitan la pública identificación de los interesados en el procedimiento investigador, sin perjuicio de lo dispuesto en el artículo veinticuatro punto uno.
Tres. El informe contendrá igualmente un anexo, cuyo destinatario serán las Cortes Generales, en el que se hará constar la liquidación del presupuesto de la institución en el periodo que corresponda.
Cuatro. Un resumen del informe será expuesto oralmente por el Defensor del Pueblo ante los Plenos de ambas Cámaras, pudiendo intervenir los grupos parlamentarios a efectos de fijar su postura.
### TÍTULO CUARTO
#### Medios personales y materiales
### CAPÍTULO PRIMERO
#### Personal
**Artículo treinta y cuatro.**
El Defensor del Pueblo podrá designar libremente los asesores necesarios para el ejercicio de sus funciones, de acuerdo con el Reglamento y dentro de los límites presupuestarios.
**Artículo treinta y cinco.**
Uno. Las personas que se encuentren al servicio del Defensor del Pueblo, y mientras permanezcan en el mismo, se considerarán como persona al servicio de las Cortes.
Dos. En los casos de funcionarios provenientes de la Administración Pública se les reservará la plaza y destino que ocupasen con anterioridad a su adscripción a la oficina del Defensor del Pueblo, y se les computará, a todos los efectos, el tiempo transcurrido en esta situación.
**Artículo treinta y seis.**
Los adjuntos y asesores cesarán automáticamente en el momento de la toma de posesión de un nuevo Defensor del Pueblo destinado por las Cortes.
### CAPÍTULO SEGUNDO
#### Dotación económica
**Artículo treinta y siete.**
La dotación económica necesaria para el funcionamiento de la institución constituirá una partida dentro de los Presupuestos de las Cortes Generales.
Disposición transitoria.
A los cinco años de entrada en vigor de la presente Ley, el Defensor del Pueblo podrá proponer a las Cortes Generales y en informe razonado aquellas modificaciones que entienda que deben realizarse a la misma.
### Disposición final única. Mecanismo Nacional de Prevención de la Tortura.
Primero. El Defensor del Pueblo ejercerá las funciones del Mecanismo Nacional de Prevención de la Tortura de conformidad con la Constitución, la presente Ley y el Protocolo facultativo de la Convención contra la tortura u otros tratos o penas crueles, inhumanos o degradantes.
Segundo. Se crea un Consejo Asesor como órgano de cooperación técnica y jurídica en el ejercicio de las funciones propias del Mecanismo Nacional de Prevención, que será presidido por el Adjunto en el que el Defensor del Pueblo delegue las funciones previstas en esta disposición. El Reglamento determinará su estructura, composición y funcionamiento.

View File

@ -0,0 +1,251 @@
## Bloque 1 Tema 2. Las Cortes Generales. Tribunal Constitucional. Defensor del Pueblo
Introducción
En este tema se estudian tres instituciones fundamentales del sistema constitucional español.
Las Cortes Generales, como poder legislativo.
El Tribunal Constitucional, como garante de la Constitución.
El Defensor del Pueblo, como protector de los derechos de los ciudadanos frente a la Administración.
Es un tema muy frecuente en el examen TAI.
---
## 1. Las Cortes Generales
Las Cortes Generales representan al pueblo español.
Ejercen el poder legislativo del Estado.
Están formadas por dos cámaras.
El Congreso de los Diputados.
El Senado.
---
### 1.1 Funciones generales
Las Cortes Generales tienen las siguientes funciones.
Elaborar y aprobar las leyes.
Aprobar los Presupuestos Generales del Estado.
Controlar la acción del Gobierno.
---
## 2. El Congreso de los Diputados
Es la cámara baja.
Tiene un papel predominante en el sistema parlamentario.
---
### 2.1 Funciones principales
Otorgar o retirar la confianza al Gobierno.
Elegir al Presidente del Gobierno mediante la investidura.
Aprobar la moción de censura.
Plantear y resolver la cuestión de confianza.
Participar en la elaboración de leyes.
---
Importante para examen
El Congreso tiene mayor poder que el Senado.
---
## 3. El Senado
Es la cámara de representación territorial.
---
### 3.1 Funciones principales
Participar en la elaboración de leyes.
Puede enmendar o vetar proyectos de ley.
Controlar la acción del Gobierno.
Representar a las Comunidades Autónomas.
---
Importante para examen
El veto del Senado puede ser levantado por el Congreso.
---
## 4. Procedimiento legislativo básico
La elaboración de leyes sigue varias fases.
---
Iniciativa legislativa.
Puede corresponder al Gobierno, Congreso, Senado o Comunidades Autónomas.
---
Debate y aprobación en el Congreso.
---
Intervención del Senado.
Puede aprobar, enmendar o vetar.
---
Aprobación definitiva por el Congreso.
---
Sanción y promulgación por el Rey.
---
## 5. El Tribunal Constitucional
Es el órgano encargado de interpretar la Constitución.
Es independiente de los demás poderes del Estado.
---
### 5.1 Composición
Está formado por doce miembros.
Son nombrados por el Rey.
---
Su designación corresponde a.
Cuatro a propuesta del Congreso.
Cuatro a propuesta del Senado.
Dos a propuesta del Gobierno.
Dos a propuesta del Consejo General del Poder Judicial.
---
Importante para examen
El mandato es de nueve años.
Se renueva por tercios.
---
### 5.2 Funciones
El Tribunal Constitucional tiene varias funciones clave.
---
Control de constitucionalidad de las leyes.
---
Resolución de recursos de amparo.
Protege los derechos fundamentales.
---
Resolución de conflictos.
Entre el Estado y las Comunidades Autónomas.
---
Control de tratados internacionales.
---
Importante para examen
El recurso de amparo protege derechos fundamentales frente a vulneraciones de los poderes públicos.
---
## 6. El Defensor del Pueblo
Es el alto comisionado de las Cortes Generales.
Su función es defender los derechos de los ciudadanos frente a la Administración.
---
### 6.1 Características
Es independiente.
Actúa de oficio o a instancia de parte.
No tiene poder sancionador.
---
### 6.2 Funciones
Supervisar la actividad de la Administración.
Investigar quejas de los ciudadanos.
Proponer recomendaciones.
Interponer recurso de amparo.
Interponer recurso de inconstitucionalidad.
---
Importante para examen
Puede supervisar la Administración, pero no anular actos.
---
## 7. Relaciones entre las instituciones
Las Cortes elaboran leyes.
El Tribunal Constitucional controla que las leyes respeten la Constitución.
El Defensor del Pueblo protege a los ciudadanos frente a la Administración.
---
## Resumen final del tema
Las Cortes Generales representan al pueblo y ejercen el poder legislativo.
El Congreso tiene mayor peso político que el Senado.
El Tribunal Constitucional es el intérprete supremo de la Constitución.
El Defensor del Pueblo protege los derechos de los ciudadanos frente a la Administración.
Son instituciones clave del sistema constitucional español.

View File

@ -1,3 +1,4 @@
Tema 3 - Tambien se puede escuchar
# 3. El Gobierno: composición, nombramiento y cese. Las funciones del Gobierno. Relaciones entre el Gobierno y las Cortes Generales
# Introducción
@ -75,7 +76,7 @@ El Gobierno responde **solidariamente** de su gestión política ante el **Congr
**Artículo 99.**
1. Después de cada renovación del Congreso de los Diputados, y en los demás supuestos constitucionales en que así proceda, el Rey, previa consulta con los representantes designados por los Grupos políticos con representación parlamentaria, y a través del Presidente del Congreso, propondrá un candidato a la Presidencia del Gobierno.
2. El candidato propuesto conforme a lo previsto en el apartado anterior expondrá ante el Congreso de los Diputados el programa político del Gobierno que pretenda formar y solicitará la confianza de la Cámara.
3. Si el Congreso de los Diputados, por el voto de la mayoría absoluta de sus miembros, otorgare su confianza a dicho candidato, el Rey le nombrará Presidente. De no alcanzarse dicha mayoría, se someterá la misma propuesta a nueva votación cuarenta y ocho horas después de la anterior, y la confianza se entenderá otorgada si obtuviere la mayoría simple.
3. Si el Congreso de los Diputados, por el voto de la **mayoría absoluta** de sus miembros, otorgare su confianza a dicho candidato, el Rey le nombrará Presidente. De no alcanzarse dicha mayoría, se someterá la misma propuesta a **nueva votación cuarenta y ocho horas después** de la anterior, y la confianza se entenderá otorgada si obtuviere la **mayoría simple**.
4. Si efectuadas las citadas votaciones no se otorgase la confianza para la investidura, se tramitarán sucesivas propuestas en la forma prevista en los apartados anteriores.
5. Si transcurrido el plazo de dos meses, a partir de la primera votación de investidura, ningún candidato hubiere obtenido la confianza del Congreso, el Rey disolverá ambas Cámaras y convocará nuevas elecciones con el refrendo del Presidente del Congreso.
@ -90,8 +91,8 @@ El Gobierno responde **solidariamente** de su gestión política ante el **Congr
2. Si la acusación fuere por traición o por cualquier delito contra la seguridad del Estado en el ejercicio de sus funciones, sólo podrá ser planteada por iniciativa de la cuarta parte de los miembros del Congreso, y con la aprobación de la mayoría absoluta del mismo.
3. La prerrogativa real de gracia no será aplicable a ninguno de los supuestos del presente artículo.
**Artículo 103.**
1. La Administración Pública sirve con objetividad los intereses generales y actúa de acuerdo con los principios de eficacia, jerarquía, descentralización, desconcentración y coordinación, con sometimiento pleno a la ley y al Derecho.
**Artículo 103.** MUY IMPORTANTE
1. La Administración Pública sirve con objetividad los intereses generales y actúa de acuerdo con los principios de **eficacia, jerarquía, descentralización, desconcentración y coordinación, con sometimiento pleno a la ley y al Derecho**.
2. Los órganos de la Administración del Estado son creados, regidos y coordinados de acuerdo con la ley.
3. La ley regulará el estatuto de los funcionarios públicos, el acceso a la función pública de acuerdo con los principios de mérito y capacidad, las peculiaridades del ejercicio de su derecho a sindicación, el sistema de incompatibilidades y las garantías para la imparcialidad en el ejercicio de sus funciones.
@ -146,10 +147,305 @@ Relaciones entre el Gobierno y las Cortes Generales
2. La propuesta de disolución no podrá presentarse cuando esté en trámite una moción de censura.
3. No procederá nueva disolución antes de que transcurra un año desde la anterior, salvo lo dispuesto en el artículo 99, apartado 5.
**Artículo 116.**
**Artículo 116.** MUY PREGUNTADO
1. Una ley orgánica regulará los estados de alarma, de excepción y de sitio, y las competencias y limitaciones correspondientes.
2. El estado de alarma será declarado por el Gobierno mediante decreto acordado en Consejo de Ministros por un plazo máximo de quince días, dando cuenta al Congreso de los Diputados, reunido inmediatamente al efecto y sin cuya autorización no podrá ser prorrogado dicho plazo. El decreto determinará el ámbito territorial a que se extienden los efectos de la declaración.
3. El estado de excepción será declarado por el Gobierno mediante decreto acordado en Consejo de Ministros, previa autorización del Congreso de los Diputados. La autorización y proclamación del estado de excepción deberá determinar expresamente los efectos del mismo, el ámbito territorial a que se extiende y su duración, que no podrá exceder de treinta días, prorrogables por otro plazo igual, con los mismos requisitos.
4. El estado de sitio será declarado por la mayoría absoluta del Congreso de los Diputados, a propuesta exclusiva del Gobierno. El Congreso determinará su ámbito territorial, duración y condiciones.
5. No podrá procederse a la disolución del Congreso mientras estén declarados algunos de los estados comprendidos en el presente artículo, quedando automáticamente convocadas las Cámaras si no estuvieren en período de sesiones. Su funcionamiento, así como el de los demás poderes constitucionales del Estado, no podrán interrumpirse durante la vigencia de estos estados. Disuelto el Congreso o expirado su mandato, si se produjere alguna de las situaciones que dan lugar a cualquiera de dichos estados, las competencias del Congreso serán asumidas por su Diputación Permanente.
6. La declaración de los estados de alarma, de excepción y de sitio no modificarán el principio de responsabilidad del Gobierno y de sus agentes reconocidos en la Constitución y en las leyes.
6. La declaración de los estados de alarma, de excepción y de sitio no modificarán el principio de responsabilidad del Gobierno y de sus agentes reconocidos en la Constitución y en las leyes.
---
## Título 8 - De la Organización Territorial del Estado
### CAPÍTULO PRIMERO - Principios generales
**Artículo 137**
El Estado se organiza territorialmente en municipios, en provincias y en las Comunidades Autónomas que se constituyan. Todas estas entidades gozan de autonomía para la gestión de sus respectivos intereses.
**Artículo 138**
1. El Estado garantiza la realización efectiva del principio de solidaridad consagrado en el artículo 2 de la Constitución, velando por el establecimiento de un equilibrio económico, adecuado y justo entre las diversas partes del territorio español, y atendiendo en particular a las circunstancias del hecho insular.
2. Las diferencias entre los Estatutos de las distintas Comunidades Autónomas no podrán implicar, en ningún caso, privilegios económicos o sociales.
Artículo 139
1. Todos los españoles tienen los mismos derechos y obligaciones en cualquier parte del territorio del Estado.
2. Ninguna autoridad podrá adoptar medidas que directa o indirectamente obstaculicen la libertad de circulación y establecimiento de las personas y la libre circulación de bienes en todo el territorio español.
### CAPÍTULO SEGUNDO - De la Administración Local
**Artículo 140**
La Constitución garantiza la autonomía de los municipios. Estos gozarán de personalidad jurídica plena. Su gobierno y administración corresponde a sus respectivos Ayuntamientos, integrados por los Alcaldes y los Concejales. Los Concejales serán elegidos por los vecinos del municipio mediante sufragio universal, igual, libre, directo y secreto, en la forma establecida por la ley. Los Alcaldes serán elegidos por los Concejales o por los vecinos. La ley regulará las condiciones en las que proceda el régimen del concejo abierto.
**Artículo 141**
1. La provincia es una entidad local con personalidad jurídica propia, determinada por la agrupación de municipios y división territorial para el cumplimiento de las actividades del Estado. Cualquier alteración de los límites provinciales habrá de ser aprobada por las Cortes Generales mediante ley orgánica.
2. El gobierno y la administración autónoma de las provincias estarán encomendados a Diputaciones u otras Corporaciones de carácter representativo.
3. Se podrán crear agrupaciones de municipios diferentes de la provincia.
4. En los archipiélagos, las islas tendrán además su administración propia en forma de Cabildos o Consejos.
**Artículo 142**
Las Haciendas locales deberán disponer de los medios suficientes para el desempeño de las funciones que la ley atribuye a las Corporaciones respectivas y se nutrirán fundamentalmente de tributos propios y de participación en los del Estado y de las Comunidades Autónomas.
### CAPÍTULO TERCERO - De las Comunidades Autónomas
**Artículo 143**
1. En el ejercicio del derecho a la autonomía reconocido en el artículo 2 de la Constitución, las provincias limítrofes con características históricas, culturales y económicas comunes, los territorios insulares y las provincias con entidad regional histórica podrán acceder a su autogobierno y constituirse en Comunidades Autónomas con arreglo a lo previsto en este Título y en los respectivos Estatutos.
2. La iniciativa del proceso autonómico corresponde a todas las Diputaciones interesadas o al órgano interinsular correspondiente y a las dos terceras partes de los municipios cuya población represente, al menos, la mayoría del censo electoral de cada provincia o isla. Estos requisitos deberán ser cumplidos en el plazo de seis meses desde el primer acuerdo adoptado al respecto por alguna de las Corporaciones locales interesadas.
3. La iniciativa, en caso de no prosperar, solamente podrá reiterarse pasados cinco años.
**Artículo 144**
Las Cortes Generales, mediante ley orgánica, podrán, por motivos de interés nacional:
1. Autorizar la constitución de una comunidad autónoma cuando su ámbito territorial no supere el de una provincia y no reúna las condiciones del apartado 1 del artículo 143.
2. Autorizar o acordar, en su caso, un Estatuto de autonomía para territorios que no estén integrados en la organización provincial.
3. Sustituir la iniciativa de las Corporaciones locales a que se refiere el apartado 2 del artículo 143.
**Artículo 145**
1. En ningún caso se admitirá la federación de Comunidades Autónomas.
2. Los Estatutos podrán prever los supuestos, requisitos y términos en que las Comunidades Autónomas podrán celebrar convenios entre sí para la gestión y prestación de servicios propios de las mismas, así como el carácter y efectos de la correspondiente comunicación a las Cortes Generales. En los demás supuestos, los acuerdos de cooperación entre las Comunidades Autónomas necesitarán la autorización de las Cortes Generales.
**Artículo 146**
El proyecto de Estatuto será elaborado por una asamblea compuesta por los miembros de la Diputación u órgano interinsular de las provincias afectadas y por los Diputados y Senadores elegidos en ellas y será elevado a las Cortes Generales para su tramitación como ley.
**Artículo 147**
1. Dentro de los términos de la presente Constitución, los Estatutos serán la norma institucional básica de cada Comunidad Autónoma y el Estado los reconocerá y amparará como parte integrante de su ordenamiento jurídico.
2. Los Estatutos de autonomía deberán contener:
a) La denominación de la Comunidad que mejor corresponda a su identidad histórica.
b) La delimitación de su territorio.
c) La denominación, organización y sede de las instituciones autónomas propias.
d) Las competencias asumidas dentro del marco establecido en la Constitución y las bases para el traspaso de los servicios correspondientes a las mismas.
3. La reforma de los Estatutos se ajustará al procedimiento establecido en los mismos y requerirá, en todo caso, la aprobación por las Cortes Generales, mediante ley orgánica.
**Artículo 148**
1. Las Comunidades Autónomas podrán asumir competencias en las siguientes materias:
1.ª Organización de sus instituciones de autogobierno.
2.ª Las alteraciones de los términos municipales comprendidos en su territorio y, en general, las funciones que correspondan a la Administración del Estado sobre las Corporaciones locales y cuya transferencia autorice la legislación sobre Régimen Local.
3.ª Ordenación del territorio, urbanismo y vivienda.
4.ª Las obras públicas de interés de la Comunidad Autónoma en su propio territorio.
5.ª Los ferrocarriles y carreteras cuyo itinerario se desarrolle íntegramente en el territorio de la Comunidad Autónoma y, en los mismos términos, el transporte desarrollado por estos medios o por cable.
6.ª Los puertos de refugio, los puertos y aeropuertos deportivos y, en general, los que no desarrollen actividades comerciales.
7.ª La agricultura y ganadería, de acuerdo con la ordenación general de la economía.
8.ª Los montes y aprovechamientos forestales.
9.ª La gestión en materia de protección del medio ambiente.
10.ª Los proyectos, construcción y explotación de los aprovechamientos hidráulicos, canales y regadíos de interés de la Comunidad Autónoma; las aguas minerales y termales.
11.ª La pesca en aguas interiores, el marisqueo y la acuicultura, la caza y la pesca fluvial.
12.ª Ferias interiores.
13.ª El fomento del desarrollo económico de la Comunidad Autónoma dentro de los objetivos marcados por la política económica nacional.
14.ª La artesanía.
15.ª Museos, bibliotecas y conservatorios de música de interés para la Comunidad Autónoma.
16.ª Patrimonio monumental de interés de la Comunidad Autónoma.
17.ª El fomento de la cultura, de la investigación y, en su caso, de la enseñanza de la lengua de la Comunidad Autónoma.
18.ª Promoción y ordenación del turismo en su ámbito territorial.
19.ª Promoción del deporte y de la adecuada utilización del ocio.
20.ª Asistencia social.
21.ª Sanidad e higiene.
22.ª La vigilancia y protección de sus edificios e instalaciones. La coordinación y demás facultades en relación con las policías locales en los términos que establezca una ley orgánica.
2. Transcurridos cinco años, y mediante la reforma de sus Estatutos, las Comunidades Autónomas podrán ampliar sucesivamente sus competencias dentro del marco establecido en el artículo 149.
**Artículo 149**
1. El Estado tiene competencia exclusiva sobre las siguientes materias:
1.ª La regulación de las condiciones básicas que garanticen la igualdad de todos los españoles en el ejercicio de los derechos y en el cumplimiento de los deberes constitucionales.
2.ª Nacionalidad, inmigración, emigración, extranjería y derecho de asilo.
3.ª Relaciones internacionales.
4.ª Defensa y Fuerzas Armadas.
5.ª Administración de Justicia.
6.ª Legislación mercantil, penal y penitenciaria; legislación procesal, sin perjuicio de las necesarias especialidades que en este orden se deriven de las particularidades del derecho sustantivo de las Comunidades Autónomas.
7.ª Legislación laboral; sin perjuicio de su ejecución por los órganos de las Comunidades Autónomas.
8.ª Legislación civil, sin perjuicio de la conservación, modificación y desarrollo por las Comunidades Autónomas de los derechos civiles, forales o especiales, allí donde existan. En todo caso, las reglas relativas a la aplicación y eficacia de las normas jurídicas, relaciones jurídico-civiles relativas a las formas de matrimonio, ordenación de los registros e instrumentos públicos, bases de las obligaciones contractuales, normas para resolver los conflictos de leyes y determinación de las fuentes del Derecho, con respeto, en este último caso, a las normas de derecho foral o especial.
9.ª Legislación sobre propiedad intelectual e industrial.
10.ª Régimen aduanero y arancelario; comercio exterior.
11.ª Sistema monetario: divisas, cambio y convertibilidad; bases de la ordenación de crédito, banca y seguros.
12.ª Legislación sobre pesas y medidas, determinación de la hora oficial.
13.ª Bases y coordinación de la planificación general de la actividad económica.
14.ª Hacienda general y Deuda del Estado.
15.ª Fomento y coordinación general de la investigación científica y técnica.
16.ª Sanidad exterior. Bases y coordinación general de la sanidad. Legislación sobre productos farmacéuticos.
17.ª Legislación básica y régimen económico de la Seguridad Social, sin perjuicio de la ejecución de sus servicios por las Comunidades Autónomas.
18.ª Las bases del régimen jurídico de las Administraciones públicas y del régimen estatutario de sus funcionarios que, en todo caso, garantizarán a los administrados un tratamiento común ante ellas; el procedimiento administrativo común, sin perjuicio de las especialidades derivadas de la organización propia de las Comunidades Autónomas; legislación sobre expropiación forzosa; legislación básica sobre contratos y concesiones administrativas y el sistema de responsabilidad de todas las Administraciones públicas.
19.ª Pesca marítima, sin perjuicio de las competencias que en la ordenación del sector se atribuyan a las Comunidades Autónomas.
20.ª Marina mercante y abanderamiento de buques; iluminación de costas y señales marítimas; puertos de interés general; aeropuertos de interés general; control del espacio aéreo, tránsito y transporte aéreo, servicio meteorológico y matriculación de aeronaves.
21.ª Ferrocarriles y transportes terrestres que transcurran por el territorio de más de una Comunidad Autónoma; régimen general de comunicaciones; tráfico y circulación de vehículos a motor; correos y telecomunicaciones; cables aéreos, submarinos y radiocomunicación.
22.ª La legislación, ordenación y concesión de recursos y aprovechamientos hidráulicos cuando las aguas discurran por más de una Comunidad Autónoma, y la autorización de las instalaciones eléctricas cuando su aprovechamiento afecte a otra Comunidad o el transporte de energía salga de su ámbito territorial.
23.ª Legislación básica sobre protección del medio ambiente, sin perjuicio de las facultades de las Comunidades Autónomas de establecer normas adicionales de protección. La legislación básica sobre montes, aprovechamientos forestales y vías pecuarias.
24.ª Obras públicas de interés general o cuya realización afecte a más de una Comunidad Autónoma.
25.ª Bases de régimen minero y energético.
26.ª Régimen de producción, comercio, tenencia y uso de armas y explosivos.
27.ª Normas básicas del régimen de prensa, radio y televisión y, en general, de todos los medios de comunicación social, sin perjuicio de las facultades que en su desarrollo y ejecución correspondan a las Comunidades Autónomas.
28.ª Defensa del patrimonio cultural, artístico y monumental español contra la exportación y la expoliación; museos, bibliotecas y archivos de titularidad estatal, sin perjuicio de su gestión por parte de las Comunidades Autónomas.
29.ª Seguridad pública, sin perjuicio de la posibilidad de creación de policías por las Comunidades Autónomas en la forma que se establezca en los respectivos Estatutos en el marco de lo que disponga una ley orgánica.
30.ª Regulación de las condiciones de obtención, expedición y homologación de títulos académicos y profesionales y normas básicas para el desarrollo del artículo 27 de la Constitución, a fin de garantizar el cumplimiento de las obligaciones de los poderes públicos en esta materia.
31.ª Estadística para fines estatales.
32.ª Autorización para la convocatoria de consultas populares por vía de referéndum.
2. Sin perjuicio de las competencias que podrán asumir las Comunidades Autónomas, el Estado considerará el servicio de la cultura como deber y atribución esencial y facilitará la comunicación cultural entre las Comunidades Autónomas, de acuerdo con ellas.
3. Las materias no atribuidas expresamente al Estado por esta Constitución podrán corresponder a las Comunidades Autónomas, en virtud de sus respectivos Estatutos. La competencia sobre las materias que no se hayan asumido por los Estatutos de Autonomía corresponderá al Estado, cuyas normas prevalecerán, en caso de conflicto, sobre las de las Comunidades Autónomas en todo lo que no esté atribuido a la exclusiva competencia de éstas. El derecho estatal será, en todo caso, supletorio del derecho de las Comunidades Autónomas.
**Artículo 150**
1. Las Cortes Generales, en materias de competencia estatal, podrán atribuir a todas o a alguna de las Comunidades Autónomas la facultad de dictar, para sí mismas, normas legislativas en el marco de los principios, bases y directrices fijados por una ley estatal. Sin perjuicio de la competencia de los Tribunales, en cada ley marco se establecerá la modalidad del control de las Cortes Generales sobre estas normas legislativas de las Comunidades Autónomas.
2. El Estado podrá transferir o delegar en las Comunidades Autónomas, mediante ley orgánica, facultades correspondientes a materia de titularidad estatal que por su propia naturaleza sean susceptibles de transferencia o delegación. La ley preverá en cada caso la correspondiente transferencia de medios financieros, así como las formas de control que se reserve el Estado.
3. El Estado podrá dictar leyes que establezcan los principios necesarios para armonizar las disposiciones normativas de las Comunidades Autónomas, aun en el caso de materias atribuidas a la competencia de éstas, cuando así lo exija el interés general. Corresponde a las Cortes Generales, por mayoría absoluta de cada Cámara, la apreciación de esta necesidad.
**Artículo 151**
1. No será preciso dejar transcurrir el plazo de cinco años, a que se refiere el apartado 2 del artículo 148, cuando la iniciativa del proceso autonómico sea acordada dentro del plazo del artículo 143.2, además de por las Diputaciones o los órganos interinsulares correspondientes, por las tres cuartas partes de los municipios de cada una de las provincias afectadas que representen, al menos, la mayoría del censo electoral de cada una de ellas y dicha iniciativa sea ratificada mediante referéndum por el voto afirmativo de la mayoría absoluta de los electores de cada provincia en los términos que establezca una ley orgánica.
2. En el supuesto previsto en el apartado anterior, el procedimiento para la elaboración del Estatuto será el siguiente:
1.º El Gobierno convocará a todos los Diputados y Senadores elegidos en las circunscripciones comprendidas en el ámbito territorial que pretenda acceder al autogobierno, para que se constituyan en Asamblea, a los solos efectos de elaborar el correspondiente proyecto de Estatuto de autonomía, mediante el acuerdo de la mayoría absoluta de sus miembros.
2.º Aprobado el proyecto de Estatuto por la Asamblea de Parlamentarios, se remitirá a la Comisión Constitucional del Congreso, la cual, dentro del plazo de dos meses, lo examinará con el concurso y asistencia de una delegación de la Asamblea proponente para determinar de común acuerdo su formulación definitiva.
3.º Si se alcanzare dicho acuerdo, el texto resultante será sometido a referéndum del cuerpo electoral de las provincias comprendidas en el ámbito territorial del proyectado Estatuto.
4.º Si el proyecto de Estatuto es aprobado en cada provincia por la mayoría de los votos válidamente emitidos, será elevado a las Cortes Generales. Los plenos de ambas Cámaras decidirán sobre el texto mediante un voto de ratificación. Aprobado el Estatuto, el Rey lo sancionará y lo promulgará como ley.
5.º De no alcanzarse el acuerdo a que se refiere el apartado 2 de este número, el proyecto de Estatuto será tramitado como proyecto de ley ante las Cortes Generales. El texto aprobado por éstas será sometido a referéndum del cuerpo electoral de las provincias comprendidas en el ámbito territorial del proyectado Estatuto. En caso de ser aprobado por la mayoría de los votos válidamente emitidos en cada provincia, procederá su promulgación en los términos del párrafo anterior.
3. En los casos de los párrafos 4.º y 5.º del apartado anterior, la no aprobación del proyecto de Estatuto por una o varias provincias no impedirá la constitución entre las restantes de la Comunidad Autónoma proyectada, en la forma que establezca la ley orgánica prevista en el apartado 1 de este artículo.
**Artículo 152**
1. En los Estatutos aprobados por el procedimiento a que se refiere el artículo anterior, la organización institucional autonómica se basará en una Asamblea Legislativa, elegida por sufragio universal, con arreglo a un sistema de representación proporcional que asegure, además, la representación de las diversas zonas del territorio; un Consejo de Gobierno con funciones ejecutivas y administrativas y un Presidente, elegido por la Asamblea, de entre sus miembros, y nombrado por el Rey, al que corresponde la dirección del Consejo de Gobierno, la suprema representación de la respectiva Comunidad y la ordinaria del Estado en aquélla. El Presidente y los miembros del Consejo de Gobierno serán políticamente responsables ante la Asamblea.
Un Tribunal Superior de Justicia, sin perjuicio de la jurisdicción que corresponde al Tribunal Supremo, culminará la organización judicial en el ámbito territorial de la Comunidad Autónoma. En los Estatutos de las Comunidades Autónomas podrán establecerse los supuestos y las formas de participación de aquéllas en la organización de las demarcaciones judiciales del territorio. Todo ello de conformidad con lo previsto en la ley orgánica del poder judicial y dentro de la unidad e independencia de éste.
Sin perjuicio de lo dispuesto en el artículo 123, las sucesivas instancias procesales, en su caso, se agotarán ante órganos judiciales radicados en el mismo territorio de la Comunidad Autónoma en que esté el órgano competente en primera instancia.
2. Una vez sancionados y promulgados los respectivos Estatutos, solamente podrán ser modificados mediante los procedimientos en ellos establecidos y con referéndum entre los electores inscritos en los censos correspondientes.
3. Mediante la agrupación de municipios limítrofes, los Estatutos podrán establecer circunscripciones territoriales propias, que gozarán de plena personalidad jurídica.
Artículo 153
El control de la actividad de los órganos de las Comunidades Autónomas se ejercerá:
a) Por el Tribunal Constitucional, el relativo a la constitucionalidad de sus disposiciones normativas con fuerza de ley.
b) Por el Gobierno, previo dictamen del Consejo de Estado, el del ejercicio de funciones delegadas a que se refiere el apartado 2 del artículo 150.
c) Por la jurisdicción contencioso-administrativa, el de la administración autónoma y sus normas reglamentarias.
d) Por el Tribunal de Cuentas, el económico y presupuestario.
**Artículo 154**
Un Delegado nombrado por el Gobierno dirigirá la Administración del Estado en el territorio de la Comunidad Autónoma y la coordinará, cuando proceda, con la administración propia de la Comunidad.
**Artículo 155**
1. Si una Comunidad Autónoma no cumpliere las obligaciones que la Constitución u otras leyes le impongan, o actuare de forma que atente gravemente al interés general de España, el Gobierno, previo requerimiento al Presidente de la Comunidad Autónoma y, en el caso de no ser atendido, con la aprobación por mayoría absoluta del Senado, podrá adoptar las medidas necesarias para obligar a aquélla al cumplimiento forzoso de dichas obligaciones o para la protección del mencionado interés general.
2. Para la ejecución de las medidas previstas en el apartado anterior, el Gobierno podrá dar instrucciones a todas las autoridades de las Comunidades Autónomas.
**Artículo 156**
1. Las Comunidades Autónomas gozarán de autonomía financiera para el desarrollo y ejecución de sus competencias con arreglo a los principios de coordinación con la Hacienda estatal y de solidaridad entre todos los españoles.
2. Las Comunidades Autónomas podrán actuar como delegados o colaboradores del Estado para la recaudación, la gestión y la liquidación de los recursos tributarios de aquél, de acuerdo con las leyes y los Estatutos.
**Artículo 157**
1. Los recursos de las Comunidades Autónomas estarán constituidos por:
a) Impuestos cedidos total o parcialmente por el Estado; recargos sobre impuestos estatales y otras participaciones en los ingresos del Estado.
b) Sus propios impuestos, tasas y contribuciones especiales.
c) Transferencias de un Fondo de Compensación interterritorial y otras asignaciones con cargo a los Presupuestos Generales del Estado.
d) Rendimientos procedentes de su patrimonio e ingresos de derecho privado.
e) El producto de las operaciones de crédito.
2. Las Comunidades Autónomas no podrán en ningún caso adoptar medidas tributarias sobre bienes situados fuera de su territorio o que supongan obstáculo para la libre circulación de mercancías o servicios.
3. Mediante ley orgánica podrá regularse el ejercicio de las competencias financieras enumeradas en el precedente apartado 1, las normas para resolver los conflictos que pudieran surgir y las posibles formas de colaboración financiera entre las Comunidades Autónomas y el Estado.
**Artículo 158**
1. En los Presupuestos Generales del Estado podrá establecerse una asignación a las Comunidades Autónomas en función del volumen de los servicios y actividades estatales que hayan asumido y de la garantía de un nivel mínimo en la prestación de los servicios públicos fundamentales en todo el territorio español.
2. Con el fin de corregir desequilibrios económicos interterritoriales y hacer efectivo el principio de solidaridad, se constituirá un Fondo de Compensación con destino a gastos de inversión, cuyos recursos serán distribuidos por las Cortes Generales entre las Comunidades Autónomas y provincias, en su caso.

View File

@ -0,0 +1,289 @@
## Bloque 1 Tema 3. El Gobierno. Composición, nombramiento y cese. Funciones. Relaciones con las Cortes Generales
Introducción
El Gobierno es el órgano que ejerce el poder ejecutivo en España.
Dirige la política interior y exterior, la Administración y la defensa del Estado.
Este tema es muy importante en el examen TAI, especialmente en lo relativo al nombramiento del Presidente, las funciones y el control parlamentario.
---
## 1. El Gobierno
El Gobierno está regulado en el Título cuarto de la Constitución, artículos 97 a 107.
---
## 2. Composición del Gobierno
El Gobierno se compone de.
El Presidente del Gobierno.
Los Vicepresidentes, en su caso.
Los Ministros.
---
Importante para examen
El Presidente dirige la acción del Gobierno y coordina a los demás miembros.
---
## 3. Nombramiento del Gobierno
### 3.1 Nombramiento del Presidente
El proceso es el siguiente.
---
El Rey propone un candidato tras consultar a los grupos parlamentarios.
---
El candidato expone su programa ante el Congreso.
---
Se realiza la votación de investidura.
---
En primera votación se requiere mayoría absoluta.
---
Si no se obtiene, se realiza una segunda votación cuarenta y ocho horas después.
En esta segunda votación basta la mayoría simple.
---
Si ningún candidato obtiene la confianza en dos meses, se disuelven las Cortes y se convocan elecciones.
---
### 3.2 Nombramiento de los Ministros
Los ministros son nombrados por el Rey a propuesta del Presidente del Gobierno.
---
Importante para examen
El Rey nombra, pero la iniciativa es del Presidente.
---
## 4. Cese del Gobierno
El Gobierno cesa en los siguientes casos.
---
Tras la celebración de elecciones generales.
---
Por pérdida de la confianza parlamentaria.
---
Por dimisión o fallecimiento del Presidente del Gobierno.
---
Importante
El Gobierno cesante continúa en funciones hasta la toma de posesión del nuevo Gobierno.
---
## 5. Funciones del Gobierno
Según la Constitución, el Gobierno tiene varias funciones.
---
### 5.1 Dirección política
Dirige la política interior y exterior.
Dirige la Administración civil y militar.
Dirige la defensa del Estado.
---
### 5.2 Función ejecutiva
Aplica las leyes y gestiona la Administración.
---
### 5.3 Potestad reglamentaria
Puede dictar reglamentos para desarrollar las leyes.
---
### 5.4 Iniciativa legislativa
El Gobierno puede presentar proyectos de ley.
---
### 5.5 Normas con rango de ley
Puede aprobar.
Decretos leyes en casos de urgente necesidad.
Decretos legislativos por delegación de las Cortes.
---
### 5.6 Función presupuestaria
Elabora el proyecto de Presupuestos Generales del Estado.
---
Importante para examen
El Gobierno puede dictar normas con rango de ley en determinados casos.
---
## 6. Relaciones entre el Gobierno y las Cortes Generales
España tiene un sistema parlamentario.
Esto implica una relación estrecha entre el Gobierno y las Cortes.
---
## 7. Control parlamentario del Gobierno
El Gobierno responde políticamente ante el Congreso de los Diputados.
---
### 7.1 Instrumentos de control
Preguntas parlamentarias.
Interpelaciones.
Mociones.
---
### 7.2 Moción de censura
Permite exigir responsabilidad política al Gobierno.
---
Requiere mayoría absoluta.
Debe incluir un candidato alternativo.
---
Importante para examen
Es una moción de censura constructiva.
---
### 7.3 Cuestión de confianza
La plantea el Presidente del Gobierno.
---
Se aprueba por mayoría simple.
---
Si se pierde, el Gobierno debe dimitir.
---
## 8. Relaciones de colaboración
Además del control, existe colaboración entre Gobierno y Cortes.
---
El Gobierno presenta proyectos de ley.
---
Las Cortes aprueban los Presupuestos.
---
Las Cortes pueden delegar en el Gobierno la potestad legislativa.
---
## 9. Responsabilidad del Gobierno
El Gobierno responde solidariamente de su gestión política ante el Congreso.
---
Idea clave
Todos los miembros del Gobierno responden conjuntamente.
---
## 10. Trampas típicas de examen
Primera trampa
Confundir mayoría absoluta con mayoría simple en la investidura.
---
Segunda trampa
Olvidar que la moción de censura requiere candidato alternativo.
---
Tercera trampa
Pensar que el Rey elige libremente al Presidente.
No es así, depende del Congreso.
---
Cuarta trampa
Confundir decreto ley con decreto legislativo.
---
## Resumen final del tema
El Gobierno ejerce el poder ejecutivo y dirige la política del Estado.
Está compuesto por el Presidente, ministros y en su caso vicepresidentes.
El Presidente es elegido mediante investidura en el Congreso.
El Gobierno cesa en varios supuestos y continúa en funciones hasta su sustitución.
Tiene funciones ejecutivas, normativas y políticas.
Está sometido al control del Congreso mediante instrumentos como la moción de censura y la cuestión de confianza.

File diff suppressed because it is too large Load Diff

View File

@ -87,7 +87,7 @@ La violencia de género no es violencia doméstica en general, sino una forma es
---
### 🧠 Mini-resumen apartado 1
### Mini-resumen apartado 1
- Igualdad → **LO 3/2007**.
- Violencia de género → **LO 1/2004**.
@ -135,7 +135,7 @@ Por razón de:
---
### 🧠 Mini-resumen apartado 2
### Mini-resumen apartado 2
- Norma clave → **Ley 4/2023**.
- Protege orientación, identidad y expresión de género.
@ -198,7 +198,7 @@ La ley crea el:
---
### 🧠 Mini-resumen apartado 3
### Mini-resumen apartado 3
- Discapacidad → **RDL 1/2013** + art. 49 CE.
- Principios: igualdad, accesibilidad e inclusión.
@ -208,7 +208,7 @@ La ley crea el:
---
## 🧠 Mini-resumen final del tema
## Mini-resumen final del tema
- Igualdad → **LO 3/2007**.
- Violencia de género → **LO 1/2004**.

View File

@ -0,0 +1,426 @@
# Bloque 1 · Tema 5
## Políticas de igualdad y contra la violencia de género
## Políticas de igualdad de trato y no discriminación de las personas L G T B I
## Discapacidad y dependencia: régimen jurídico
## Introducción
En este tema vamos a estudiar tres bloques relacionados con las políticas sociales y de igualdad en España.
En primer lugar, las políticas de igualdad y la lucha contra la violencia de género.
En segundo lugar, las políticas de igualdad de trato y no discriminación de las personas L G T B I .
Y por último, el régimen jurídico de la discapacidad y la dependencia.
Se trata de un tema cada vez más importante en el examen, especialmente por su relevancia social y normativa.
## Igualdad entre mujeres y hombres
La igualdad entre mujeres y hombres es un principio fundamental recogido en la Constitución Española.
En concreto, el artículo 14 establece el derecho a la igualdad y a la no discriminación.
Además, el artículo 9.2 obliga a los poderes públicos a promover las condiciones para que la igualdad sea real y efectiva.
Esto es muy importante: no basta con la igualdad formal, sino que se busca una igualdad material.
La norma principal en esta materia es la Ley Orgánica 3/2007 para la igualdad efectiva de mujeres y hombres.
Esta ley establece medidas para eliminar la discriminación y promover la igualdad en todos los ámbitos.
### Principios de la Ley de Igualdad
La Ley Orgánica 3/2007 se basa en varios principios fundamentales.
En primer lugar, el principio de igualdad de trato.
Esto significa que no puede existir discriminación directa ni indirecta por razón de sexo.
La discriminación directa se produce cuando una persona recibe un trato peor por ser mujer u hombre.
La discriminación indirecta se produce cuando una norma aparentemente neutra perjudica especialmente a uno de los sexos.
En segundo lugar, el principio de igualdad de oportunidades.
Este principio busca garantizar que mujeres y hombres tengan las mismas posibilidades en ámbitos como el empleo o la educación.
En tercer lugar, la transversalidad.
Esto significa que la perspectiva de género debe incorporarse en todas las políticas públicas.
Este concepto suele aparecer en el examen.
Y por último, el principio de acción positiva.
Las acciones positivas son medidas específicas para corregir situaciones de desigualdad.
Por ejemplo, programas de apoyo a mujeres en determinados sectores.
## Violencia de género
La violencia de género es una de las manifestaciones más graves de la desigualdad.
Se regula principalmente en la Ley Orgánica 1/2004 de medidas de protección integral contra la violencia de género.
Esta ley define la violencia de género como la violencia que se ejerce contra la mujer por el hecho de serlo, en el ámbito de la pareja o expareja.
Es importante no confundirla con otros tipos de violencia.
La clave es que existe una relación afectiva y una motivación basada en la desigualdad.
Este matiz es muy preguntado en el examen.
### Medidas contra la violencia de género
La Ley Orgánica 1/2004 establece un conjunto de medidas integrales.
En primer lugar, medidas de prevención.
Incluyen campañas de sensibilización y educación en igualdad.
En segundo lugar, medidas de protección a las víctimas.
Por ejemplo, órdenes de protección o asistencia jurídica gratuita.
En tercer lugar, medidas judiciales.
Se crean juzgados específicos de violencia sobre la mujer.
Y en cuarto lugar, medidas sociales.
Incluyen apoyo psicológico, ayudas económicas y recursos de acogida.
Es importante entender que se trata de un enfoque integral.
### Derechos de las víctimas
Las víctimas de violencia de género tienen derechos específicos.
Entre ellos, el derecho a la información y a la asistencia social.
También el derecho a la asistencia jurídica gratuita.
Y el derecho a medidas de protección.
Además, tienen derechos laborales, como la reducción o reordenación de la jornada.
Este punto puede aparecer en preguntas tipo test.
### Esquema mental para memorizar
Para estudiar este bloque, puedes dividirlo en tres partes.
En primer lugar, la igualdad entre mujeres y hombres y la Ley Orgánica 3/2007.
En segundo lugar, los conceptos clave como discriminación directa, indirecta, transversalidad y acción positiva.
Y en tercer lugar, la violencia de género y la Ley Orgánica 1/2004.
Este esquema facilita mucho la memorización.
### Claves de examen
Para terminar este apartado, hay varias ideas clave.
En primer lugar, el artículo 14 y el artículo 9.2 de la Constitución.
En segundo lugar, la diferencia entre discriminación directa e indirecta.
En tercer lugar, el concepto de transversalidad.
Y en cuarto lugar, la definición de violencia de género y su ámbito.
Este bloque es bastante teórico, pero muy preguntable.
## Políticas de igualdad de trato y no discriminación de las personas LGTBI
En este apartado vamos a estudiar la normativa y los principios que garantizan la igualdad de trato y la no discriminación de las personas L G T B I .
Se trata de un bloque relativamente reciente, pero cada vez más presente en los exámenes.
La norma principal en esta materia es la Ley 4/2023 para la igualdad real y efectiva de las personas trans y para la garantía de los derechos de las personas LGTBI.
### Conceptos básicos
Para entender este bloque, es fundamental conocer una serie de conceptos clave.
En primer lugar, la orientación sexual.
Hace referencia a la atracción emocional, afectiva o sexual hacia otras personas.
Por ejemplo, heterosexualidad, homosexualidad o bisexualidad.
En segundo lugar, la identidad de género.
Se refiere a la vivencia interna del género tal y como cada persona la siente.
Puede coincidir o no con el sexo asignado al nacer.
En tercer lugar, la expresión de género.
Es la forma en que una persona manifiesta su género a través de su apariencia o comportamiento.
Estos conceptos son muy importantes y suelen aparecer en preguntas tipo test.
### Principio de igualdad de trato
El principio de igualdad de trato implica que ninguna persona puede ser discriminada por razón de orientación sexual, identidad de género o expresión de género.
Esto incluye tanto la discriminación directa como la indirecta.
La discriminación directa se produce cuando una persona recibe un trato menos favorable.
La discriminación indirecta se produce cuando una norma aparentemente neutra perjudica a un colectivo.
Además, la ley reconoce otras formas de discriminación.
Por ejemplo, la discriminación por asociación, cuando una persona es discriminada por su relación con otra.
Y la discriminación por error, cuando se discrimina a alguien por una característica que en realidad no tiene.
Estos matices son muy preguntables en examen.
### Ámbitos de aplicación
Las políticas de igualdad L G T B I se aplican en múltiples ámbitos.
En primer lugar, en el empleo.
Se prohíbe la discriminación en el acceso al trabajo, en la promoción y en las condiciones laborales.
En segundo lugar, en la educación.
Se promueve el respeto a la diversidad y la inclusión.
En tercer lugar, en la sanidad.
Se garantiza una atención adecuada, respetando la identidad de género.
Y en general, en todos los servicios públicos.
Este enfoque transversal es clave y conecta con otros temas.
### Medidas de protección
La normativa establece medidas para proteger a las personas L G T B I .
En primer lugar, medidas de prevención.
Incluyen campañas de sensibilización y formación.
En segundo lugar, medidas de detección y actuación frente a la discriminación.
Por ejemplo, protocolos en centros educativos o en el ámbito laboral.
En tercer lugar, medidas de apoyo a las víctimas.
Incluyen asistencia psicológica, jurídica y social.
Es importante entender que estas medidas buscan garantizar la igualdad real.
### Especial referencia a las personas trans
La ley presta especial atención a las personas trans.
Se reconoce el derecho a la autodeterminación de género.
Esto significa que una persona puede modificar su sexo registral sin necesidad de requisitos médicos.
Este punto es muy relevante y ha sido objeto de debate.
También se garantizan derechos en ámbitos como la educación, la sanidad y el empleo.
Este bloque suele aparecer en preguntas tipo test por su actualidad.
### Esquema mental para memorizar
Para estudiar este apartado, puedes dividirlo en cuatro bloques.
En primer lugar, los conceptos básicos: orientación, identidad y expresión de género.
En segundo lugar, el principio de igualdad de trato y los tipos de discriminación.
En tercer lugar, los ámbitos de aplicación.
Y en cuarto lugar, las medidas de protección.
Este esquema ayuda a organizar el contenido.
### Claves de examen
Para terminar, hay varias ideas clave.
En primer lugar, los conceptos básicos, especialmente identidad de género.
En segundo lugar, los tipos de discriminación, incluyendo asociación y error.
En tercer lugar, el carácter transversal de estas políticas.
Y en cuarto lugar, el derecho a la autodeterminación de género.
Es un bloque relativamente corto, pero con conceptos muy concretos que conviene dominar.
## Discapacidad y dependencia: régimen jurídico
En este último apartado del tema vamos a estudiar el régimen jurídico de la discapacidad y la dependencia.
Se trata de dos conceptos relacionados, pero no idénticos, que cuentan con regulación propia.
Ambos tienen como objetivo garantizar la igualdad, la inclusión y la protección social de las personas en situación de vulnerabilidad.
### Concepto de discapacidad
La discapacidad se refiere a la situación en la que una persona presenta deficiencias físicas, mentales, intelectuales o sensoriales a largo plazo.
Estas deficiencias, en interacción con diversas barreras, pueden impedir su participación plena y efectiva en la sociedad.
Es importante entender que el concepto actual no es solo médico, sino también social.
Esto significa que la discapacidad no depende únicamente de la persona, sino también del entorno.
Este enfoque suele aparecer en el examen.
### Normativa básica sobre discapacidad
La norma principal es el Texto Refundido de la Ley General de derechos de las personas con discapacidad y de su inclusión social, aprobado por Real Decreto Legislativo 1/2013.
Esta ley reconoce derechos fundamentales y establece medidas para garantizar la igualdad de oportunidades.
Entre sus principios destacan:
La igualdad de trato.
La no discriminación.
La accesibilidad universal.
Y la inclusión social.
Estos principios son muy importantes para preguntas tipo test.
### Medidas en materia de discapacidad
La normativa establece diferentes medidas.
En primer lugar, medidas de accesibilidad.
Se busca eliminar barreras físicas, tecnológicas y de comunicación.
En segundo lugar, medidas de empleo.
Por ejemplo, la reserva de un porcentaje de puestos para personas con discapacidad.
En tercer lugar, medidas educativas.
Se promueve la educación inclusiva.
Y en cuarto lugar, medidas de acción positiva.
Para corregir situaciones de desigualdad.
Este esquema es muy útil para estudiar.
### Concepto de dependencia
La dependencia se define como el estado de carácter permanente en el que una persona necesita la ayuda de otras para realizar actividades básicas de la vida diaria.
Por ejemplo, comer, vestirse o desplazarse.
Es importante distinguir dependencia de discapacidad.
No todas las personas con discapacidad son dependientes, ni todas las personas dependientes tienen discapacidad reconocida.
Este matiz es muy preguntado.
### Normativa básica sobre dependencia
La norma principal es la Ley 39/2006 de promoción de la autonomía personal y atención a las personas en situación de dependencia.
Esta ley crea el Sistema para la Autonomía y Atención a la Dependencia, conocido como SAAD.
Su objetivo es garantizar una atención adecuada a las personas dependientes.
### Grados de dependencia
La ley establece tres grados de dependencia.
En primer lugar, grado uno, dependencia moderada.
La persona necesita ayuda al menos una vez al día.
En segundo lugar, grado dos, dependencia severa.
La persona necesita ayuda varias veces al día.
Y en tercer lugar, grado tres, gran dependencia.
La persona necesita ayuda de forma continua.
Estos grados son muy importantes y suelen preguntarse directamente.
### Prestaciones del sistema
El sistema de dependencia ofrece diferentes tipos de prestaciones.
Por un lado, servicios.
Por ejemplo, ayuda a domicilio, centros de día o residencias.
Por otro lado, prestaciones económicas.
Por ejemplo, ayudas para cuidados en el entorno familiar.
También existen prestaciones vinculadas a servicios.
Este esquema es muy típico de examen.
### Esquema mental para memorizar
Para estudiar este bloque, puedes dividirlo en dos partes.
En primer lugar, la discapacidad y su normativa.
Y en segundo lugar, la dependencia y el sistema SAAD.
Dentro de la dependencia, es clave recordar los grados y las prestaciones.
Este esquema simplifica mucho el estudio.
### Claves de examen
Para terminar, hay varias ideas clave.
En primer lugar, la diferencia entre discapacidad y dependencia.
En segundo lugar, la ley 1/2013 y la ley 39/2006.
En tercer lugar, los grados de dependencia.
Y en cuarto lugar, los tipos de prestaciones.
Este bloque es muy técnico, pero también muy preguntable.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,64 @@
Bloque 1 Tema 7. Protección de datos personales y Derechos digitales
Introducción al derecho de protección de datos
La protección de datos personales es un derecho fundamental recogido en el artículo 18 punto 4 de la Constitución Española. Su objetivo es limitar el uso de la informática para garantizar el honor y la intimidad personal de los ciudadanos. Para un Técnico Auxiliar de Informática de la Administración del Estado, este tema es transversal a toda su actividad técnica.
1. Marco Normativo Actual
El sistema legal español se basa en la convivencia de dos normas principales que debemos conocer perfectamente.
Primero. El Reglamento General de Protección de Datos, conocido por sus siglas como R G P D. Es el Reglamento Europeo 2016 barra 679. Es una norma de aplicación directa en toda la Unión Europea desde mayo de 2018.
Segundo. La Ley Orgánica 3 barra 2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales, conocida como L O P D G D D. Esta ley adapta el reglamento europeo al derecho español y añade un catálogo de derechos digitales en su Título Décimo.
2. Principios del Tratamiento de Datos
Todo tratamiento de datos en la Administración Pública debe cumplir obligatoriamente con los siguientes principios:
Uno. Licitud, lealtad y transparencia. Los datos deben tratarse de forma legal y el ciudadano debe ser informado de forma clara.
Dos. Limitación de la finalidad. Los datos solo se recogen para fines determinados, explícitos y legítimos. No pueden usarse luego para algo distinto.
Tres. Minimización de datos. Solo se tratarán los datos que sean estrictamente necesarios para la finalidad perseguida.
Cuatro. Exactitud. Los datos deben estar actualizados. Si son inexactos, deben suprimirse o rectificarse sin demora.
Cinco. Limitación del plazo de conservación. Los datos no se guardan para siempre. Deben mantenerse solo el tiempo necesario para los fines del tratamiento.
Seis. Integridad y confidencialidad. Es el principio de seguridad. Debemos garantizar la protección contra el tratamiento no autorizado, la pérdida o la destrucción accidental mediante medidas técnicas adecuadas.
Siete. Responsabilidad proactiva. Este es el principio estrella del examen. Obliga al responsable a aplicar medidas técnicas y organizativas eficaces y, lo más importante, a ser capaz de demostrar dicho cumplimiento ante las autoridades.
3. Bases Jurídicas para el Tratamiento de Datos
Para que la Administración pueda tratar datos personales, debe existir una base legal. Según el artículo 6 del R G P D, las más comunes en el sector público son:
Punto A. El consentimiento del interesado para fines específicos.
Punto B. El cumplimiento de una obligación legal del responsable.
Punto C. El cumplimiento de una misión realizada en interés público o en el ejercicio de poderes públicos. Esta es la base principal que usamos los técnicos en la Administración General del Estado.
4. Derechos de las Personas: El Modelo A R S O P L
Los ciudadanos tienen el control sobre sus datos mediante el ejercicio de estos derechos, que son gratuitos para el interesado:
- Derecho de Acceso: El ciudadano puede saber si se están tratando sus datos y obtener una copia.
- Derecho de Rectificación: Para corregir datos erróneos o incompletos.
- Derecho de Supresión, también llamado derecho al olvido: Para eliminar los datos cuando ya no son necesarios o el tratamiento es ilícito.
- Derecho de Oposición: Para que no se realice un tratamiento basado en el interés público si existen motivos personales del ciudadano.
- Derecho a la Limitación del Tratamiento: El ciudadano pide que se detenga el uso de sus datos mientras se decide sobre una reclamación.
- Derecho a la Portabilidad: Recibir los datos en un formato electrónico estructurado para trasladarlos a otro responsable.
Nota importante para el examen: El responsable debe responder en el plazo máximo de un mes. Este plazo puede prorrogarse otros dos meses si la solicitud es muy compleja, informando siempre al interesado.
5. Figuras Principales en la Protección de Datos
En el entorno administrativo debemos distinguir tres roles:
- Primero. El Responsable del Tratamiento. Es el órgano administrativo que decide qué datos se piden y para qué se usan.
- Segundo. El Encargado del Tratamiento. Es la empresa o entidad externa que trata los datos siguiendo las instrucciones del responsable. Debe haber un contrato de por medio.
- Tercero. El Delegado de Protección de Datos, o D P D. Es una figura obligatoria en todos los organismos públicos. Actúa con independencia, supervisa el cumplimiento de la ley y es el enlace con la Agencia Española de Protección de Datos.
6. Garantía de los Derechos Digitales
La ley española innova creando el Título Décimo para proteger al ciudadano en el entorno de Internet. Los puntos más preguntables son:
- Derecho a la neutralidad de Internet: Los proveedores deben tratar el tráfico de forma equitativa.
- Derecho a la desconexión digital: En el ámbito laboral, los empleados públicos tienen derecho a no responder comunicaciones fuera de su horario de trabajo.
- Derecho a la intimidad frente a dispositivos digitales: Regula el uso de cámaras y sistemas de geolocalización en el trabajo, que deben ser informados previamente.
- Derecho al testamento digital: Permite que familiares o herederos gestionen los contenidos en redes sociales de una persona fallecida.

View File

@ -29,7 +29,7 @@ Están obligados a relacionarse electrónicamente, entre otros:
- Profesionales colegiados para trámites derivados de su actividad.
- Empleados públicos en el ejercicio de sus funciones.
### 🧠 Mini-resumen apartado 1
### Mini-resumen apartado 1
- Derecho general de acceso electrónico.
- Determinados sujetos están obligados.
@ -53,7 +53,7 @@ Debe garantizar:
- Integridad de la información.
- Disponibilidad y accesibilidad permanente.
### 🧠 Mini-resumen apartado 2
### Mini-resumen apartado 2
- Uso obligatorio de medios electrónicos.
- La sede electrónica es el punto de acceso seguro.
@ -74,7 +74,7 @@ Permite:
- La fecha y hora oficial determina el cómputo de plazos.
- Los registros electrónicos se rigen por la fecha y hora oficial de la sede.
### 🧠 Mini-resumen apartado 3
### Mini-resumen apartado 3
- Registro electrónico general obligatorio.
- Presentación 24/7.
@ -94,10 +94,10 @@ En determinados casos son obligatorias.
- La notificación se entiende practicada cuando se accede a su contenido.
- Si no se accede en **10 días naturales**, se entiende rechazada.
👉 Muy típico de examen:
**Muy típico de examen:**
Rechazo por inacción tras 10 días.
### 🧠 Mini-resumen apartado 4
### Mini-resumen apartado 4
- Notificación preferente u obligatoria.
- Rechazo automático a los 10 días.
@ -124,7 +124,7 @@ Se aplica a:
- Proporcionalidad.
- Mejora continua.
### 🧠 Mini-resumen apartado 5
### Mini-resumen apartado 5
- ENS = seguridad de la información.
- Aplicable al sector público.
@ -145,7 +145,7 @@ El ENI establece:
- Interoperabilidad técnica.
- Reutilización y cooperación.
### 🧠 Mini-resumen apartado 6
### Mini-resumen apartado 6
- ENI = intercambio de información.
- Garantiza interoperabilidad entre Administraciones.

View File

@ -0,0 +1,73 @@
Bloque 1 Tema 8. Acceso electrónico, Seguridad e Interoperabilidad
Introducción al Acceso Electrónico
El acceso electrónico a los servicios públicos no es solo una opción, sino un derecho de los ciudadanos y una obligación para la Administración. Se fundamenta principalmente en la Ley 39 barra 2015 del Procedimiento Administrativo Común y en la Ley 40 barra 2015 del Régimen Jurídico del Sector Público.
1. Registros y Notificaciones Electrónicas
1.1 El Registro Electrónico
Cada Administración debe disponer de un Registro Electrónico General. Es importante recordar para el examen que los registros son plenamente interoperables. Los asientos se anotan en el momento en que se presentan, generando un recibo con fecha y hora oficial, sincronizada con el Real Instituto y Observatorio de la Armada.
1.2 Las Notificaciones Electrónicas
La notificación electrónica es la forma preferente de comunicación. Se entiende practicada en el momento en que se produzca el acceso a su contenido. Un dato clave de examen: si la notificación se pone a disposición y el interesado no accede a ella en el plazo de diez días naturales, se considera rechazada y el procedimiento continúa.
2. El Esquema Nacional de Seguridad o E N S
El E N S está regulado por el Real Decreto 311 barra 2022. Su objetivo es crear las condiciones necesarias de confianza en el uso de los medios electrónicos.
2.1 Los Principios Básicos del E N S
Son siete puntos fundamentales:
Primero. Seguridad como proceso integral.
Segundo. Gestión de la seguridad basada en riesgos.
Tercero. Prevención, detección, respuesta y recuperación.
Cuarto. Existencia de líneas de defensa.
Quinto. Vigilancia continua.
Sexto. Reevaluación periódica.
Séptimo. Diferenciación de responsabilidades.
2.2 Dimensiones de la Seguridad
Para proteger los activos, el E N S define cinco dimensiones que debes memorizar:
Disponibilidad: Que la información esté cuando se necesite.
Autenticidad: Asegurar quién es el autor.
Integridad: Que la información no haya sido modificada.
Confidencialidad: Solo personas autorizadas acceden.
Trazabilidad: Saber quién hizo qué y cuándo.
2.3 Categorización de Sistemas
Los sistemas se clasifican en categorías Básica, Media o Alta, dependiendo del impacto que tendría un incidente de seguridad sobre las dimensiones anteriores.
3. El Esquema Nacional de Interoperabilidad o E N I
Regulado por el Real Decreto 4 barra 2010. La interoperabilidad es la capacidad de los sistemas de intercambiar datos y compartir información.
3.1 Dimensiones de la Interoperabilidad
El E N I define cuatro niveles:
Uno. Interoperabilidad Organizativa: Convenios y procesos de negocio.
Dos. Interoperabilidad Semántica: Asegurar que el significado de los datos es el mismo para emisor y receptor.
Tres. Interoperabilidad Técnica: Estándares, hardware y software.
Cuatro. Interoperabilidad Temporal: Garantizar que los documentos digitales se conserven y sean legibles a largo plazo.
4. Las Normas Técnicas de Interoperabilidad o N T I
Las N T I son las herramientas que desarrollan aspectos concretos del E N I para que todas las Administraciones hablen el mismo idioma. Las más importantes para un T A I son:
La N T I de Documento Electrónico.
La N T I de Expediente Electrónico.
La N T I de Digitalización de documentos.
Y la N T I de Política de gestión de documentos electrónicos.
Recuerda que un Expediente Electrónico es el conjunto de documentos electrónicos correspondientes a un procedimiento administrativo, y debe incluir obligatoriamente un Índice Electrónico firmado por la Administración para garantizar su integridad.
5. Instrumentos para la Interoperabilidad
Existen tres herramientas clave que el E N I pone a disposición de los técnicos:
Primero. El Inventario de Información Administrativa o S I A.
Segundo. El Centro de Transferencia de Tecnología o C T T, donde se comparten soluciones de software libre entre administraciones.
Tercero. La Red de comunicación de las Administraciones Públicas españolas, conocida como Red S A R A.
Resumen Final para Repaso
El éxito de la Administración Digital se basa en el equilibrio entre el E N S, que protege la información, y el E N I, que permite que esa información fluya. Como técnico, tu labor será aplicar las N T I para asegurar que cada documento y expediente electrónico cumpla con los estándares legales y técnicos necesarios para su validez jurídica.

View File

@ -0,0 +1,64 @@
Bloque 1 Tema 9. Instrumentos de acceso, identificación y servicios comunes
Introducción a los Instrumentos de Acceso
El Tema 9 se centra en "cómo" el ciudadano interactúa físicamente con la Administración y "cómo" la Administración garantiza que el ciudadano es quien dice ser. Todo esto se regula principalmente en la Ley 39 barra 2015 y la Ley 40 barra 2015.
1. Sedes Electrónicas y Canales de Acceso
1.1 La Sede Electrónica
La sede electrónica es la dirección electrónica disponible para los ciudadanos a través de redes de telecomunicaciones. Su titularidad, gestión y administración corresponde a una Administración Pública.
Un punto clave para el examen: la sede implica responsabilidad. La Administración titular garantiza la integridad, veracidad y actualización de la información y los servicios. Además, toda sede debe utilizar protocolos de comunicación segura, como el H T T P S, para que el ciudadano sepa que está en un sitio oficial.
1.2 Canales de Acceso
Los ciudadanos pueden acceder a los servicios por tres vías:
Primero. El Internet, a través de las sedes.
Segundo. El acceso presencial, mediante las oficinas de asistencia en materia de registros.
Tercero. El acceso telefónico, a través de los centros de atención al usuario.
2. Identificación y Autenticación
Este es el núcleo técnico del tema. Debemos distinguir entre Identificación, que es decir "quién soy", y Firma, que es "dar el consentimiento" a un documento.
2.1 Sistemas de Identificación para Ciudadanos
Las Administraciones Públicas están obligadas a admitir:
- Sistemas basados en certificados electrónicos cualificados, como el D N I electrónico.
- Sistemas de sello electrónico cualificado.
- Sistemas de clave concertada y otros sistemas, como el sistema Clave.
2.2 El Sistema Clave:
Clave es la plataforma común del Sector Público Administrativo Estatal para la identificación y firma electrónica. Tiene dos modalidades principales que debes conocer:
- Clave Ocasional o Clave PIN: Orientada a accesos esporádicos, con una validez muy limitada en el tiempo.
- Clave Permanente: Orientada a usuarios habituales, basada en el uso de una contraseña y, cuando es necesario, un segundo factor de autenticación por S M S.
2.3 Identificación de la Administración:
La propia Administración también debe identificarse. Lo hace mediante:
- Sello electrónico: Para actuaciones automatizadas, como la emisión de un certificado de empadronamiento de forma automática.
- Sede electrónica: Mediante certificados de dispositivo seguro.
1. Infraestructuras y Servicios Comunes
Para que la Administración no tenga que "reinventar la rueda" en cada ministerio, existen servicios compartidos que facilitan la vida al técnico auxiliar de informática.
3.1 La Red SARA
La Red de Servicios de Administración de Respuesta Ágil, o Red S A R A, es la "intranet" de las administraciones españolas. Conecta Ministerios, Comunidades Autónomas y Entidades Locales, permitiendo el intercambio de datos de forma segura y separada de la internet pública.
3.2 Plataforma de Intermediación de Datos o P I D
Es el servicio que permite cumplir el derecho del ciudadano a "no presentar documentos que ya obren en poder de la Administración". Gracias a la P I D, un organismo puede consultar telemáticamente el título de familia numerosa o el nivel de renta de un ciudadano sin pedirle el papel.
3.3 @firma y Valide
At-firma es la plataforma multi-p K I de validación de firmas. Permite a cualquier administración verificar si una firma electrónica es válida. Por otro lado, Valide es la interfaz que permite al ciudadano realizar estas validaciones de forma directa.
3.4 Otras Infraestructuras Clave
G E S H A: Para la gestión de habilitaciones.
I N S I D E: Para la gestión de documentos y expedientes electrónicos que cumplen con el E N I.
P A G: El Punto de Acceso General, que funciona como la puerta de entrada principal a toda la Administración General del Estado.
N O T I F I C A: El servicio compartido para gestionar todas las notificaciones electrónicas de forma centralizada.
Resumen Final para Repaso
Recuerda que la Sede Electrónica garantiza la seguridad del sitio, el sistema Clave facilita la identificación del ciudadano y la Red SARA es el cableado invisible que une a todas las administraciones. Como técnico T A I, estos servicios comunes serán tus herramientas diarias para asegurar que el acceso electrónico sea eficiente y seguro.

View File

@ -0,0 +1,247 @@
<#
.Synopsis
Activate a Python virtual environment for the current PowerShell session.
.Description
Pushes the python executable for a virtual environment to the front of the
$Env:PATH environment variable and sets the prompt to signify that you are
in a Python virtual environment. Makes use of the command line switches as
well as the `pyvenv.cfg` file values present in the virtual environment.
.Parameter VenvDir
Path to the directory that contains the virtual environment to activate. The
default value for this is the parent of the directory that the Activate.ps1
script is located within.
.Parameter Prompt
The prompt prefix to display when this virtual environment is activated. By
default, this prompt is the name of the virtual environment folder (VenvDir)
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
.Example
Activate.ps1
Activates the Python virtual environment that contains the Activate.ps1 script.
.Example
Activate.ps1 -Verbose
Activates the Python virtual environment that contains the Activate.ps1 script,
and shows extra information about the activation as it executes.
.Example
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
Activates the Python virtual environment located in the specified location.
.Example
Activate.ps1 -Prompt "MyPython"
Activates the Python virtual environment that contains the Activate.ps1 script,
and prefixes the current prompt with the specified string (surrounded in
parentheses) while the virtual environment is active.
.Notes
On Windows, it may be required to enable this Activate.ps1 script by setting the
execution policy for the user. You can do this by issuing the following PowerShell
command:
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
For more information on Execution Policies:
https://go.microsoft.com/fwlink/?LinkID=135170
#>
Param(
[Parameter(Mandatory = $false)]
[String]
$VenvDir,
[Parameter(Mandatory = $false)]
[String]
$Prompt
)
<# Function declarations --------------------------------------------------- #>
<#
.Synopsis
Remove all shell session elements added by the Activate script, including the
addition of the virtual environment's Python executable from the beginning of
the PATH variable.
.Parameter NonDestructive
If present, do not remove this function from the global namespace for the
session.
#>
function global:deactivate ([switch]$NonDestructive) {
# Revert to original values
# The prior prompt:
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
}
# The prior PYTHONHOME:
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
}
# The prior PATH:
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
}
# Just remove the VIRTUAL_ENV altogether:
if (Test-Path -Path Env:VIRTUAL_ENV) {
Remove-Item -Path env:VIRTUAL_ENV
}
# Just remove VIRTUAL_ENV_PROMPT altogether.
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
Remove-Item -Path env:VIRTUAL_ENV_PROMPT
}
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
}
# Leave deactivate function in the global namespace if requested:
if (-not $NonDestructive) {
Remove-Item -Path function:deactivate
}
}
<#
.Description
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
given folder, and returns them in a map.
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
two strings separated by `=` (with any amount of whitespace surrounding the =)
then it is considered a `key = value` line. The left hand string is the key,
the right hand is the value.
If the value starts with a `'` or a `"` then the first and last character is
stripped from the value before being captured.
.Parameter ConfigDir
Path to the directory that contains the `pyvenv.cfg` file.
#>
function Get-PyVenvConfig(
[String]
$ConfigDir
) {
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
# An empty map will be returned if no config file is found.
$pyvenvConfig = @{ }
if ($pyvenvConfigPath) {
Write-Verbose "File exists, parse `key = value` lines"
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
$pyvenvConfigContent | ForEach-Object {
$keyval = $PSItem -split "\s*=\s*", 2
if ($keyval[0] -and $keyval[1]) {
$val = $keyval[1]
# Remove extraneous quotations around a string value.
if ("'""".Contains($val.Substring(0, 1))) {
$val = $val.Substring(1, $val.Length - 2)
}
$pyvenvConfig[$keyval[0]] = $val
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
}
}
}
return $pyvenvConfig
}
<# Begin Activate script --------------------------------------------------- #>
# Determine the containing directory of this script
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$VenvExecDir = Get-Item -Path $VenvExecPath
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
# Set values required in priority: CmdLine, ConfigFile, Default
# First, get the location of the virtual environment, it might not be
# VenvExecDir if specified on the command line.
if ($VenvDir) {
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
}
else {
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
Write-Verbose "VenvDir=$VenvDir"
}
# Next, read the `pyvenv.cfg` file to determine any required value such
# as `prompt`.
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
# Next, set the prompt from the command line, or the config file, or
# just use the name of the virtual environment folder.
if ($Prompt) {
Write-Verbose "Prompt specified as argument, using '$Prompt'"
}
else {
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
$Prompt = $pyvenvCfg['prompt'];
}
else {
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
$Prompt = Split-Path -Path $venvDir -Leaf
}
}
Write-Verbose "Prompt = '$Prompt'"
Write-Verbose "VenvDir='$VenvDir'"
# Deactivate any currently active virtual environment, but leave the
# deactivate function in place.
deactivate -nondestructive
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
# that there is an activated venv.
$env:VIRTUAL_ENV = $VenvDir
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
Write-Verbose "Setting prompt to '$Prompt'"
# Set the prompt to include the env name
# Make sure _OLD_VIRTUAL_PROMPT is global
function global:_OLD_VIRTUAL_PROMPT { "" }
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
function global:prompt {
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
_OLD_VIRTUAL_PROMPT
}
$env:VIRTUAL_ENV_PROMPT = $Prompt
}
# Clear PYTHONHOME
if (Test-Path -Path Env:PYTHONHOME) {
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
Remove-Item -Path Env:PYTHONHOME
}
# Add the venv to the PATH
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"

View File

@ -0,0 +1,70 @@
# This file must be used with "source bin/activate" *from bash*
# You cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
PATH="${_OLD_VIRTUAL_PATH:-}"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# Call hash to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
hash -r 2> /dev/null
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
unset VIRTUAL_ENV_PROMPT
if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
# on Windows, a path can contain colons and backslashes and has to be converted:
if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then
# transform D:\path\to\venv to /d/path/to/venv on MSYS
# and to /cygdrive/d/path/to/venv on Cygwin
export VIRTUAL_ENV=$(cygpath /home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv)
else
# use the path as-is
export VIRTUAL_ENV=/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv
fi
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/"bin":$PATH"
export PATH
# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1:-}"
PS1='(venv) '"${PS1:-}"
export PS1
VIRTUAL_ENV_PROMPT='(venv) '
export VIRTUAL_ENV_PROMPT
fi
# Call hash to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
hash -r 2> /dev/null

View File

@ -0,0 +1,27 @@
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV /home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv
set _OLD_VIRTUAL_PATH="$PATH"
setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
set _OLD_VIRTUAL_PROMPT="$prompt"
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
set prompt = '(venv) '"$prompt"
setenv VIRTUAL_ENV_PROMPT '(venv) '
endif
alias pydoc python -m pydoc
rehash

View File

@ -0,0 +1,69 @@
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
# (https://fishshell.com/). You cannot run it directly.
function deactivate -d "Exit virtual environment and return to normal shell environment"
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
set -gx PATH $_OLD_VIRTUAL_PATH
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
set -e _OLD_FISH_PROMPT_OVERRIDE
# prevents error when using nested fish instances (Issue #93858)
if functions -q _old_fish_prompt
functions -e fish_prompt
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
end
end
set -e VIRTUAL_ENV
set -e VIRTUAL_ENV_PROMPT
if test "$argv[1]" != "nondestructive"
# Self-destruct!
functions -e deactivate
end
end
# Unset irrelevant variables.
deactivate nondestructive
set -gx VIRTUAL_ENV /home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv
set -gx _OLD_VIRTUAL_PATH $PATH
set -gx PATH "$VIRTUAL_ENV/"bin $PATH
# Unset PYTHONHOME if set.
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# fish uses a function instead of an env var to generate the prompt.
# Save the current fish_prompt function as the function _old_fish_prompt.
functions -c fish_prompt _old_fish_prompt
# With the original prompt function renamed, we can override with our own.
function fish_prompt
# Save the return status of the last command.
set -l old_status $status
# Output the venv prompt; color taken from the blue of the Python logo.
printf "%s%s%s" (set_color 4B8BBE) '(venv) ' (set_color normal)
# Restore the return status of the previous command.
echo "exit $old_status" | .
# Output the original/"old" prompt.
_old_fish_prompt
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
set -gx VIRTUAL_ENV_PROMPT '(venv) '
end

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from distro.distro import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from gtts.cli import tts_cli
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(tts_cli())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from httpx import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from charset_normalizer.cli import cli_detect
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(cli_detect())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from openai.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1 @@
python3

View File

@ -0,0 +1 @@
/usr/bin/python3

View File

@ -0,0 +1 @@
python3

View File

@ -0,0 +1,8 @@
#!/home/tatvil/trabajo/Oposiciones/apuntes/bloque1/venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from tqdm.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,295 @@
Metadata-Version: 2.3
Name: annotated-types
Version: 0.7.0
Summary: Reusable constraint types to use with typing.Annotated
Project-URL: Homepage, https://github.com/annotated-types/annotated-types
Project-URL: Source, https://github.com/annotated-types/annotated-types
Project-URL: Changelog, https://github.com/annotated-types/annotated-types/releases
Author-email: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin <s@muelcolvin.com>, Zac Hatfield-Dodds <zac@zhd.dev>
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Environment :: MacOS X
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.8
Requires-Dist: typing-extensions>=4.0.0; python_version < '3.9'
Description-Content-Type: text/markdown
# annotated-types
[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)
[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)
[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)
[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)
[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of
adding context-specific metadata to existing types, and specifies that
`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special
logic for `x`.
This package provides metadata objects which can be used to represent common
constraints such as upper and lower bounds on scalar values and collection sizes,
a `Predicate` marker for runtime checks, and
descriptions of how we intend these metadata to be interpreted. In some cases,
we also note alternative representations which do not require this package.
## Install
```bash
pip install annotated-types
```
## Examples
```python
from typing import Annotated
from annotated_types import Gt, Len, Predicate
class MyClass:
age: Annotated[int, Gt(18)] # Valid: 19, 20, ...
# Invalid: 17, 18, "19", 19.0, ...
factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...
# Invalid: 4, 8, -2, 5.0, "prime", ...
my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]
# Invalid: (1, 2), ["abc"], [0] * 20
```
## Documentation
_While `annotated-types` avoids runtime checks for performance, users should not
construct invalid combinations such as `MultipleOf("non-numeric")` or `Annotated[int, Len(3)]`.
Downstream implementors may choose to raise an error, emit a warning, silently ignore
a metadata item, etc., if the metadata objects described below are used with an
incompatible type - or for any other reason!_
### Gt, Ge, Lt, Le
Express inclusive and/or exclusive bounds on orderable values - which may be numbers,
dates, times, strings, sets, etc. Note that the boundary value need not be of the
same type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`
is fine, for example, and implies that the value is an integer x such that `x > 1.5`.
We suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`
as being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on
the `annotated-types` package.
To be explicit, these types have the following meanings:
* `Gt(x)` - value must be "Greater Than" `x` - equivalent to exclusive minimum
* `Ge(x)` - value must be "Greater than or Equal" to `x` - equivalent to inclusive minimum
* `Lt(x)` - value must be "Less Than" `x` - equivalent to exclusive maximum
* `Le(x)` - value must be "Less than or Equal" to `x` - equivalent to inclusive maximum
### Interval
`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single
metadata object. `None` attributes should be ignored, and non-`None` attributes
treated as per the single bounds above.
### MultipleOf
`MultipleOf(multiple_of=x)` might be interpreted in two ways:
1. Python semantics, implying `value % multiple_of == 0`, or
2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),
where `int(value / multiple_of) == value / multiple_of`.
We encourage users to be aware of these two common interpretations and their
distinct behaviours, especially since very large or non-integer numbers make
it easy to cause silent data corruption due to floating-point imprecision.
We encourage libraries to carefully document which interpretation they implement.
### MinLen, MaxLen, Len
`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.
As well as `Len()` which can optionally include upper and lower bounds, we also
provide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`
and `Len(max_length=y)` respectively.
`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.
Examples of usage:
* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10))`) - list must have a length of 10 or less
* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less
* `Annotated[list, MinLen(3))` (or `Annotated[list, Len(min_length=3))`) - list must have a length of 3 or more
* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6
* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8
#### Changed in v0.4.0
* `min_inclusive` has been renamed to `min_length`, no change in meaning
* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**
* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic
meaning of the upper bound in slices vs. `Len`
See [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.
### Timezone
`Timezone` can be used with a `datetime` or a `time` to express which timezones
are allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.
`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))
expresses that any timezone-aware datetime is allowed. You may also pass a specific
timezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)
object such as `Timezone(timezone.utc)` or `Timezone("Africa/Abidjan")` to express that you only
allow a specific timezone, though we note that this is often a symptom of fragile design.
#### Changed in v0.x.x
* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of
`timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.
### Unit
`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of
a quantity with the specified unit. For example, `Annotated[float, Unit("m/s")]`
would be a float representing a velocity in meters per second.
Please note that `annotated_types` itself makes no attempt to parse or validate
the unit string in any way. That is left entirely to downstream libraries,
such as [`pint`](https://pint.readthedocs.io) or
[`astropy.units`](https://docs.astropy.org/en/stable/units/).
An example of how a library might use this metadata:
```python
from annotated_types import Unit
from typing import Annotated, TypeVar, Callable, Any, get_origin, get_args
# given a type annotated with a unit:
Meters = Annotated[float, Unit("m")]
# you can cast the annotation to a specific unit type with any
# callable that accepts a string and returns the desired type
T = TypeVar("T")
def cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:
if get_origin(tp) is Annotated:
for arg in get_args(tp):
if isinstance(arg, Unit):
return unit_cls(arg.unit)
return None
# using `pint`
import pint
pint_unit = cast_unit(Meters, pint.Unit)
# using `astropy.units`
import astropy.units as u
astropy_unit = cast_unit(Meters, u.Unit)
```
### Predicate
`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.
Users should prefer the statically inspectable metadata above, but if you need
the full power and flexibility of arbitrary runtime predicates... here it is.
For some common constraints, we provide generic types:
* `IsLower = Annotated[T, Predicate(str.islower)]`
* `IsUpper = Annotated[T, Predicate(str.isupper)]`
* `IsDigit = Annotated[T, Predicate(str.isdigit)]`
* `IsFinite = Annotated[T, Predicate(math.isfinite)]`
* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`
* `IsNan = Annotated[T, Predicate(math.isnan)]`
* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`
* `IsInfinite = Annotated[T, Predicate(math.isinf)]`
* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`
so that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer
(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.
Some libraries might have special logic to handle known or understandable predicates,
for example by checking for `str.isdigit` and using its presence to both call custom
logic to enforce digit-only strings, and customise some generated external schema.
Users are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in
favor of introspectable methods such as `str.lower` or `re.compile("pattern").search`.
To enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.
We do not specify what behaviour should be expected for predicates that raise
an exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently
skip invalid constraints, or statically raise an error; or it might try calling it
and then propagate or discard the resulting
`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`
exception. We encourage libraries to document the behaviour they choose.
### Doc
`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.
It expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.
It returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.
This is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).
### Integrating downstream types with `GroupedMetadata`
Implementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.
This can help reduce verbosity and cognitive overhead for users.
For example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:
```python
from dataclasses import dataclass
from typing import Iterator
from annotated_types import GroupedMetadata, Ge
@dataclass
class Field(GroupedMetadata):
ge: int | None = None
description: str | None = None
def __iter__(self) -> Iterator[object]:
# Iterating over a GroupedMetadata object should yield annotated-types
# constraint metadata objects which describe it as fully as possible,
# and may include other unknown objects too.
if self.ge is not None:
yield Ge(self.ge)
if self.description is not None:
yield Description(self.description)
```
Libraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been "unpacked" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.
Libraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.
Our own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.
### Consuming metadata
We intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).
It is up to the implementer to determine how this metadata is used.
You could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.
## Design & History
This package was designed at the PyCon 2022 sprints by the maintainers of Pydantic
and Hypothesis, with the goal of making it as easy as possible for end-users to
provide more informative annotations for use by runtime libraries.
It is deliberately minimal, and following PEP-593 allows considerable downstream
discretion in what (if anything!) they choose to support. Nonetheless, we expect
that staying simple and covering _only_ the most common use-cases will give users
and maintainers the best experience we can. If you'd like more constraints for your
types - follow our lead, by defining them and documenting them downstream!

View File

@ -0,0 +1,10 @@
annotated_types-0.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
annotated_types-0.7.0.dist-info/METADATA,sha256=7ltqxksJJ0wCYFGBNIQCWTlWQGeAH0hRFdnK3CB895E,15046
annotated_types-0.7.0.dist-info/RECORD,,
annotated_types-0.7.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
annotated_types-0.7.0.dist-info/licenses/LICENSE,sha256=_hBJiEsaDZNCkB6I4H8ykl0ksxIdmXK2poBfuYJLCV0,1083
annotated_types/__init__.py,sha256=RynLsRKUEGI0KimXydlD1fZEfEzWwDo0Uon3zOKhG1Q,13819
annotated_types/__pycache__/__init__.cpython-312.pyc,,
annotated_types/__pycache__/test_cases.cpython-312.pyc,,
annotated_types/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
annotated_types/test_cases.py,sha256=zHFX6EpcMbGJ8FzBYDbO56bPwx_DYIVSKbZM-4B3_lg,6421

View File

@ -0,0 +1,4 @@
Wheel-Version: 1.0
Generator: hatchling 1.24.2
Root-Is-Purelib: true
Tag: py3-none-any

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2022 the contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,432 @@
import math
import sys
import types
from dataclasses import dataclass
from datetime import tzinfo
from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, SupportsFloat, SupportsIndex, TypeVar, Union
if sys.version_info < (3, 8):
from typing_extensions import Protocol, runtime_checkable
else:
from typing import Protocol, runtime_checkable
if sys.version_info < (3, 9):
from typing_extensions import Annotated, Literal
else:
from typing import Annotated, Literal
if sys.version_info < (3, 10):
EllipsisType = type(Ellipsis)
KW_ONLY = {}
SLOTS = {}
else:
from types import EllipsisType
KW_ONLY = {"kw_only": True}
SLOTS = {"slots": True}
__all__ = (
'BaseMetadata',
'GroupedMetadata',
'Gt',
'Ge',
'Lt',
'Le',
'Interval',
'MultipleOf',
'MinLen',
'MaxLen',
'Len',
'Timezone',
'Predicate',
'LowerCase',
'UpperCase',
'IsDigits',
'IsFinite',
'IsNotFinite',
'IsNan',
'IsNotNan',
'IsInfinite',
'IsNotInfinite',
'doc',
'DocInfo',
'__version__',
)
__version__ = '0.7.0'
T = TypeVar('T')
# arguments that start with __ are considered
# positional only
# see https://peps.python.org/pep-0484/#positional-only-arguments
class SupportsGt(Protocol):
def __gt__(self: T, __other: T) -> bool:
...
class SupportsGe(Protocol):
def __ge__(self: T, __other: T) -> bool:
...
class SupportsLt(Protocol):
def __lt__(self: T, __other: T) -> bool:
...
class SupportsLe(Protocol):
def __le__(self: T, __other: T) -> bool:
...
class SupportsMod(Protocol):
def __mod__(self: T, __other: T) -> T:
...
class SupportsDiv(Protocol):
def __div__(self: T, __other: T) -> T:
...
class BaseMetadata:
"""Base class for all metadata.
This exists mainly so that implementers
can do `isinstance(..., BaseMetadata)` while traversing field annotations.
"""
__slots__ = ()
@dataclass(frozen=True, **SLOTS)
class Gt(BaseMetadata):
"""Gt(gt=x) implies that the value must be greater than x.
It can be used with any type that supports the ``>`` operator,
including numbers, dates and times, strings, sets, and so on.
"""
gt: SupportsGt
@dataclass(frozen=True, **SLOTS)
class Ge(BaseMetadata):
"""Ge(ge=x) implies that the value must be greater than or equal to x.
It can be used with any type that supports the ``>=`` operator,
including numbers, dates and times, strings, sets, and so on.
"""
ge: SupportsGe
@dataclass(frozen=True, **SLOTS)
class Lt(BaseMetadata):
"""Lt(lt=x) implies that the value must be less than x.
It can be used with any type that supports the ``<`` operator,
including numbers, dates and times, strings, sets, and so on.
"""
lt: SupportsLt
@dataclass(frozen=True, **SLOTS)
class Le(BaseMetadata):
"""Le(le=x) implies that the value must be less than or equal to x.
It can be used with any type that supports the ``<=`` operator,
including numbers, dates and times, strings, sets, and so on.
"""
le: SupportsLe
@runtime_checkable
class GroupedMetadata(Protocol):
"""A grouping of multiple objects, like typing.Unpack.
`GroupedMetadata` on its own is not metadata and has no meaning.
All of the constraints and metadata should be fully expressable
in terms of the `BaseMetadata`'s returned by `GroupedMetadata.__iter__()`.
Concrete implementations should override `GroupedMetadata.__iter__()`
to add their own metadata.
For example:
>>> @dataclass
>>> class Field(GroupedMetadata):
>>> gt: float | None = None
>>> description: str | None = None
...
>>> def __iter__(self) -> Iterable[object]:
>>> if self.gt is not None:
>>> yield Gt(self.gt)
>>> if self.description is not None:
>>> yield Description(self.gt)
Also see the implementation of `Interval` below for an example.
Parsers should recognize this and unpack it so that it can be used
both with and without unpacking:
- `Annotated[int, Field(...)]` (parser must unpack Field)
- `Annotated[int, *Field(...)]` (PEP-646)
""" # noqa: trailing-whitespace
@property
def __is_annotated_types_grouped_metadata__(self) -> Literal[True]:
return True
def __iter__(self) -> Iterator[object]:
...
if not TYPE_CHECKING:
__slots__ = () # allow subclasses to use slots
def __init_subclass__(cls, *args: Any, **kwargs: Any) -> None:
# Basic ABC like functionality without the complexity of an ABC
super().__init_subclass__(*args, **kwargs)
if cls.__iter__ is GroupedMetadata.__iter__:
raise TypeError("Can't subclass GroupedMetadata without implementing __iter__")
def __iter__(self) -> Iterator[object]: # noqa: F811
raise NotImplementedError # more helpful than "None has no attribute..." type errors
@dataclass(frozen=True, **KW_ONLY, **SLOTS)
class Interval(GroupedMetadata):
"""Interval can express inclusive or exclusive bounds with a single object.
It accepts keyword arguments ``gt``, ``ge``, ``lt``, and/or ``le``, which
are interpreted the same way as the single-bound constraints.
"""
gt: Union[SupportsGt, None] = None
ge: Union[SupportsGe, None] = None
lt: Union[SupportsLt, None] = None
le: Union[SupportsLe, None] = None
def __iter__(self) -> Iterator[BaseMetadata]:
"""Unpack an Interval into zero or more single-bounds."""
if self.gt is not None:
yield Gt(self.gt)
if self.ge is not None:
yield Ge(self.ge)
if self.lt is not None:
yield Lt(self.lt)
if self.le is not None:
yield Le(self.le)
@dataclass(frozen=True, **SLOTS)
class MultipleOf(BaseMetadata):
"""MultipleOf(multiple_of=x) might be interpreted in two ways:
1. Python semantics, implying ``value % multiple_of == 0``, or
2. JSONschema semantics, where ``int(value / multiple_of) == value / multiple_of``
We encourage users to be aware of these two common interpretations,
and libraries to carefully document which they implement.
"""
multiple_of: Union[SupportsDiv, SupportsMod]
@dataclass(frozen=True, **SLOTS)
class MinLen(BaseMetadata):
"""
MinLen() implies minimum inclusive length,
e.g. ``len(value) >= min_length``.
"""
min_length: Annotated[int, Ge(0)]
@dataclass(frozen=True, **SLOTS)
class MaxLen(BaseMetadata):
"""
MaxLen() implies maximum inclusive length,
e.g. ``len(value) <= max_length``.
"""
max_length: Annotated[int, Ge(0)]
@dataclass(frozen=True, **SLOTS)
class Len(GroupedMetadata):
"""
Len() implies that ``min_length <= len(value) <= max_length``.
Upper bound may be omitted or ``None`` to indicate no upper length bound.
"""
min_length: Annotated[int, Ge(0)] = 0
max_length: Optional[Annotated[int, Ge(0)]] = None
def __iter__(self) -> Iterator[BaseMetadata]:
"""Unpack a Len into zone or more single-bounds."""
if self.min_length > 0:
yield MinLen(self.min_length)
if self.max_length is not None:
yield MaxLen(self.max_length)
@dataclass(frozen=True, **SLOTS)
class Timezone(BaseMetadata):
"""Timezone(tz=...) requires a datetime to be aware (or ``tz=None``, naive).
``Annotated[datetime, Timezone(None)]`` must be a naive datetime.
``Timezone[...]`` (the ellipsis literal) expresses that the datetime must be
tz-aware but any timezone is allowed.
You may also pass a specific timezone string or tzinfo object such as
``Timezone(timezone.utc)`` or ``Timezone("Africa/Abidjan")`` to express that
you only allow a specific timezone, though we note that this is often
a symptom of poor design.
"""
tz: Union[str, tzinfo, EllipsisType, None]
@dataclass(frozen=True, **SLOTS)
class Unit(BaseMetadata):
"""Indicates that the value is a physical quantity with the specified unit.
It is intended for usage with numeric types, where the value represents the
magnitude of the quantity. For example, ``distance: Annotated[float, Unit('m')]``
or ``speed: Annotated[float, Unit('m/s')]``.
Interpretation of the unit string is left to the discretion of the consumer.
It is suggested to follow conventions established by python libraries that work
with physical quantities, such as
- ``pint`` : <https://pint.readthedocs.io/en/stable/>
- ``astropy.units``: <https://docs.astropy.org/en/stable/units/>
For indicating a quantity with a certain dimensionality but without a specific unit
it is recommended to use square brackets, e.g. `Annotated[float, Unit('[time]')]`.
Note, however, ``annotated_types`` itself makes no use of the unit string.
"""
unit: str
@dataclass(frozen=True, **SLOTS)
class Predicate(BaseMetadata):
"""``Predicate(func: Callable)`` implies `func(value)` is truthy for valid values.
Users should prefer statically inspectable metadata, but if you need the full
power and flexibility of arbitrary runtime predicates... here it is.
We provide a few predefined predicates for common string constraints:
``IsLower = Predicate(str.islower)``, ``IsUpper = Predicate(str.isupper)``, and
``IsDigits = Predicate(str.isdigit)``. Users are encouraged to use methods which
can be given special handling, and avoid indirection like ``lambda s: s.lower()``.
Some libraries might have special logic to handle certain predicates, e.g. by
checking for `str.isdigit` and using its presence to both call custom logic to
enforce digit-only strings, and customise some generated external schema.
We do not specify what behaviour should be expected for predicates that raise
an exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently
skip invalid constraints, or statically raise an error; or it might try calling it
and then propagate or discard the resulting exception.
"""
func: Callable[[Any], bool]
def __repr__(self) -> str:
if getattr(self.func, "__name__", "<lambda>") == "<lambda>":
return f"{self.__class__.__name__}({self.func!r})"
if isinstance(self.func, (types.MethodType, types.BuiltinMethodType)) and (
namespace := getattr(self.func.__self__, "__name__", None)
):
return f"{self.__class__.__name__}({namespace}.{self.func.__name__})"
if isinstance(self.func, type(str.isascii)): # method descriptor
return f"{self.__class__.__name__}({self.func.__qualname__})"
return f"{self.__class__.__name__}({self.func.__name__})"
@dataclass
class Not:
func: Callable[[Any], bool]
def __call__(self, __v: Any) -> bool:
return not self.func(__v)
_StrType = TypeVar("_StrType", bound=str)
LowerCase = Annotated[_StrType, Predicate(str.islower)]
"""
Return True if the string is a lowercase string, False otherwise.
A string is lowercase if all cased characters in the string are lowercase and there is at least one cased character in the string.
""" # noqa: E501
UpperCase = Annotated[_StrType, Predicate(str.isupper)]
"""
Return True if the string is an uppercase string, False otherwise.
A string is uppercase if all cased characters in the string are uppercase and there is at least one cased character in the string.
""" # noqa: E501
IsDigit = Annotated[_StrType, Predicate(str.isdigit)]
IsDigits = IsDigit # type: ignore # plural for backwards compatibility, see #63
"""
Return True if the string is a digit string, False otherwise.
A string is a digit string if all characters in the string are digits and there is at least one character in the string.
""" # noqa: E501
IsAscii = Annotated[_StrType, Predicate(str.isascii)]
"""
Return True if all characters in the string are ASCII, False otherwise.
ASCII characters have code points in the range U+0000-U+007F. Empty string is ASCII too.
"""
_NumericType = TypeVar('_NumericType', bound=Union[SupportsFloat, SupportsIndex])
IsFinite = Annotated[_NumericType, Predicate(math.isfinite)]
"""Return True if x is neither an infinity nor a NaN, and False otherwise."""
IsNotFinite = Annotated[_NumericType, Predicate(Not(math.isfinite))]
"""Return True if x is one of infinity or NaN, and False otherwise"""
IsNan = Annotated[_NumericType, Predicate(math.isnan)]
"""Return True if x is a NaN (not a number), and False otherwise."""
IsNotNan = Annotated[_NumericType, Predicate(Not(math.isnan))]
"""Return True if x is anything but NaN (not a number), and False otherwise."""
IsInfinite = Annotated[_NumericType, Predicate(math.isinf)]
"""Return True if x is a positive or negative infinity, and False otherwise."""
IsNotInfinite = Annotated[_NumericType, Predicate(Not(math.isinf))]
"""Return True if x is neither a positive or negative infinity, and False otherwise."""
try:
from typing_extensions import DocInfo, doc # type: ignore [attr-defined]
except ImportError:
@dataclass(frozen=True, **SLOTS)
class DocInfo: # type: ignore [no-redef]
""" "
The return value of doc(), mainly to be used by tools that want to extract the
Annotated documentation at runtime.
"""
documentation: str
"""The documentation string passed to doc()."""
def doc(
documentation: str,
) -> DocInfo:
"""
Add documentation to a type annotation inside of Annotated.
For example:
>>> def hi(name: Annotated[int, doc("The name of the user")]) -> None: ...
"""
return DocInfo(documentation)

View File

@ -0,0 +1,151 @@
import math
import sys
from datetime import date, datetime, timedelta, timezone
from decimal import Decimal
from typing import Any, Dict, Iterable, Iterator, List, NamedTuple, Set, Tuple
if sys.version_info < (3, 9):
from typing_extensions import Annotated
else:
from typing import Annotated
import annotated_types as at
class Case(NamedTuple):
"""
A test case for `annotated_types`.
"""
annotation: Any
valid_cases: Iterable[Any]
invalid_cases: Iterable[Any]
def cases() -> Iterable[Case]:
# Gt, Ge, Lt, Le
yield Case(Annotated[int, at.Gt(4)], (5, 6, 1000), (4, 0, -1))
yield Case(Annotated[float, at.Gt(0.5)], (0.6, 0.7, 0.8, 0.9), (0.5, 0.0, -0.1))
yield Case(
Annotated[datetime, at.Gt(datetime(2000, 1, 1))],
[datetime(2000, 1, 2), datetime(2000, 1, 3)],
[datetime(2000, 1, 1), datetime(1999, 12, 31)],
)
yield Case(
Annotated[datetime, at.Gt(date(2000, 1, 1))],
[date(2000, 1, 2), date(2000, 1, 3)],
[date(2000, 1, 1), date(1999, 12, 31)],
)
yield Case(
Annotated[datetime, at.Gt(Decimal('1.123'))],
[Decimal('1.1231'), Decimal('123')],
[Decimal('1.123'), Decimal('0')],
)
yield Case(Annotated[int, at.Ge(4)], (4, 5, 6, 1000, 4), (0, -1))
yield Case(Annotated[float, at.Ge(0.5)], (0.5, 0.6, 0.7, 0.8, 0.9), (0.4, 0.0, -0.1))
yield Case(
Annotated[datetime, at.Ge(datetime(2000, 1, 1))],
[datetime(2000, 1, 2), datetime(2000, 1, 3)],
[datetime(1998, 1, 1), datetime(1999, 12, 31)],
)
yield Case(Annotated[int, at.Lt(4)], (0, -1), (4, 5, 6, 1000, 4))
yield Case(Annotated[float, at.Lt(0.5)], (0.4, 0.0, -0.1), (0.5, 0.6, 0.7, 0.8, 0.9))
yield Case(
Annotated[datetime, at.Lt(datetime(2000, 1, 1))],
[datetime(1999, 12, 31), datetime(1999, 12, 31)],
[datetime(2000, 1, 2), datetime(2000, 1, 3)],
)
yield Case(Annotated[int, at.Le(4)], (4, 0, -1), (5, 6, 1000))
yield Case(Annotated[float, at.Le(0.5)], (0.5, 0.0, -0.1), (0.6, 0.7, 0.8, 0.9))
yield Case(
Annotated[datetime, at.Le(datetime(2000, 1, 1))],
[datetime(2000, 1, 1), datetime(1999, 12, 31)],
[datetime(2000, 1, 2), datetime(2000, 1, 3)],
)
# Interval
yield Case(Annotated[int, at.Interval(gt=4)], (5, 6, 1000), (4, 0, -1))
yield Case(Annotated[int, at.Interval(gt=4, lt=10)], (5, 6), (4, 10, 1000, 0, -1))
yield Case(Annotated[float, at.Interval(ge=0.5, le=1)], (0.5, 0.9, 1), (0.49, 1.1))
yield Case(
Annotated[datetime, at.Interval(gt=datetime(2000, 1, 1), le=datetime(2000, 1, 3))],
[datetime(2000, 1, 2), datetime(2000, 1, 3)],
[datetime(2000, 1, 1), datetime(2000, 1, 4)],
)
yield Case(Annotated[int, at.MultipleOf(multiple_of=3)], (0, 3, 9), (1, 2, 4))
yield Case(Annotated[float, at.MultipleOf(multiple_of=0.5)], (0, 0.5, 1, 1.5), (0.4, 1.1))
# lengths
yield Case(Annotated[str, at.MinLen(3)], ('123', '1234', 'x' * 10), ('', '1', '12'))
yield Case(Annotated[str, at.Len(3)], ('123', '1234', 'x' * 10), ('', '1', '12'))
yield Case(Annotated[List[int], at.MinLen(3)], ([1, 2, 3], [1, 2, 3, 4], [1] * 10), ([], [1], [1, 2]))
yield Case(Annotated[List[int], at.Len(3)], ([1, 2, 3], [1, 2, 3, 4], [1] * 10), ([], [1], [1, 2]))
yield Case(Annotated[str, at.MaxLen(4)], ('', '1234'), ('12345', 'x' * 10))
yield Case(Annotated[str, at.Len(0, 4)], ('', '1234'), ('12345', 'x' * 10))
yield Case(Annotated[List[str], at.MaxLen(4)], ([], ['a', 'bcdef'], ['a', 'b', 'c']), (['a'] * 5, ['b'] * 10))
yield Case(Annotated[List[str], at.Len(0, 4)], ([], ['a', 'bcdef'], ['a', 'b', 'c']), (['a'] * 5, ['b'] * 10))
yield Case(Annotated[str, at.Len(3, 5)], ('123', '12345'), ('', '1', '12', '123456', 'x' * 10))
yield Case(Annotated[str, at.Len(3, 3)], ('123',), ('12', '1234'))
yield Case(Annotated[Dict[int, int], at.Len(2, 3)], [{1: 1, 2: 2}], [{}, {1: 1}, {1: 1, 2: 2, 3: 3, 4: 4}])
yield Case(Annotated[Set[int], at.Len(2, 3)], ({1, 2}, {1, 2, 3}), (set(), {1}, {1, 2, 3, 4}))
yield Case(Annotated[Tuple[int, ...], at.Len(2, 3)], ((1, 2), (1, 2, 3)), ((), (1,), (1, 2, 3, 4)))
# Timezone
yield Case(
Annotated[datetime, at.Timezone(None)], [datetime(2000, 1, 1)], [datetime(2000, 1, 1, tzinfo=timezone.utc)]
)
yield Case(
Annotated[datetime, at.Timezone(...)], [datetime(2000, 1, 1, tzinfo=timezone.utc)], [datetime(2000, 1, 1)]
)
yield Case(
Annotated[datetime, at.Timezone(timezone.utc)],
[datetime(2000, 1, 1, tzinfo=timezone.utc)],
[datetime(2000, 1, 1), datetime(2000, 1, 1, tzinfo=timezone(timedelta(hours=6)))],
)
yield Case(
Annotated[datetime, at.Timezone('Europe/London')],
[datetime(2000, 1, 1, tzinfo=timezone(timedelta(0), name='Europe/London'))],
[datetime(2000, 1, 1), datetime(2000, 1, 1, tzinfo=timezone(timedelta(hours=6)))],
)
# Quantity
yield Case(Annotated[float, at.Unit(unit='m')], (5, 4.2), ('5m', '4.2m'))
# predicate types
yield Case(at.LowerCase[str], ['abc', 'foobar'], ['', 'A', 'Boom'])
yield Case(at.UpperCase[str], ['ABC', 'DEFO'], ['', 'a', 'abc', 'AbC'])
yield Case(at.IsDigit[str], ['123'], ['', 'ab', 'a1b2'])
yield Case(at.IsAscii[str], ['123', 'foo bar'], ['£100', '😊', 'whatever 👀'])
yield Case(Annotated[int, at.Predicate(lambda x: x % 2 == 0)], [0, 2, 4], [1, 3, 5])
yield Case(at.IsFinite[float], [1.23], [math.nan, math.inf, -math.inf])
yield Case(at.IsNotFinite[float], [math.nan, math.inf], [1.23])
yield Case(at.IsNan[float], [math.nan], [1.23, math.inf])
yield Case(at.IsNotNan[float], [1.23, math.inf], [math.nan])
yield Case(at.IsInfinite[float], [math.inf], [math.nan, 1.23])
yield Case(at.IsNotInfinite[float], [math.nan, 1.23], [math.inf])
# check stacked predicates
yield Case(at.IsInfinite[Annotated[float, at.Predicate(lambda x: x > 0)]], [math.inf], [-math.inf, 1.23, math.nan])
# doc
yield Case(Annotated[int, at.doc("A number")], [1, 2], [])
# custom GroupedMetadata
class MyCustomGroupedMetadata(at.GroupedMetadata):
def __iter__(self) -> Iterator[at.Predicate]:
yield at.Predicate(lambda x: float(x).is_integer())
yield Case(Annotated[float, MyCustomGroupedMetadata()], [0, 2.0], [0.01, 1.5])

View File

@ -0,0 +1,96 @@
Metadata-Version: 2.4
Name: anyio
Version: 4.12.1
Summary: High-level concurrency and networking framework on top of asyncio or Trio
Author-email: Alex Grönholm <alex.gronholm@nextday.fi>
License-Expression: MIT
Project-URL: Documentation, https://anyio.readthedocs.io/en/latest/
Project-URL: Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html
Project-URL: Source code, https://github.com/agronholm/anyio
Project-URL: Issue tracker, https://github.com/agronholm/anyio/issues
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Framework :: AnyIO
Classifier: Typing :: Typed
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: exceptiongroup>=1.0.2; python_version < "3.11"
Requires-Dist: idna>=2.8
Requires-Dist: typing_extensions>=4.5; python_version < "3.13"
Provides-Extra: trio
Requires-Dist: trio>=0.32.0; python_version >= "3.10" and extra == "trio"
Requires-Dist: trio>=0.31.0; python_version < "3.10" and extra == "trio"
Dynamic: license-file
.. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg
:target: https://github.com/agronholm/anyio/actions/workflows/test.yml
:alt: Build Status
.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master
:target: https://coveralls.io/github/agronholm/anyio?branch=master
:alt: Code Coverage
.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest
:target: https://anyio.readthedocs.io/en/latest/?badge=latest
:alt: Documentation
.. image:: https://badges.gitter.im/gitterHQ/gitter.svg
:target: https://gitter.im/python-trio/AnyIO
:alt: Gitter chat
AnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or
Trio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony
with the native SC of Trio itself.
Applications and libraries written against AnyIO's API will run unmodified on either asyncio_ or
Trio_. AnyIO can also be adopted into a library or application incrementally bit by bit, no full
refactoring necessary. It will blend in with the native libraries of your chosen backend.
To find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it
`here <https://anyio.readthedocs.io/en/stable/why.html>`_.
Documentation
-------------
View full documentation at: https://anyio.readthedocs.io/
Features
--------
AnyIO offers the following functionality:
* Task groups (nurseries_ in trio terminology)
* High-level networking (TCP, UDP and UNIX sockets)
* `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python
3.8)
* async/await style UDP sockets (unlike asyncio where you still have to use Transports and
Protocols)
* A versatile API for byte streams and object streams
* Inter-task synchronization and communication (locks, conditions, events, semaphores, object
streams)
* Worker threads
* Subprocesses
* Subinterpreter support for code parallelization (on Python 3.13 and later)
* Asynchronous file I/O (using worker threads)
* Signal handling
* Asynchronous version of the functools_ module
AnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.
It even works with the popular Hypothesis_ library.
.. _asyncio: https://docs.python.org/3/library/asyncio.html
.. _Trio: https://github.com/python-trio/trio
.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency
.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning
.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs
.. _pytest: https://docs.pytest.org/en/latest/
.. _functools: https://docs.python.org/3/library/functools.html
.. _Hypothesis: https://hypothesis.works/

View File

@ -0,0 +1,92 @@
anyio-4.12.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
anyio-4.12.1.dist-info/METADATA,sha256=DfiDab9Tmmcfy802lOLTMEHJQShkOSbopCwqCYbLuJk,4277
anyio-4.12.1.dist-info/RECORD,,
anyio-4.12.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
anyio-4.12.1.dist-info/entry_points.txt,sha256=_d6Yu6uiaZmNe0CydowirE9Cmg7zUL2g08tQpoS3Qvc,39
anyio-4.12.1.dist-info/licenses/LICENSE,sha256=U2GsncWPLvX9LpsJxoKXwX8ElQkJu8gCO9uC6s8iwrA,1081
anyio-4.12.1.dist-info/top_level.txt,sha256=QglSMiWX8_5dpoVAEIHdEYzvqFMdSYWmCj6tYw2ITkQ,6
anyio/__init__.py,sha256=7iDVqMUprUuKNY91FuoKqayAhR-OY136YDPI6P78HHk,6170
anyio/__pycache__/__init__.cpython-312.pyc,,
anyio/__pycache__/from_thread.cpython-312.pyc,,
anyio/__pycache__/functools.cpython-312.pyc,,
anyio/__pycache__/lowlevel.cpython-312.pyc,,
anyio/__pycache__/pytest_plugin.cpython-312.pyc,,
anyio/__pycache__/to_interpreter.cpython-312.pyc,,
anyio/__pycache__/to_process.cpython-312.pyc,,
anyio/__pycache__/to_thread.cpython-312.pyc,,
anyio/_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
anyio/_backends/__pycache__/__init__.cpython-312.pyc,,
anyio/_backends/__pycache__/_asyncio.cpython-312.pyc,,
anyio/_backends/__pycache__/_trio.cpython-312.pyc,,
anyio/_backends/_asyncio.py,sha256=xG6qv60mgGnL0mK82dxjH2b8hlkMlJ-x2BqIq3qv70Y,98863
anyio/_backends/_trio.py,sha256=30Rctb7lm8g63ZHljVPVnj5aH-uK6oQvphjwUBoAzuI,41456
anyio/_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
anyio/_core/__pycache__/__init__.cpython-312.pyc,,
anyio/_core/__pycache__/_asyncio_selector_thread.cpython-312.pyc,,
anyio/_core/__pycache__/_contextmanagers.cpython-312.pyc,,
anyio/_core/__pycache__/_eventloop.cpython-312.pyc,,
anyio/_core/__pycache__/_exceptions.cpython-312.pyc,,
anyio/_core/__pycache__/_fileio.cpython-312.pyc,,
anyio/_core/__pycache__/_resources.cpython-312.pyc,,
anyio/_core/__pycache__/_signals.cpython-312.pyc,,
anyio/_core/__pycache__/_sockets.cpython-312.pyc,,
anyio/_core/__pycache__/_streams.cpython-312.pyc,,
anyio/_core/__pycache__/_subprocesses.cpython-312.pyc,,
anyio/_core/__pycache__/_synchronization.cpython-312.pyc,,
anyio/_core/__pycache__/_tasks.cpython-312.pyc,,
anyio/_core/__pycache__/_tempfile.cpython-312.pyc,,
anyio/_core/__pycache__/_testing.cpython-312.pyc,,
anyio/_core/__pycache__/_typedattr.cpython-312.pyc,,
anyio/_core/_asyncio_selector_thread.py,sha256=2PdxFM3cs02Kp6BSppbvmRT7q7asreTW5FgBxEsflBo,5626
anyio/_core/_contextmanagers.py,sha256=YInBCabiEeS-UaP_Jdxa1CaFC71ETPW8HZTHIM8Rsc8,7215
anyio/_core/_eventloop.py,sha256=c2EdcBX-xnKwxPcC4Pjn3_qG9I-x4IWFO2R9RqCGjM4,6448
anyio/_core/_exceptions.py,sha256=Y3aq-Wxd7Q2HqwSg7nZPvRsHEuGazv_qeet6gqEBdPk,4407
anyio/_core/_fileio.py,sha256=uc7t10Vb-If7GbdWM_zFf-ajUe6uek63fSt7IBLlZW0,25731
anyio/_core/_resources.py,sha256=NbmU5O5UX3xEyACnkmYX28Fmwdl-f-ny0tHym26e0w0,435
anyio/_core/_signals.py,sha256=mjTBB2hTKNPRlU0IhnijeQedpWOGERDiMjSlJQsFrug,1016
anyio/_core/_sockets.py,sha256=RBXHcUqZt5gg_-OOfgHVv8uq2FSKk1uVUzTdpjBoI1o,34977
anyio/_core/_streams.py,sha256=FczFwIgDpnkK0bODWJXMpsUJYdvAD04kaUaGzJU8DK0,1806
anyio/_core/_subprocesses.py,sha256=EXm5igL7dj55iYkPlbYVAqtbqxJxjU-6OndSTIx9SRg,8047
anyio/_core/_synchronization.py,sha256=MgVVqFzvt580tHC31LiOcq1G6aryut--xRG4Ff8KwxQ,20869
anyio/_core/_tasks.py,sha256=pVB7K6AAulzUM8YgXAeqNZG44nSyZ1bYJjH8GznC00I,5435
anyio/_core/_tempfile.py,sha256=lHb7CW4FyIlpkf5ADAf4VmLHCKwEHF9nxqNyBCFFUiA,19697
anyio/_core/_testing.py,sha256=u7MPqGXwpTxqI7hclSdNA30z2GH1Nw258uwKvy_RfBg,2340
anyio/_core/_typedattr.py,sha256=P4ozZikn3-DbpoYcvyghS_FOYAgbmUxeoU8-L_07pZM,2508
anyio/abc/__init__.py,sha256=6mWhcl_pGXhrgZVHP_TCfMvIXIOp9mroEFM90fYCU_U,2869
anyio/abc/__pycache__/__init__.cpython-312.pyc,,
anyio/abc/__pycache__/_eventloop.cpython-312.pyc,,
anyio/abc/__pycache__/_resources.cpython-312.pyc,,
anyio/abc/__pycache__/_sockets.cpython-312.pyc,,
anyio/abc/__pycache__/_streams.cpython-312.pyc,,
anyio/abc/__pycache__/_subprocesses.cpython-312.pyc,,
anyio/abc/__pycache__/_tasks.cpython-312.pyc,,
anyio/abc/__pycache__/_testing.cpython-312.pyc,,
anyio/abc/_eventloop.py,sha256=GlzgB3UJGgG6Kr7olpjOZ-o00PghecXuofVDQ_5611Q,10749
anyio/abc/_resources.py,sha256=DrYvkNN1hH6Uvv5_5uKySvDsnknGVDe8FCKfko0VtN8,783
anyio/abc/_sockets.py,sha256=ECTY0jLEF18gryANHR3vFzXzGdZ-xPwELq1QdgOb0Jo,13258
anyio/abc/_streams.py,sha256=005GKSCXGprxnhucILboSqc2JFovECZk9m3p-qqxXVc,7640
anyio/abc/_subprocesses.py,sha256=cumAPJTktOQtw63IqG0lDpyZqu_l1EElvQHMiwJgL08,2067
anyio/abc/_tasks.py,sha256=KC7wrciE48AINOI-AhPutnFhe1ewfP7QnamFlDzqesQ,3721
anyio/abc/_testing.py,sha256=tBJUzkSfOXJw23fe8qSJ03kJlShOYjjaEyFB6k6MYT8,1821
anyio/from_thread.py,sha256=L-0w1HxJ6BSb-KuVi57k5Tkc3yzQrx3QK5tAxMPcY-0,19141
anyio/functools.py,sha256=HWj7GBEmc0Z-mZg3uok7Z7ZJn0rEC_0Pzbt0nYUDaTQ,10973
anyio/lowlevel.py,sha256=AyKLVK3LaWSoK39LkCKxE4_GDMLKZBNqTrLUgk63y80,5158
anyio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
anyio/pytest_plugin.py,sha256=3jAFQn0jv_pyoWE2GBBlHaj9sqXj4e8vob0_hgrsXE8,10244
anyio/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
anyio/streams/__pycache__/__init__.cpython-312.pyc,,
anyio/streams/__pycache__/buffered.cpython-312.pyc,,
anyio/streams/__pycache__/file.cpython-312.pyc,,
anyio/streams/__pycache__/memory.cpython-312.pyc,,
anyio/streams/__pycache__/stapled.cpython-312.pyc,,
anyio/streams/__pycache__/text.cpython-312.pyc,,
anyio/streams/__pycache__/tls.cpython-312.pyc,,
anyio/streams/buffered.py,sha256=2R3PeJhe4EXrdYqz44Y6-Eg9R6DrmlsYrP36Ir43-po,6263
anyio/streams/file.py,sha256=4WZ7XGz5WNu39FQHvqbe__TQ0HDP9OOhgO1mk9iVpVU,4470
anyio/streams/memory.py,sha256=F0zwzvFJKAhX_LRZGoKzzqDC2oMM-f-yyTBrEYEGOaU,10740
anyio/streams/stapled.py,sha256=T8Xqwf8K6EgURPxbt1N4i7A8BAk-gScv-GRhjLXIf_o,4390
anyio/streams/text.py,sha256=BcVAGJw1VRvtIqnv-o0Rb0pwH7p8vwlvl21xHq522ag,5765
anyio/streams/tls.py,sha256=Jpxy0Mfbcp1BxHCwE-YjSSFaLnIBbnnwur-excYThs4,15368
anyio/to_interpreter.py,sha256=_mLngrMy97TMR6VbW4Y6YzDUk9ZuPcQMPlkuyRh3C9k,7100
anyio/to_process.py,sha256=J7gAA_YOuoHqnpDAf5fm1Qu6kOmTzdFbiDNvnV755vk,9798
anyio/to_thread.py,sha256=menEgXYmUV7Fjg_9WqCV95P9MAtQS8BzPGGcWB_QnfQ,2687

View File

@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: setuptools (80.9.0)
Root-Is-Purelib: true
Tag: py3-none-any

View File

@ -0,0 +1,2 @@
[pytest11]
anyio = anyio.pytest_plugin

View File

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2018 Alex Grönholm
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,111 @@
from __future__ import annotations
from ._core._contextmanagers import AsyncContextManagerMixin as AsyncContextManagerMixin
from ._core._contextmanagers import ContextManagerMixin as ContextManagerMixin
from ._core._eventloop import current_time as current_time
from ._core._eventloop import get_all_backends as get_all_backends
from ._core._eventloop import get_available_backends as get_available_backends
from ._core._eventloop import get_cancelled_exc_class as get_cancelled_exc_class
from ._core._eventloop import run as run
from ._core._eventloop import sleep as sleep
from ._core._eventloop import sleep_forever as sleep_forever
from ._core._eventloop import sleep_until as sleep_until
from ._core._exceptions import BrokenResourceError as BrokenResourceError
from ._core._exceptions import BrokenWorkerInterpreter as BrokenWorkerInterpreter
from ._core._exceptions import BrokenWorkerProcess as BrokenWorkerProcess
from ._core._exceptions import BusyResourceError as BusyResourceError
from ._core._exceptions import ClosedResourceError as ClosedResourceError
from ._core._exceptions import ConnectionFailed as ConnectionFailed
from ._core._exceptions import DelimiterNotFound as DelimiterNotFound
from ._core._exceptions import EndOfStream as EndOfStream
from ._core._exceptions import IncompleteRead as IncompleteRead
from ._core._exceptions import NoEventLoopError as NoEventLoopError
from ._core._exceptions import RunFinishedError as RunFinishedError
from ._core._exceptions import TypedAttributeLookupError as TypedAttributeLookupError
from ._core._exceptions import WouldBlock as WouldBlock
from ._core._fileio import AsyncFile as AsyncFile
from ._core._fileio import Path as Path
from ._core._fileio import open_file as open_file
from ._core._fileio import wrap_file as wrap_file
from ._core._resources import aclose_forcefully as aclose_forcefully
from ._core._signals import open_signal_receiver as open_signal_receiver
from ._core._sockets import TCPConnectable as TCPConnectable
from ._core._sockets import UNIXConnectable as UNIXConnectable
from ._core._sockets import as_connectable as as_connectable
from ._core._sockets import connect_tcp as connect_tcp
from ._core._sockets import connect_unix as connect_unix
from ._core._sockets import create_connected_udp_socket as create_connected_udp_socket
from ._core._sockets import (
create_connected_unix_datagram_socket as create_connected_unix_datagram_socket,
)
from ._core._sockets import create_tcp_listener as create_tcp_listener
from ._core._sockets import create_udp_socket as create_udp_socket
from ._core._sockets import create_unix_datagram_socket as create_unix_datagram_socket
from ._core._sockets import create_unix_listener as create_unix_listener
from ._core._sockets import getaddrinfo as getaddrinfo
from ._core._sockets import getnameinfo as getnameinfo
from ._core._sockets import notify_closing as notify_closing
from ._core._sockets import wait_readable as wait_readable
from ._core._sockets import wait_socket_readable as wait_socket_readable
from ._core._sockets import wait_socket_writable as wait_socket_writable
from ._core._sockets import wait_writable as wait_writable
from ._core._streams import create_memory_object_stream as create_memory_object_stream
from ._core._subprocesses import open_process as open_process
from ._core._subprocesses import run_process as run_process
from ._core._synchronization import CapacityLimiter as CapacityLimiter
from ._core._synchronization import (
CapacityLimiterStatistics as CapacityLimiterStatistics,
)
from ._core._synchronization import Condition as Condition
from ._core._synchronization import ConditionStatistics as ConditionStatistics
from ._core._synchronization import Event as Event
from ._core._synchronization import EventStatistics as EventStatistics
from ._core._synchronization import Lock as Lock
from ._core._synchronization import LockStatistics as LockStatistics
from ._core._synchronization import ResourceGuard as ResourceGuard
from ._core._synchronization import Semaphore as Semaphore
from ._core._synchronization import SemaphoreStatistics as SemaphoreStatistics
from ._core._tasks import TASK_STATUS_IGNORED as TASK_STATUS_IGNORED
from ._core._tasks import CancelScope as CancelScope
from ._core._tasks import create_task_group as create_task_group
from ._core._tasks import current_effective_deadline as current_effective_deadline
from ._core._tasks import fail_after as fail_after
from ._core._tasks import move_on_after as move_on_after
from ._core._tempfile import NamedTemporaryFile as NamedTemporaryFile
from ._core._tempfile import SpooledTemporaryFile as SpooledTemporaryFile
from ._core._tempfile import TemporaryDirectory as TemporaryDirectory
from ._core._tempfile import TemporaryFile as TemporaryFile
from ._core._tempfile import gettempdir as gettempdir
from ._core._tempfile import gettempdirb as gettempdirb
from ._core._tempfile import mkdtemp as mkdtemp
from ._core._tempfile import mkstemp as mkstemp
from ._core._testing import TaskInfo as TaskInfo
from ._core._testing import get_current_task as get_current_task
from ._core._testing import get_running_tasks as get_running_tasks
from ._core._testing import wait_all_tasks_blocked as wait_all_tasks_blocked
from ._core._typedattr import TypedAttributeProvider as TypedAttributeProvider
from ._core._typedattr import TypedAttributeSet as TypedAttributeSet
from ._core._typedattr import typed_attribute as typed_attribute
# Re-export imports so they look like they live directly in this package
for __value in list(locals().values()):
if getattr(__value, "__module__", "").startswith("anyio."):
__value.__module__ = __name__
del __value
def __getattr__(attr: str) -> type[BrokenWorkerInterpreter]:
"""Support deprecated aliases."""
if attr == "BrokenWorkerIntepreter":
import warnings
warnings.warn(
"The 'BrokenWorkerIntepreter' alias is deprecated, use 'BrokenWorkerInterpreter' instead.",
DeprecationWarning,
stacklevel=2,
)
return BrokenWorkerInterpreter
raise AttributeError(f"module {__name__!r} has no attribute {attr!r}")

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,167 @@
from __future__ import annotations
import asyncio
import socket
import threading
from collections.abc import Callable
from selectors import EVENT_READ, EVENT_WRITE, DefaultSelector
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
from _typeshed import FileDescriptorLike
_selector_lock = threading.Lock()
_selector: Selector | None = None
class Selector:
def __init__(self) -> None:
self._thread = threading.Thread(target=self.run, name="AnyIO socket selector")
self._selector = DefaultSelector()
self._send, self._receive = socket.socketpair()
self._send.setblocking(False)
self._receive.setblocking(False)
# This somewhat reduces the amount of memory wasted queueing up data
# for wakeups. With these settings, maximum number of 1-byte sends
# before getting BlockingIOError:
# Linux 4.8: 6
# macOS (darwin 15.5): 1
# Windows 10: 525347
# Windows you're weird. (And on Windows setting SNDBUF to 0 makes send
# blocking, even on non-blocking sockets, so don't do that.)
self._receive.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1)
self._send.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1)
# On Windows this is a TCP socket so this might matter. On other
# platforms this fails b/c AF_UNIX sockets aren't actually TCP.
try:
self._send.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
except OSError:
pass
self._selector.register(self._receive, EVENT_READ)
self._closed = False
def start(self) -> None:
self._thread.start()
threading._register_atexit(self._stop) # type: ignore[attr-defined]
def _stop(self) -> None:
global _selector
self._closed = True
self._notify_self()
self._send.close()
self._thread.join()
self._selector.unregister(self._receive)
self._receive.close()
self._selector.close()
_selector = None
assert not self._selector.get_map(), (
"selector still has registered file descriptors after shutdown"
)
def _notify_self(self) -> None:
try:
self._send.send(b"\x00")
except BlockingIOError:
pass
def add_reader(self, fd: FileDescriptorLike, callback: Callable[[], Any]) -> None:
loop = asyncio.get_running_loop()
try:
key = self._selector.get_key(fd)
except KeyError:
self._selector.register(fd, EVENT_READ, {EVENT_READ: (loop, callback)})
else:
if EVENT_READ in key.data:
raise ValueError(
"this file descriptor is already registered for reading"
)
key.data[EVENT_READ] = loop, callback
self._selector.modify(fd, key.events | EVENT_READ, key.data)
self._notify_self()
def add_writer(self, fd: FileDescriptorLike, callback: Callable[[], Any]) -> None:
loop = asyncio.get_running_loop()
try:
key = self._selector.get_key(fd)
except KeyError:
self._selector.register(fd, EVENT_WRITE, {EVENT_WRITE: (loop, callback)})
else:
if EVENT_WRITE in key.data:
raise ValueError(
"this file descriptor is already registered for writing"
)
key.data[EVENT_WRITE] = loop, callback
self._selector.modify(fd, key.events | EVENT_WRITE, key.data)
self._notify_self()
def remove_reader(self, fd: FileDescriptorLike) -> bool:
try:
key = self._selector.get_key(fd)
except KeyError:
return False
if new_events := key.events ^ EVENT_READ:
del key.data[EVENT_READ]
self._selector.modify(fd, new_events, key.data)
else:
self._selector.unregister(fd)
return True
def remove_writer(self, fd: FileDescriptorLike) -> bool:
try:
key = self._selector.get_key(fd)
except KeyError:
return False
if new_events := key.events ^ EVENT_WRITE:
del key.data[EVENT_WRITE]
self._selector.modify(fd, new_events, key.data)
else:
self._selector.unregister(fd)
return True
def run(self) -> None:
while not self._closed:
for key, events in self._selector.select():
if key.fileobj is self._receive:
try:
while self._receive.recv(4096):
pass
except BlockingIOError:
pass
continue
if events & EVENT_READ:
loop, callback = key.data[EVENT_READ]
self.remove_reader(key.fd)
try:
loop.call_soon_threadsafe(callback)
except RuntimeError:
pass # the loop was already closed
if events & EVENT_WRITE:
loop, callback = key.data[EVENT_WRITE]
self.remove_writer(key.fd)
try:
loop.call_soon_threadsafe(callback)
except RuntimeError:
pass # the loop was already closed
def get_selector() -> Selector:
global _selector
with _selector_lock:
if _selector is None:
_selector = Selector()
_selector.start()
return _selector

View File

@ -0,0 +1,200 @@
from __future__ import annotations
from abc import abstractmethod
from contextlib import AbstractAsyncContextManager, AbstractContextManager
from inspect import isasyncgen, iscoroutine, isgenerator
from types import TracebackType
from typing import Protocol, TypeVar, cast, final
_T_co = TypeVar("_T_co", covariant=True)
_ExitT_co = TypeVar("_ExitT_co", covariant=True, bound="bool | None")
class _SupportsCtxMgr(Protocol[_T_co, _ExitT_co]):
def __contextmanager__(self) -> AbstractContextManager[_T_co, _ExitT_co]: ...
class _SupportsAsyncCtxMgr(Protocol[_T_co, _ExitT_co]):
def __asynccontextmanager__(
self,
) -> AbstractAsyncContextManager[_T_co, _ExitT_co]: ...
class ContextManagerMixin:
"""
Mixin class providing context manager functionality via a generator-based
implementation.
This class allows you to implement a context manager via :meth:`__contextmanager__`
which should return a generator. The mechanics are meant to mirror those of
:func:`@contextmanager <contextlib.contextmanager>`.
.. note:: Classes using this mix-in are not reentrant as context managers, meaning
that once you enter it, you can't re-enter before first exiting it.
.. seealso:: :doc:`contextmanagers`
"""
__cm: AbstractContextManager[object, bool | None] | None = None
@final
def __enter__(self: _SupportsCtxMgr[_T_co, bool | None]) -> _T_co:
# Needed for mypy to assume self still has the __cm member
assert isinstance(self, ContextManagerMixin)
if self.__cm is not None:
raise RuntimeError(
f"this {self.__class__.__qualname__} has already been entered"
)
cm = self.__contextmanager__()
if not isinstance(cm, AbstractContextManager):
if isgenerator(cm):
raise TypeError(
"__contextmanager__() returned a generator object instead of "
"a context manager. Did you forget to add the @contextmanager "
"decorator?"
)
raise TypeError(
f"__contextmanager__() did not return a context manager object, "
f"but {cm.__class__!r}"
)
if cm is self:
raise TypeError(
f"{self.__class__.__qualname__}.__contextmanager__() returned "
f"self. Did you forget to add the @contextmanager decorator and a "
f"'yield' statement?"
)
value = cm.__enter__()
self.__cm = cm
return value
@final
def __exit__(
self: _SupportsCtxMgr[object, _ExitT_co],
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> _ExitT_co:
# Needed for mypy to assume self still has the __cm member
assert isinstance(self, ContextManagerMixin)
if self.__cm is None:
raise RuntimeError(
f"this {self.__class__.__qualname__} has not been entered yet"
)
# Prevent circular references
cm = self.__cm
del self.__cm
return cast(_ExitT_co, cm.__exit__(exc_type, exc_val, exc_tb))
@abstractmethod
def __contextmanager__(self) -> AbstractContextManager[object, bool | None]:
"""
Implement your context manager logic here.
This method **must** be decorated with
:func:`@contextmanager <contextlib.contextmanager>`.
.. note:: Remember that the ``yield`` will raise any exception raised in the
enclosed context block, so use a ``finally:`` block to clean up resources!
:return: a context manager object
"""
class AsyncContextManagerMixin:
"""
Mixin class providing async context manager functionality via a generator-based
implementation.
This class allows you to implement a context manager via
:meth:`__asynccontextmanager__`. The mechanics are meant to mirror those of
:func:`@asynccontextmanager <contextlib.asynccontextmanager>`.
.. note:: Classes using this mix-in are not reentrant as context managers, meaning
that once you enter it, you can't re-enter before first exiting it.
.. seealso:: :doc:`contextmanagers`
"""
__cm: AbstractAsyncContextManager[object, bool | None] | None = None
@final
async def __aenter__(self: _SupportsAsyncCtxMgr[_T_co, bool | None]) -> _T_co:
# Needed for mypy to assume self still has the __cm member
assert isinstance(self, AsyncContextManagerMixin)
if self.__cm is not None:
raise RuntimeError(
f"this {self.__class__.__qualname__} has already been entered"
)
cm = self.__asynccontextmanager__()
if not isinstance(cm, AbstractAsyncContextManager):
if isasyncgen(cm):
raise TypeError(
"__asynccontextmanager__() returned an async generator instead of "
"an async context manager. Did you forget to add the "
"@asynccontextmanager decorator?"
)
elif iscoroutine(cm):
cm.close()
raise TypeError(
"__asynccontextmanager__() returned a coroutine object instead of "
"an async context manager. Did you forget to add the "
"@asynccontextmanager decorator and a 'yield' statement?"
)
raise TypeError(
f"__asynccontextmanager__() did not return an async context manager, "
f"but {cm.__class__!r}"
)
if cm is self:
raise TypeError(
f"{self.__class__.__qualname__}.__asynccontextmanager__() returned "
f"self. Did you forget to add the @asynccontextmanager decorator and a "
f"'yield' statement?"
)
value = await cm.__aenter__()
self.__cm = cm
return value
@final
async def __aexit__(
self: _SupportsAsyncCtxMgr[object, _ExitT_co],
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> _ExitT_co:
assert isinstance(self, AsyncContextManagerMixin)
if self.__cm is None:
raise RuntimeError(
f"this {self.__class__.__qualname__} has not been entered yet"
)
# Prevent circular references
cm = self.__cm
del self.__cm
return cast(_ExitT_co, await cm.__aexit__(exc_type, exc_val, exc_tb))
@abstractmethod
def __asynccontextmanager__(
self,
) -> AbstractAsyncContextManager[object, bool | None]:
"""
Implement your async context manager logic here.
This method **must** be decorated with
:func:`@asynccontextmanager <contextlib.asynccontextmanager>`.
.. note:: Remember that the ``yield`` will raise any exception raised in the
enclosed context block, so use a ``finally:`` block to clean up resources!
:return: an async context manager object
"""

View File

@ -0,0 +1,234 @@
from __future__ import annotations
import math
import sys
import threading
from collections.abc import Awaitable, Callable, Generator
from contextlib import contextmanager
from contextvars import Token
from importlib import import_module
from typing import TYPE_CHECKING, Any, TypeVar
from ._exceptions import NoEventLoopError
if sys.version_info >= (3, 11):
from typing import TypeVarTuple, Unpack
else:
from typing_extensions import TypeVarTuple, Unpack
sniffio: Any
try:
import sniffio
except ModuleNotFoundError:
sniffio = None
if TYPE_CHECKING:
from ..abc import AsyncBackend
# This must be updated when new backends are introduced
BACKENDS = "asyncio", "trio"
T_Retval = TypeVar("T_Retval")
PosArgsT = TypeVarTuple("PosArgsT")
threadlocals = threading.local()
loaded_backends: dict[str, type[AsyncBackend]] = {}
def run(
func: Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]],
*args: Unpack[PosArgsT],
backend: str = "asyncio",
backend_options: dict[str, Any] | None = None,
) -> T_Retval:
"""
Run the given coroutine function in an asynchronous event loop.
The current thread must not be already running an event loop.
:param func: a coroutine function
:param args: positional arguments to ``func``
:param backend: name of the asynchronous event loop implementation currently
either ``asyncio`` or ``trio``
:param backend_options: keyword arguments to call the backend ``run()``
implementation with (documented :ref:`here <backend options>`)
:return: the return value of the coroutine function
:raises RuntimeError: if an asynchronous event loop is already running in this
thread
:raises LookupError: if the named backend is not found
"""
if asynclib_name := current_async_library():
raise RuntimeError(f"Already running {asynclib_name} in this thread")
try:
async_backend = get_async_backend(backend)
except ImportError as exc:
raise LookupError(f"No such backend: {backend}") from exc
token = None
if asynclib_name is None:
# Since we're in control of the event loop, we can cache the name of the async
# library
token = set_current_async_library(backend)
try:
backend_options = backend_options or {}
return async_backend.run(func, args, {}, backend_options)
finally:
reset_current_async_library(token)
async def sleep(delay: float) -> None:
"""
Pause the current task for the specified duration.
:param delay: the duration, in seconds
"""
return await get_async_backend().sleep(delay)
async def sleep_forever() -> None:
"""
Pause the current task until it's cancelled.
This is a shortcut for ``sleep(math.inf)``.
.. versionadded:: 3.1
"""
await sleep(math.inf)
async def sleep_until(deadline: float) -> None:
"""
Pause the current task until the given time.
:param deadline: the absolute time to wake up at (according to the internal
monotonic clock of the event loop)
.. versionadded:: 3.1
"""
now = current_time()
await sleep(max(deadline - now, 0))
def current_time() -> float:
"""
Return the current value of the event loop's internal clock.
:return: the clock value (seconds)
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
current thread
"""
return get_async_backend().current_time()
def get_all_backends() -> tuple[str, ...]:
"""Return a tuple of the names of all built-in backends."""
return BACKENDS
def get_available_backends() -> tuple[str, ...]:
"""
Test for the availability of built-in backends.
:return a tuple of the built-in backend names that were successfully imported
.. versionadded:: 4.12
"""
available_backends: list[str] = []
for backend_name in get_all_backends():
try:
get_async_backend(backend_name)
except ImportError:
continue
available_backends.append(backend_name)
return tuple(available_backends)
def get_cancelled_exc_class() -> type[BaseException]:
"""
Return the current async library's cancellation exception class.
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
current thread
"""
return get_async_backend().cancelled_exception_class()
#
# Private API
#
@contextmanager
def claim_worker_thread(
backend_class: type[AsyncBackend], token: object
) -> Generator[Any, None, None]:
from ..lowlevel import EventLoopToken
threadlocals.current_token = EventLoopToken(backend_class, token)
try:
yield
finally:
del threadlocals.current_token
def get_async_backend(asynclib_name: str | None = None) -> type[AsyncBackend]:
if asynclib_name is None:
asynclib_name = current_async_library()
if not asynclib_name:
raise NoEventLoopError(
f"Not currently running on any asynchronous event loop. "
f"Available async backends: {', '.join(get_all_backends())}"
)
# We use our own dict instead of sys.modules to get the already imported back-end
# class because the appropriate modules in sys.modules could potentially be only
# partially initialized
try:
return loaded_backends[asynclib_name]
except KeyError:
module = import_module(f"anyio._backends._{asynclib_name}")
loaded_backends[asynclib_name] = module.backend_class
return module.backend_class
def current_async_library() -> str | None:
if sniffio is None:
# If sniffio is not installed, we assume we're either running asyncio or nothing
import asyncio
try:
asyncio.get_running_loop()
return "asyncio"
except RuntimeError:
pass
else:
try:
return sniffio.current_async_library()
except sniffio.AsyncLibraryNotFoundError:
pass
return None
def set_current_async_library(asynclib_name: str | None) -> Token | None:
# no-op if sniffio is not installed
if sniffio is None:
return None
return sniffio.current_async_library_cvar.set(asynclib_name)
def reset_current_async_library(token: Token | None) -> None:
if token is not None:
sniffio.current_async_library_cvar.reset(token)

View File

@ -0,0 +1,156 @@
from __future__ import annotations
import sys
from collections.abc import Generator
from textwrap import dedent
from typing import Any
if sys.version_info < (3, 11):
from exceptiongroup import BaseExceptionGroup
class BrokenResourceError(Exception):
"""
Raised when trying to use a resource that has been rendered unusable due to external
causes (e.g. a send stream whose peer has disconnected).
"""
class BrokenWorkerProcess(Exception):
"""
Raised by :meth:`~anyio.to_process.run_sync` if the worker process terminates abruptly or
otherwise misbehaves.
"""
class BrokenWorkerInterpreter(Exception):
"""
Raised by :meth:`~anyio.to_interpreter.run_sync` if an unexpected exception is
raised in the subinterpreter.
"""
def __init__(self, excinfo: Any):
# This was adapted from concurrent.futures.interpreter.ExecutionFailed
msg = excinfo.formatted
if not msg:
if excinfo.type and excinfo.msg:
msg = f"{excinfo.type.__name__}: {excinfo.msg}"
else:
msg = excinfo.type.__name__ or excinfo.msg
super().__init__(msg)
self.excinfo = excinfo
def __str__(self) -> str:
try:
formatted = self.excinfo.errdisplay
except Exception:
return super().__str__()
else:
return dedent(
f"""
{super().__str__()}
Uncaught in the interpreter:
{formatted}
""".strip()
)
class BusyResourceError(Exception):
"""
Raised when two tasks are trying to read from or write to the same resource
concurrently.
"""
def __init__(self, action: str):
super().__init__(f"Another task is already {action} this resource")
class ClosedResourceError(Exception):
"""Raised when trying to use a resource that has been closed."""
class ConnectionFailed(OSError):
"""
Raised when a connection attempt fails.
.. note:: This class inherits from :exc:`OSError` for backwards compatibility.
"""
def iterate_exceptions(
exception: BaseException,
) -> Generator[BaseException, None, None]:
if isinstance(exception, BaseExceptionGroup):
for exc in exception.exceptions:
yield from iterate_exceptions(exc)
else:
yield exception
class DelimiterNotFound(Exception):
"""
Raised during
:meth:`~anyio.streams.buffered.BufferedByteReceiveStream.receive_until` if the
maximum number of bytes has been read without the delimiter being found.
"""
def __init__(self, max_bytes: int) -> None:
super().__init__(
f"The delimiter was not found among the first {max_bytes} bytes"
)
class EndOfStream(Exception):
"""
Raised when trying to read from a stream that has been closed from the other end.
"""
class IncompleteRead(Exception):
"""
Raised during
:meth:`~anyio.streams.buffered.BufferedByteReceiveStream.receive_exactly` or
:meth:`~anyio.streams.buffered.BufferedByteReceiveStream.receive_until` if the
connection is closed before the requested amount of bytes has been read.
"""
def __init__(self) -> None:
super().__init__(
"The stream was closed before the read operation could be completed"
)
class TypedAttributeLookupError(LookupError):
"""
Raised by :meth:`~anyio.TypedAttributeProvider.extra` when the given typed attribute
is not found and no default value has been given.
"""
class WouldBlock(Exception):
"""Raised by ``X_nowait`` functions if ``X()`` would block."""
class NoEventLoopError(RuntimeError):
"""
Raised by several functions that require an event loop to be running in the current
thread when there is no running event loop.
This is also raised by :func:`.from_thread.run` and :func:`.from_thread.run_sync`
if not calling from an AnyIO worker thread, and no ``token`` was passed.
"""
class RunFinishedError(RuntimeError):
"""
Raised by :func:`.from_thread.run` and :func:`.from_thread.run_sync` if the event
loop associated with the explicitly passed token has already finished.
"""
def __init__(self) -> None:
super().__init__(
"The event loop associated with the given token has already finished"
)

View File

@ -0,0 +1,797 @@
from __future__ import annotations
import os
import pathlib
import sys
from collections.abc import (
AsyncIterator,
Callable,
Iterable,
Iterator,
Sequence,
)
from dataclasses import dataclass
from functools import partial
from os import PathLike
from typing import (
IO,
TYPE_CHECKING,
Any,
AnyStr,
ClassVar,
Final,
Generic,
overload,
)
from .. import to_thread
from ..abc import AsyncResource
if TYPE_CHECKING:
from types import ModuleType
from _typeshed import OpenBinaryMode, OpenTextMode, ReadableBuffer, WriteableBuffer
else:
ReadableBuffer = OpenBinaryMode = OpenTextMode = WriteableBuffer = object
class AsyncFile(AsyncResource, Generic[AnyStr]):
"""
An asynchronous file object.
This class wraps a standard file object and provides async friendly versions of the
following blocking methods (where available on the original file object):
* read
* read1
* readline
* readlines
* readinto
* readinto1
* write
* writelines
* truncate
* seek
* tell
* flush
All other methods are directly passed through.
This class supports the asynchronous context manager protocol which closes the
underlying file at the end of the context block.
This class also supports asynchronous iteration::
async with await open_file(...) as f:
async for line in f:
print(line)
"""
def __init__(self, fp: IO[AnyStr]) -> None:
self._fp: Any = fp
def __getattr__(self, name: str) -> object:
return getattr(self._fp, name)
@property
def wrapped(self) -> IO[AnyStr]:
"""The wrapped file object."""
return self._fp
async def __aiter__(self) -> AsyncIterator[AnyStr]:
while True:
line = await self.readline()
if line:
yield line
else:
break
async def aclose(self) -> None:
return await to_thread.run_sync(self._fp.close)
async def read(self, size: int = -1) -> AnyStr:
return await to_thread.run_sync(self._fp.read, size)
async def read1(self: AsyncFile[bytes], size: int = -1) -> bytes:
return await to_thread.run_sync(self._fp.read1, size)
async def readline(self) -> AnyStr:
return await to_thread.run_sync(self._fp.readline)
async def readlines(self) -> list[AnyStr]:
return await to_thread.run_sync(self._fp.readlines)
async def readinto(self: AsyncFile[bytes], b: WriteableBuffer) -> int:
return await to_thread.run_sync(self._fp.readinto, b)
async def readinto1(self: AsyncFile[bytes], b: WriteableBuffer) -> int:
return await to_thread.run_sync(self._fp.readinto1, b)
@overload
async def write(self: AsyncFile[bytes], b: ReadableBuffer) -> int: ...
@overload
async def write(self: AsyncFile[str], b: str) -> int: ...
async def write(self, b: ReadableBuffer | str) -> int:
return await to_thread.run_sync(self._fp.write, b)
@overload
async def writelines(
self: AsyncFile[bytes], lines: Iterable[ReadableBuffer]
) -> None: ...
@overload
async def writelines(self: AsyncFile[str], lines: Iterable[str]) -> None: ...
async def writelines(self, lines: Iterable[ReadableBuffer] | Iterable[str]) -> None:
return await to_thread.run_sync(self._fp.writelines, lines)
async def truncate(self, size: int | None = None) -> int:
return await to_thread.run_sync(self._fp.truncate, size)
async def seek(self, offset: int, whence: int | None = os.SEEK_SET) -> int:
return await to_thread.run_sync(self._fp.seek, offset, whence)
async def tell(self) -> int:
return await to_thread.run_sync(self._fp.tell)
async def flush(self) -> None:
return await to_thread.run_sync(self._fp.flush)
@overload
async def open_file(
file: str | PathLike[str] | int,
mode: OpenBinaryMode,
buffering: int = ...,
encoding: str | None = ...,
errors: str | None = ...,
newline: str | None = ...,
closefd: bool = ...,
opener: Callable[[str, int], int] | None = ...,
) -> AsyncFile[bytes]: ...
@overload
async def open_file(
file: str | PathLike[str] | int,
mode: OpenTextMode = ...,
buffering: int = ...,
encoding: str | None = ...,
errors: str | None = ...,
newline: str | None = ...,
closefd: bool = ...,
opener: Callable[[str, int], int] | None = ...,
) -> AsyncFile[str]: ...
async def open_file(
file: str | PathLike[str] | int,
mode: str = "r",
buffering: int = -1,
encoding: str | None = None,
errors: str | None = None,
newline: str | None = None,
closefd: bool = True,
opener: Callable[[str, int], int] | None = None,
) -> AsyncFile[Any]:
"""
Open a file asynchronously.
The arguments are exactly the same as for the builtin :func:`open`.
:return: an asynchronous file object
"""
fp = await to_thread.run_sync(
open, file, mode, buffering, encoding, errors, newline, closefd, opener
)
return AsyncFile(fp)
def wrap_file(file: IO[AnyStr]) -> AsyncFile[AnyStr]:
"""
Wrap an existing file as an asynchronous file.
:param file: an existing file-like object
:return: an asynchronous file object
"""
return AsyncFile(file)
@dataclass(eq=False)
class _PathIterator(AsyncIterator["Path"]):
iterator: Iterator[PathLike[str]]
async def __anext__(self) -> Path:
nextval = await to_thread.run_sync(
next, self.iterator, None, abandon_on_cancel=True
)
if nextval is None:
raise StopAsyncIteration from None
return Path(nextval)
class Path:
"""
An asynchronous version of :class:`pathlib.Path`.
This class cannot be substituted for :class:`pathlib.Path` or
:class:`pathlib.PurePath`, but it is compatible with the :class:`os.PathLike`
interface.
It implements the Python 3.10 version of :class:`pathlib.Path` interface, except for
the deprecated :meth:`~pathlib.Path.link_to` method.
Some methods may be unavailable or have limited functionality, based on the Python
version:
* :meth:`~pathlib.Path.copy` (available on Python 3.14 or later)
* :meth:`~pathlib.Path.copy_into` (available on Python 3.14 or later)
* :meth:`~pathlib.Path.from_uri` (available on Python 3.13 or later)
* :meth:`~pathlib.PurePath.full_match` (available on Python 3.13 or later)
* :attr:`~pathlib.Path.info` (available on Python 3.14 or later)
* :meth:`~pathlib.Path.is_junction` (available on Python 3.12 or later)
* :meth:`~pathlib.PurePath.match` (the ``case_sensitive`` parameter is only
available on Python 3.13 or later)
* :meth:`~pathlib.Path.move` (available on Python 3.14 or later)
* :meth:`~pathlib.Path.move_into` (available on Python 3.14 or later)
* :meth:`~pathlib.PurePath.relative_to` (the ``walk_up`` parameter is only available
on Python 3.12 or later)
* :meth:`~pathlib.Path.walk` (available on Python 3.12 or later)
Any methods that do disk I/O need to be awaited on. These methods are:
* :meth:`~pathlib.Path.absolute`
* :meth:`~pathlib.Path.chmod`
* :meth:`~pathlib.Path.cwd`
* :meth:`~pathlib.Path.exists`
* :meth:`~pathlib.Path.expanduser`
* :meth:`~pathlib.Path.group`
* :meth:`~pathlib.Path.hardlink_to`
* :meth:`~pathlib.Path.home`
* :meth:`~pathlib.Path.is_block_device`
* :meth:`~pathlib.Path.is_char_device`
* :meth:`~pathlib.Path.is_dir`
* :meth:`~pathlib.Path.is_fifo`
* :meth:`~pathlib.Path.is_file`
* :meth:`~pathlib.Path.is_junction`
* :meth:`~pathlib.Path.is_mount`
* :meth:`~pathlib.Path.is_socket`
* :meth:`~pathlib.Path.is_symlink`
* :meth:`~pathlib.Path.lchmod`
* :meth:`~pathlib.Path.lstat`
* :meth:`~pathlib.Path.mkdir`
* :meth:`~pathlib.Path.open`
* :meth:`~pathlib.Path.owner`
* :meth:`~pathlib.Path.read_bytes`
* :meth:`~pathlib.Path.read_text`
* :meth:`~pathlib.Path.readlink`
* :meth:`~pathlib.Path.rename`
* :meth:`~pathlib.Path.replace`
* :meth:`~pathlib.Path.resolve`
* :meth:`~pathlib.Path.rmdir`
* :meth:`~pathlib.Path.samefile`
* :meth:`~pathlib.Path.stat`
* :meth:`~pathlib.Path.symlink_to`
* :meth:`~pathlib.Path.touch`
* :meth:`~pathlib.Path.unlink`
* :meth:`~pathlib.Path.walk`
* :meth:`~pathlib.Path.write_bytes`
* :meth:`~pathlib.Path.write_text`
Additionally, the following methods return an async iterator yielding
:class:`~.Path` objects:
* :meth:`~pathlib.Path.glob`
* :meth:`~pathlib.Path.iterdir`
* :meth:`~pathlib.Path.rglob`
"""
__slots__ = "_path", "__weakref__"
__weakref__: Any
def __init__(self, *args: str | PathLike[str]) -> None:
self._path: Final[pathlib.Path] = pathlib.Path(*args)
def __fspath__(self) -> str:
return self._path.__fspath__()
def __str__(self) -> str:
return self._path.__str__()
def __repr__(self) -> str:
return f"{self.__class__.__name__}({self.as_posix()!r})"
def __bytes__(self) -> bytes:
return self._path.__bytes__()
def __hash__(self) -> int:
return self._path.__hash__()
def __eq__(self, other: object) -> bool:
target = other._path if isinstance(other, Path) else other
return self._path.__eq__(target)
def __lt__(self, other: pathlib.PurePath | Path) -> bool:
target = other._path if isinstance(other, Path) else other
return self._path.__lt__(target)
def __le__(self, other: pathlib.PurePath | Path) -> bool:
target = other._path if isinstance(other, Path) else other
return self._path.__le__(target)
def __gt__(self, other: pathlib.PurePath | Path) -> bool:
target = other._path if isinstance(other, Path) else other
return self._path.__gt__(target)
def __ge__(self, other: pathlib.PurePath | Path) -> bool:
target = other._path if isinstance(other, Path) else other
return self._path.__ge__(target)
def __truediv__(self, other: str | PathLike[str]) -> Path:
return Path(self._path / other)
def __rtruediv__(self, other: str | PathLike[str]) -> Path:
return Path(other) / self
@property
def parts(self) -> tuple[str, ...]:
return self._path.parts
@property
def drive(self) -> str:
return self._path.drive
@property
def root(self) -> str:
return self._path.root
@property
def anchor(self) -> str:
return self._path.anchor
@property
def parents(self) -> Sequence[Path]:
return tuple(Path(p) for p in self._path.parents)
@property
def parent(self) -> Path:
return Path(self._path.parent)
@property
def name(self) -> str:
return self._path.name
@property
def suffix(self) -> str:
return self._path.suffix
@property
def suffixes(self) -> list[str]:
return self._path.suffixes
@property
def stem(self) -> str:
return self._path.stem
async def absolute(self) -> Path:
path = await to_thread.run_sync(self._path.absolute)
return Path(path)
def as_posix(self) -> str:
return self._path.as_posix()
def as_uri(self) -> str:
return self._path.as_uri()
if sys.version_info >= (3, 13):
parser: ClassVar[ModuleType] = pathlib.Path.parser
@classmethod
def from_uri(cls, uri: str) -> Path:
return Path(pathlib.Path.from_uri(uri))
def full_match(
self, path_pattern: str, *, case_sensitive: bool | None = None
) -> bool:
return self._path.full_match(path_pattern, case_sensitive=case_sensitive)
def match(
self, path_pattern: str, *, case_sensitive: bool | None = None
) -> bool:
return self._path.match(path_pattern, case_sensitive=case_sensitive)
else:
def match(self, path_pattern: str) -> bool:
return self._path.match(path_pattern)
if sys.version_info >= (3, 14):
@property
def info(self) -> Any: # TODO: add return type annotation when Typeshed gets it
return self._path.info
async def copy(
self,
target: str | os.PathLike[str],
*,
follow_symlinks: bool = True,
preserve_metadata: bool = False,
) -> Path:
func = partial(
self._path.copy,
follow_symlinks=follow_symlinks,
preserve_metadata=preserve_metadata,
)
return Path(await to_thread.run_sync(func, pathlib.Path(target)))
async def copy_into(
self,
target_dir: str | os.PathLike[str],
*,
follow_symlinks: bool = True,
preserve_metadata: bool = False,
) -> Path:
func = partial(
self._path.copy_into,
follow_symlinks=follow_symlinks,
preserve_metadata=preserve_metadata,
)
return Path(await to_thread.run_sync(func, pathlib.Path(target_dir)))
async def move(self, target: str | os.PathLike[str]) -> Path:
# Upstream does not handle anyio.Path properly as a PathLike
target = pathlib.Path(target)
return Path(await to_thread.run_sync(self._path.move, target))
async def move_into(
self,
target_dir: str | os.PathLike[str],
) -> Path:
return Path(await to_thread.run_sync(self._path.move_into, target_dir))
def is_relative_to(self, other: str | PathLike[str]) -> bool:
try:
self.relative_to(other)
return True
except ValueError:
return False
async def chmod(self, mode: int, *, follow_symlinks: bool = True) -> None:
func = partial(os.chmod, follow_symlinks=follow_symlinks)
return await to_thread.run_sync(func, self._path, mode)
@classmethod
async def cwd(cls) -> Path:
path = await to_thread.run_sync(pathlib.Path.cwd)
return cls(path)
async def exists(self) -> bool:
return await to_thread.run_sync(self._path.exists, abandon_on_cancel=True)
async def expanduser(self) -> Path:
return Path(
await to_thread.run_sync(self._path.expanduser, abandon_on_cancel=True)
)
if sys.version_info < (3, 12):
# Python 3.11 and earlier
def glob(self, pattern: str) -> AsyncIterator[Path]:
gen = self._path.glob(pattern)
return _PathIterator(gen)
elif (3, 12) <= sys.version_info < (3, 13):
# changed in Python 3.12:
# - The case_sensitive parameter was added.
def glob(
self,
pattern: str,
*,
case_sensitive: bool | None = None,
) -> AsyncIterator[Path]:
gen = self._path.glob(pattern, case_sensitive=case_sensitive)
return _PathIterator(gen)
elif sys.version_info >= (3, 13):
# Changed in Python 3.13:
# - The recurse_symlinks parameter was added.
# - The pattern parameter accepts a path-like object.
def glob( # type: ignore[misc] # mypy doesn't allow for differing signatures in a conditional block
self,
pattern: str | PathLike[str],
*,
case_sensitive: bool | None = None,
recurse_symlinks: bool = False,
) -> AsyncIterator[Path]:
gen = self._path.glob(
pattern, # type: ignore[arg-type]
case_sensitive=case_sensitive,
recurse_symlinks=recurse_symlinks,
)
return _PathIterator(gen)
async def group(self) -> str:
return await to_thread.run_sync(self._path.group, abandon_on_cancel=True)
async def hardlink_to(
self, target: str | bytes | PathLike[str] | PathLike[bytes]
) -> None:
if isinstance(target, Path):
target = target._path
await to_thread.run_sync(os.link, target, self)
@classmethod
async def home(cls) -> Path:
home_path = await to_thread.run_sync(pathlib.Path.home)
return cls(home_path)
def is_absolute(self) -> bool:
return self._path.is_absolute()
async def is_block_device(self) -> bool:
return await to_thread.run_sync(
self._path.is_block_device, abandon_on_cancel=True
)
async def is_char_device(self) -> bool:
return await to_thread.run_sync(
self._path.is_char_device, abandon_on_cancel=True
)
async def is_dir(self) -> bool:
return await to_thread.run_sync(self._path.is_dir, abandon_on_cancel=True)
async def is_fifo(self) -> bool:
return await to_thread.run_sync(self._path.is_fifo, abandon_on_cancel=True)
async def is_file(self) -> bool:
return await to_thread.run_sync(self._path.is_file, abandon_on_cancel=True)
if sys.version_info >= (3, 12):
async def is_junction(self) -> bool:
return await to_thread.run_sync(self._path.is_junction)
async def is_mount(self) -> bool:
return await to_thread.run_sync(
os.path.ismount, self._path, abandon_on_cancel=True
)
def is_reserved(self) -> bool:
return self._path.is_reserved()
async def is_socket(self) -> bool:
return await to_thread.run_sync(self._path.is_socket, abandon_on_cancel=True)
async def is_symlink(self) -> bool:
return await to_thread.run_sync(self._path.is_symlink, abandon_on_cancel=True)
async def iterdir(self) -> AsyncIterator[Path]:
gen = (
self._path.iterdir()
if sys.version_info < (3, 13)
else await to_thread.run_sync(self._path.iterdir, abandon_on_cancel=True)
)
async for path in _PathIterator(gen):
yield path
def joinpath(self, *args: str | PathLike[str]) -> Path:
return Path(self._path.joinpath(*args))
async def lchmod(self, mode: int) -> None:
await to_thread.run_sync(self._path.lchmod, mode)
async def lstat(self) -> os.stat_result:
return await to_thread.run_sync(self._path.lstat, abandon_on_cancel=True)
async def mkdir(
self, mode: int = 0o777, parents: bool = False, exist_ok: bool = False
) -> None:
await to_thread.run_sync(self._path.mkdir, mode, parents, exist_ok)
@overload
async def open(
self,
mode: OpenBinaryMode,
buffering: int = ...,
encoding: str | None = ...,
errors: str | None = ...,
newline: str | None = ...,
) -> AsyncFile[bytes]: ...
@overload
async def open(
self,
mode: OpenTextMode = ...,
buffering: int = ...,
encoding: str | None = ...,
errors: str | None = ...,
newline: str | None = ...,
) -> AsyncFile[str]: ...
async def open(
self,
mode: str = "r",
buffering: int = -1,
encoding: str | None = None,
errors: str | None = None,
newline: str | None = None,
) -> AsyncFile[Any]:
fp = await to_thread.run_sync(
self._path.open, mode, buffering, encoding, errors, newline
)
return AsyncFile(fp)
async def owner(self) -> str:
return await to_thread.run_sync(self._path.owner, abandon_on_cancel=True)
async def read_bytes(self) -> bytes:
return await to_thread.run_sync(self._path.read_bytes)
async def read_text(
self, encoding: str | None = None, errors: str | None = None
) -> str:
return await to_thread.run_sync(self._path.read_text, encoding, errors)
if sys.version_info >= (3, 12):
def relative_to(
self, *other: str | PathLike[str], walk_up: bool = False
) -> Path:
# relative_to() should work with any PathLike but it doesn't
others = [pathlib.Path(other) for other in other]
return Path(self._path.relative_to(*others, walk_up=walk_up))
else:
def relative_to(self, *other: str | PathLike[str]) -> Path:
return Path(self._path.relative_to(*other))
async def readlink(self) -> Path:
target = await to_thread.run_sync(os.readlink, self._path)
return Path(target)
async def rename(self, target: str | pathlib.PurePath | Path) -> Path:
if isinstance(target, Path):
target = target._path
await to_thread.run_sync(self._path.rename, target)
return Path(target)
async def replace(self, target: str | pathlib.PurePath | Path) -> Path:
if isinstance(target, Path):
target = target._path
await to_thread.run_sync(self._path.replace, target)
return Path(target)
async def resolve(self, strict: bool = False) -> Path:
func = partial(self._path.resolve, strict=strict)
return Path(await to_thread.run_sync(func, abandon_on_cancel=True))
if sys.version_info < (3, 12):
# Pre Python 3.12
def rglob(self, pattern: str) -> AsyncIterator[Path]:
gen = self._path.rglob(pattern)
return _PathIterator(gen)
elif (3, 12) <= sys.version_info < (3, 13):
# Changed in Python 3.12:
# - The case_sensitive parameter was added.
def rglob(
self, pattern: str, *, case_sensitive: bool | None = None
) -> AsyncIterator[Path]:
gen = self._path.rglob(pattern, case_sensitive=case_sensitive)
return _PathIterator(gen)
elif sys.version_info >= (3, 13):
# Changed in Python 3.13:
# - The recurse_symlinks parameter was added.
# - The pattern parameter accepts a path-like object.
def rglob( # type: ignore[misc] # mypy doesn't allow for differing signatures in a conditional block
self,
pattern: str | PathLike[str],
*,
case_sensitive: bool | None = None,
recurse_symlinks: bool = False,
) -> AsyncIterator[Path]:
gen = self._path.rglob(
pattern, # type: ignore[arg-type]
case_sensitive=case_sensitive,
recurse_symlinks=recurse_symlinks,
)
return _PathIterator(gen)
async def rmdir(self) -> None:
await to_thread.run_sync(self._path.rmdir)
async def samefile(self, other_path: str | PathLike[str]) -> bool:
if isinstance(other_path, Path):
other_path = other_path._path
return await to_thread.run_sync(
self._path.samefile, other_path, abandon_on_cancel=True
)
async def stat(self, *, follow_symlinks: bool = True) -> os.stat_result:
func = partial(os.stat, follow_symlinks=follow_symlinks)
return await to_thread.run_sync(func, self._path, abandon_on_cancel=True)
async def symlink_to(
self,
target: str | bytes | PathLike[str] | PathLike[bytes],
target_is_directory: bool = False,
) -> None:
if isinstance(target, Path):
target = target._path
await to_thread.run_sync(self._path.symlink_to, target, target_is_directory)
async def touch(self, mode: int = 0o666, exist_ok: bool = True) -> None:
await to_thread.run_sync(self._path.touch, mode, exist_ok)
async def unlink(self, missing_ok: bool = False) -> None:
try:
await to_thread.run_sync(self._path.unlink)
except FileNotFoundError:
if not missing_ok:
raise
if sys.version_info >= (3, 12):
async def walk(
self,
top_down: bool = True,
on_error: Callable[[OSError], object] | None = None,
follow_symlinks: bool = False,
) -> AsyncIterator[tuple[Path, list[str], list[str]]]:
def get_next_value() -> tuple[pathlib.Path, list[str], list[str]] | None:
try:
return next(gen)
except StopIteration:
return None
gen = self._path.walk(top_down, on_error, follow_symlinks)
while True:
value = await to_thread.run_sync(get_next_value)
if value is None:
return
root, dirs, paths = value
yield Path(root), dirs, paths
def with_name(self, name: str) -> Path:
return Path(self._path.with_name(name))
def with_stem(self, stem: str) -> Path:
return Path(self._path.with_name(stem + self._path.suffix))
def with_suffix(self, suffix: str) -> Path:
return Path(self._path.with_suffix(suffix))
def with_segments(self, *pathsegments: str | PathLike[str]) -> Path:
return Path(*pathsegments)
async def write_bytes(self, data: bytes) -> int:
return await to_thread.run_sync(self._path.write_bytes, data)
async def write_text(
self,
data: str,
encoding: str | None = None,
errors: str | None = None,
newline: str | None = None,
) -> int:
# Path.write_text() does not support the "newline" parameter before Python 3.10
def sync_write_text() -> int:
with self._path.open(
"w", encoding=encoding, errors=errors, newline=newline
) as fp:
return fp.write(data)
return await to_thread.run_sync(sync_write_text)
PathLike.register(Path)

View File

@ -0,0 +1,18 @@
from __future__ import annotations
from ..abc import AsyncResource
from ._tasks import CancelScope
async def aclose_forcefully(resource: AsyncResource) -> None:
"""
Close an asynchronous resource in a cancelled scope.
Doing this closes the resource without waiting on anything.
:param resource: the resource to close
"""
with CancelScope() as scope:
scope.cancel()
await resource.aclose()

View File

@ -0,0 +1,29 @@
from __future__ import annotations
from collections.abc import AsyncIterator
from contextlib import AbstractContextManager
from signal import Signals
from ._eventloop import get_async_backend
def open_signal_receiver(
*signals: Signals,
) -> AbstractContextManager[AsyncIterator[Signals]]:
"""
Start receiving operating system signals.
:param signals: signals to receive (e.g. ``signal.SIGINT``)
:return: an asynchronous context manager for an asynchronous iterator which yields
signal numbers
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
current thread
.. warning:: Windows does not support signals natively so it is best to avoid
relying on this in cross-platform applications.
.. warning:: On asyncio, this permanently replaces any previous signal handler for
the given signals, as set via :meth:`~asyncio.loop.add_signal_handler`.
"""
return get_async_backend().open_signal_receiver(*signals)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,52 @@
from __future__ import annotations
import math
from typing import TypeVar
from warnings import warn
from ..streams.memory import (
MemoryObjectReceiveStream,
MemoryObjectSendStream,
_MemoryObjectStreamState,
)
T_Item = TypeVar("T_Item")
class create_memory_object_stream(
tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]],
):
"""
Create a memory object stream.
The stream's item type can be annotated like
:func:`create_memory_object_stream[T_Item]`.
:param max_buffer_size: number of items held in the buffer until ``send()`` starts
blocking
:param item_type: old way of marking the streams with the right generic type for
static typing (does nothing on AnyIO 4)
.. deprecated:: 4.0
Use ``create_memory_object_stream[YourItemType](...)`` instead.
:return: a tuple of (send stream, receive stream)
"""
def __new__( # type: ignore[misc]
cls, max_buffer_size: float = 0, item_type: object = None
) -> tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]]:
if max_buffer_size != math.inf and not isinstance(max_buffer_size, int):
raise ValueError("max_buffer_size must be either an integer or math.inf")
if max_buffer_size < 0:
raise ValueError("max_buffer_size cannot be negative")
if item_type is not None:
warn(
"The item_type argument has been deprecated in AnyIO 4.0. "
"Use create_memory_object_stream[YourItemType](...) instead.",
DeprecationWarning,
stacklevel=2,
)
state = _MemoryObjectStreamState[T_Item](max_buffer_size)
return (MemoryObjectSendStream(state), MemoryObjectReceiveStream(state))

View File

@ -0,0 +1,202 @@
from __future__ import annotations
import sys
from collections.abc import AsyncIterable, Iterable, Mapping, Sequence
from io import BytesIO
from os import PathLike
from subprocess import PIPE, CalledProcessError, CompletedProcess
from typing import IO, Any, Union, cast
from ..abc import Process
from ._eventloop import get_async_backend
from ._tasks import create_task_group
if sys.version_info >= (3, 10):
from typing import TypeAlias
else:
from typing_extensions import TypeAlias
StrOrBytesPath: TypeAlias = Union[str, bytes, "PathLike[str]", "PathLike[bytes]"]
async def run_process(
command: StrOrBytesPath | Sequence[StrOrBytesPath],
*,
input: bytes | None = None,
stdin: int | IO[Any] | None = None,
stdout: int | IO[Any] | None = PIPE,
stderr: int | IO[Any] | None = PIPE,
check: bool = True,
cwd: StrOrBytesPath | None = None,
env: Mapping[str, str] | None = None,
startupinfo: Any = None,
creationflags: int = 0,
start_new_session: bool = False,
pass_fds: Sequence[int] = (),
user: str | int | None = None,
group: str | int | None = None,
extra_groups: Iterable[str | int] | None = None,
umask: int = -1,
) -> CompletedProcess[bytes]:
"""
Run an external command in a subprocess and wait until it completes.
.. seealso:: :func:`subprocess.run`
:param command: either a string to pass to the shell, or an iterable of strings
containing the executable name or path and its arguments
:param input: bytes passed to the standard input of the subprocess
:param stdin: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
a file-like object, or `None`; ``input`` overrides this
:param stdout: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
a file-like object, or `None`
:param stderr: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
:data:`subprocess.STDOUT`, a file-like object, or `None`
:param check: if ``True``, raise :exc:`~subprocess.CalledProcessError` if the
process terminates with a return code other than 0
:param cwd: If not ``None``, change the working directory to this before running the
command
:param env: if not ``None``, this mapping replaces the inherited environment
variables from the parent process
:param startupinfo: an instance of :class:`subprocess.STARTUPINFO` that can be used
to specify process startup parameters (Windows only)
:param creationflags: flags that can be used to control the creation of the
subprocess (see :class:`subprocess.Popen` for the specifics)
:param start_new_session: if ``true`` the setsid() system call will be made in the
child process prior to the execution of the subprocess. (POSIX only)
:param pass_fds: sequence of file descriptors to keep open between the parent and
child processes. (POSIX only)
:param user: effective user to run the process as (Python >= 3.9, POSIX only)
:param group: effective group to run the process as (Python >= 3.9, POSIX only)
:param extra_groups: supplementary groups to set in the subprocess (Python >= 3.9,
POSIX only)
:param umask: if not negative, this umask is applied in the child process before
running the given command (Python >= 3.9, POSIX only)
:return: an object representing the completed process
:raises ~subprocess.CalledProcessError: if ``check`` is ``True`` and the process
exits with a nonzero return code
"""
async def drain_stream(stream: AsyncIterable[bytes], index: int) -> None:
buffer = BytesIO()
async for chunk in stream:
buffer.write(chunk)
stream_contents[index] = buffer.getvalue()
if stdin is not None and input is not None:
raise ValueError("only one of stdin and input is allowed")
async with await open_process(
command,
stdin=PIPE if input else stdin,
stdout=stdout,
stderr=stderr,
cwd=cwd,
env=env,
startupinfo=startupinfo,
creationflags=creationflags,
start_new_session=start_new_session,
pass_fds=pass_fds,
user=user,
group=group,
extra_groups=extra_groups,
umask=umask,
) as process:
stream_contents: list[bytes | None] = [None, None]
async with create_task_group() as tg:
if process.stdout:
tg.start_soon(drain_stream, process.stdout, 0)
if process.stderr:
tg.start_soon(drain_stream, process.stderr, 1)
if process.stdin and input:
await process.stdin.send(input)
await process.stdin.aclose()
await process.wait()
output, errors = stream_contents
if check and process.returncode != 0:
raise CalledProcessError(cast(int, process.returncode), command, output, errors)
return CompletedProcess(command, cast(int, process.returncode), output, errors)
async def open_process(
command: StrOrBytesPath | Sequence[StrOrBytesPath],
*,
stdin: int | IO[Any] | None = PIPE,
stdout: int | IO[Any] | None = PIPE,
stderr: int | IO[Any] | None = PIPE,
cwd: StrOrBytesPath | None = None,
env: Mapping[str, str] | None = None,
startupinfo: Any = None,
creationflags: int = 0,
start_new_session: bool = False,
pass_fds: Sequence[int] = (),
user: str | int | None = None,
group: str | int | None = None,
extra_groups: Iterable[str | int] | None = None,
umask: int = -1,
) -> Process:
"""
Start an external command in a subprocess.
.. seealso:: :class:`subprocess.Popen`
:param command: either a string to pass to the shell, or an iterable of strings
containing the executable name or path and its arguments
:param stdin: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`, a
file-like object, or ``None``
:param stdout: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
a file-like object, or ``None``
:param stderr: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
:data:`subprocess.STDOUT`, a file-like object, or ``None``
:param cwd: If not ``None``, the working directory is changed before executing
:param env: If env is not ``None``, it must be a mapping that defines the
environment variables for the new process
:param creationflags: flags that can be used to control the creation of the
subprocess (see :class:`subprocess.Popen` for the specifics)
:param startupinfo: an instance of :class:`subprocess.STARTUPINFO` that can be used
to specify process startup parameters (Windows only)
:param start_new_session: if ``true`` the setsid() system call will be made in the
child process prior to the execution of the subprocess. (POSIX only)
:param pass_fds: sequence of file descriptors to keep open between the parent and
child processes. (POSIX only)
:param user: effective user to run the process as (POSIX only)
:param group: effective group to run the process as (POSIX only)
:param extra_groups: supplementary groups to set in the subprocess (POSIX only)
:param umask: if not negative, this umask is applied in the child process before
running the given command (POSIX only)
:return: an asynchronous process object
"""
kwargs: dict[str, Any] = {}
if user is not None:
kwargs["user"] = user
if group is not None:
kwargs["group"] = group
if extra_groups is not None:
kwargs["extra_groups"] = group
if umask >= 0:
kwargs["umask"] = umask
return await get_async_backend().open_process(
command,
stdin=stdin,
stdout=stdout,
stderr=stderr,
cwd=cwd,
env=env,
startupinfo=startupinfo,
creationflags=creationflags,
start_new_session=start_new_session,
pass_fds=pass_fds,
**kwargs,
)

View File

@ -0,0 +1,753 @@
from __future__ import annotations
import math
from collections import deque
from collections.abc import Callable
from dataclasses import dataclass
from types import TracebackType
from typing import TypeVar
from ..lowlevel import checkpoint_if_cancelled
from ._eventloop import get_async_backend
from ._exceptions import BusyResourceError, NoEventLoopError
from ._tasks import CancelScope
from ._testing import TaskInfo, get_current_task
T = TypeVar("T")
@dataclass(frozen=True)
class EventStatistics:
"""
:ivar int tasks_waiting: number of tasks waiting on :meth:`~.Event.wait`
"""
tasks_waiting: int
@dataclass(frozen=True)
class CapacityLimiterStatistics:
"""
:ivar int borrowed_tokens: number of tokens currently borrowed by tasks
:ivar float total_tokens: total number of available tokens
:ivar tuple borrowers: tasks or other objects currently holding tokens borrowed from
this limiter
:ivar int tasks_waiting: number of tasks waiting on
:meth:`~.CapacityLimiter.acquire` or
:meth:`~.CapacityLimiter.acquire_on_behalf_of`
"""
borrowed_tokens: int
total_tokens: float
borrowers: tuple[object, ...]
tasks_waiting: int
@dataclass(frozen=True)
class LockStatistics:
"""
:ivar bool locked: flag indicating if this lock is locked or not
:ivar ~anyio.TaskInfo owner: task currently holding the lock (or ``None`` if the
lock is not held by any task)
:ivar int tasks_waiting: number of tasks waiting on :meth:`~.Lock.acquire`
"""
locked: bool
owner: TaskInfo | None
tasks_waiting: int
@dataclass(frozen=True)
class ConditionStatistics:
"""
:ivar int tasks_waiting: number of tasks blocked on :meth:`~.Condition.wait`
:ivar ~anyio.LockStatistics lock_statistics: statistics of the underlying
:class:`~.Lock`
"""
tasks_waiting: int
lock_statistics: LockStatistics
@dataclass(frozen=True)
class SemaphoreStatistics:
"""
:ivar int tasks_waiting: number of tasks waiting on :meth:`~.Semaphore.acquire`
"""
tasks_waiting: int
class Event:
def __new__(cls) -> Event:
try:
return get_async_backend().create_event()
except NoEventLoopError:
return EventAdapter()
def set(self) -> None:
"""Set the flag, notifying all listeners."""
raise NotImplementedError
def is_set(self) -> bool:
"""Return ``True`` if the flag is set, ``False`` if not."""
raise NotImplementedError
async def wait(self) -> None:
"""
Wait until the flag has been set.
If the flag has already been set when this method is called, it returns
immediately.
"""
raise NotImplementedError
def statistics(self) -> EventStatistics:
"""Return statistics about the current state of this event."""
raise NotImplementedError
class EventAdapter(Event):
_internal_event: Event | None = None
_is_set: bool = False
def __new__(cls) -> EventAdapter:
return object.__new__(cls)
@property
def _event(self) -> Event:
if self._internal_event is None:
self._internal_event = get_async_backend().create_event()
if self._is_set:
self._internal_event.set()
return self._internal_event
def set(self) -> None:
if self._internal_event is None:
self._is_set = True
else:
self._event.set()
def is_set(self) -> bool:
if self._internal_event is None:
return self._is_set
return self._internal_event.is_set()
async def wait(self) -> None:
await self._event.wait()
def statistics(self) -> EventStatistics:
if self._internal_event is None:
return EventStatistics(tasks_waiting=0)
return self._internal_event.statistics()
class Lock:
def __new__(cls, *, fast_acquire: bool = False) -> Lock:
try:
return get_async_backend().create_lock(fast_acquire=fast_acquire)
except NoEventLoopError:
return LockAdapter(fast_acquire=fast_acquire)
async def __aenter__(self) -> None:
await self.acquire()
async def __aexit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
self.release()
async def acquire(self) -> None:
"""Acquire the lock."""
raise NotImplementedError
def acquire_nowait(self) -> None:
"""
Acquire the lock, without blocking.
:raises ~anyio.WouldBlock: if the operation would block
"""
raise NotImplementedError
def release(self) -> None:
"""Release the lock."""
raise NotImplementedError
def locked(self) -> bool:
"""Return True if the lock is currently held."""
raise NotImplementedError
def statistics(self) -> LockStatistics:
"""
Return statistics about the current state of this lock.
.. versionadded:: 3.0
"""
raise NotImplementedError
class LockAdapter(Lock):
_internal_lock: Lock | None = None
def __new__(cls, *, fast_acquire: bool = False) -> LockAdapter:
return object.__new__(cls)
def __init__(self, *, fast_acquire: bool = False):
self._fast_acquire = fast_acquire
@property
def _lock(self) -> Lock:
if self._internal_lock is None:
self._internal_lock = get_async_backend().create_lock(
fast_acquire=self._fast_acquire
)
return self._internal_lock
async def __aenter__(self) -> None:
await self._lock.acquire()
async def __aexit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
if self._internal_lock is not None:
self._internal_lock.release()
async def acquire(self) -> None:
"""Acquire the lock."""
await self._lock.acquire()
def acquire_nowait(self) -> None:
"""
Acquire the lock, without blocking.
:raises ~anyio.WouldBlock: if the operation would block
"""
self._lock.acquire_nowait()
def release(self) -> None:
"""Release the lock."""
self._lock.release()
def locked(self) -> bool:
"""Return True if the lock is currently held."""
return self._lock.locked()
def statistics(self) -> LockStatistics:
"""
Return statistics about the current state of this lock.
.. versionadded:: 3.0
"""
if self._internal_lock is None:
return LockStatistics(False, None, 0)
return self._internal_lock.statistics()
class Condition:
_owner_task: TaskInfo | None = None
def __init__(self, lock: Lock | None = None):
self._lock = lock or Lock()
self._waiters: deque[Event] = deque()
async def __aenter__(self) -> None:
await self.acquire()
async def __aexit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
self.release()
def _check_acquired(self) -> None:
if self._owner_task != get_current_task():
raise RuntimeError("The current task is not holding the underlying lock")
async def acquire(self) -> None:
"""Acquire the underlying lock."""
await self._lock.acquire()
self._owner_task = get_current_task()
def acquire_nowait(self) -> None:
"""
Acquire the underlying lock, without blocking.
:raises ~anyio.WouldBlock: if the operation would block
"""
self._lock.acquire_nowait()
self._owner_task = get_current_task()
def release(self) -> None:
"""Release the underlying lock."""
self._lock.release()
def locked(self) -> bool:
"""Return True if the lock is set."""
return self._lock.locked()
def notify(self, n: int = 1) -> None:
"""Notify exactly n listeners."""
self._check_acquired()
for _ in range(n):
try:
event = self._waiters.popleft()
except IndexError:
break
event.set()
def notify_all(self) -> None:
"""Notify all the listeners."""
self._check_acquired()
for event in self._waiters:
event.set()
self._waiters.clear()
async def wait(self) -> None:
"""Wait for a notification."""
await checkpoint_if_cancelled()
self._check_acquired()
event = Event()
self._waiters.append(event)
self.release()
try:
await event.wait()
except BaseException:
if not event.is_set():
self._waiters.remove(event)
raise
finally:
with CancelScope(shield=True):
await self.acquire()
async def wait_for(self, predicate: Callable[[], T]) -> T:
"""
Wait until a predicate becomes true.
:param predicate: a callable that returns a truthy value when the condition is
met
:return: the result of the predicate
.. versionadded:: 4.11.0
"""
while not (result := predicate()):
await self.wait()
return result
def statistics(self) -> ConditionStatistics:
"""
Return statistics about the current state of this condition.
.. versionadded:: 3.0
"""
return ConditionStatistics(len(self._waiters), self._lock.statistics())
class Semaphore:
def __new__(
cls,
initial_value: int,
*,
max_value: int | None = None,
fast_acquire: bool = False,
) -> Semaphore:
try:
return get_async_backend().create_semaphore(
initial_value, max_value=max_value, fast_acquire=fast_acquire
)
except NoEventLoopError:
return SemaphoreAdapter(initial_value, max_value=max_value)
def __init__(
self,
initial_value: int,
*,
max_value: int | None = None,
fast_acquire: bool = False,
):
if not isinstance(initial_value, int):
raise TypeError("initial_value must be an integer")
if initial_value < 0:
raise ValueError("initial_value must be >= 0")
if max_value is not None:
if not isinstance(max_value, int):
raise TypeError("max_value must be an integer or None")
if max_value < initial_value:
raise ValueError(
"max_value must be equal to or higher than initial_value"
)
self._fast_acquire = fast_acquire
async def __aenter__(self) -> Semaphore:
await self.acquire()
return self
async def __aexit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
self.release()
async def acquire(self) -> None:
"""Decrement the semaphore value, blocking if necessary."""
raise NotImplementedError
def acquire_nowait(self) -> None:
"""
Acquire the underlying lock, without blocking.
:raises ~anyio.WouldBlock: if the operation would block
"""
raise NotImplementedError
def release(self) -> None:
"""Increment the semaphore value."""
raise NotImplementedError
@property
def value(self) -> int:
"""The current value of the semaphore."""
raise NotImplementedError
@property
def max_value(self) -> int | None:
"""The maximum value of the semaphore."""
raise NotImplementedError
def statistics(self) -> SemaphoreStatistics:
"""
Return statistics about the current state of this semaphore.
.. versionadded:: 3.0
"""
raise NotImplementedError
class SemaphoreAdapter(Semaphore):
_internal_semaphore: Semaphore | None = None
def __new__(
cls,
initial_value: int,
*,
max_value: int | None = None,
fast_acquire: bool = False,
) -> SemaphoreAdapter:
return object.__new__(cls)
def __init__(
self,
initial_value: int,
*,
max_value: int | None = None,
fast_acquire: bool = False,
) -> None:
super().__init__(initial_value, max_value=max_value, fast_acquire=fast_acquire)
self._initial_value = initial_value
self._max_value = max_value
@property
def _semaphore(self) -> Semaphore:
if self._internal_semaphore is None:
self._internal_semaphore = get_async_backend().create_semaphore(
self._initial_value, max_value=self._max_value
)
return self._internal_semaphore
async def acquire(self) -> None:
await self._semaphore.acquire()
def acquire_nowait(self) -> None:
self._semaphore.acquire_nowait()
def release(self) -> None:
self._semaphore.release()
@property
def value(self) -> int:
if self._internal_semaphore is None:
return self._initial_value
return self._semaphore.value
@property
def max_value(self) -> int | None:
return self._max_value
def statistics(self) -> SemaphoreStatistics:
if self._internal_semaphore is None:
return SemaphoreStatistics(tasks_waiting=0)
return self._semaphore.statistics()
class CapacityLimiter:
def __new__(cls, total_tokens: float) -> CapacityLimiter:
try:
return get_async_backend().create_capacity_limiter(total_tokens)
except NoEventLoopError:
return CapacityLimiterAdapter(total_tokens)
async def __aenter__(self) -> None:
raise NotImplementedError
async def __aexit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
raise NotImplementedError
@property
def total_tokens(self) -> float:
"""
The total number of tokens available for borrowing.
This is a read-write property. If the total number of tokens is increased, the
proportionate number of tasks waiting on this limiter will be granted their
tokens.
.. versionchanged:: 3.0
The property is now writable.
.. versionchanged:: 4.12
The value can now be set to 0.
"""
raise NotImplementedError
@total_tokens.setter
def total_tokens(self, value: float) -> None:
raise NotImplementedError
@property
def borrowed_tokens(self) -> int:
"""The number of tokens that have currently been borrowed."""
raise NotImplementedError
@property
def available_tokens(self) -> float:
"""The number of tokens currently available to be borrowed"""
raise NotImplementedError
def acquire_nowait(self) -> None:
"""
Acquire a token for the current task without waiting for one to become
available.
:raises ~anyio.WouldBlock: if there are no tokens available for borrowing
"""
raise NotImplementedError
def acquire_on_behalf_of_nowait(self, borrower: object) -> None:
"""
Acquire a token without waiting for one to become available.
:param borrower: the entity borrowing a token
:raises ~anyio.WouldBlock: if there are no tokens available for borrowing
"""
raise NotImplementedError
async def acquire(self) -> None:
"""
Acquire a token for the current task, waiting if necessary for one to become
available.
"""
raise NotImplementedError
async def acquire_on_behalf_of(self, borrower: object) -> None:
"""
Acquire a token, waiting if necessary for one to become available.
:param borrower: the entity borrowing a token
"""
raise NotImplementedError
def release(self) -> None:
"""
Release the token held by the current task.
:raises RuntimeError: if the current task has not borrowed a token from this
limiter.
"""
raise NotImplementedError
def release_on_behalf_of(self, borrower: object) -> None:
"""
Release the token held by the given borrower.
:raises RuntimeError: if the borrower has not borrowed a token from this
limiter.
"""
raise NotImplementedError
def statistics(self) -> CapacityLimiterStatistics:
"""
Return statistics about the current state of this limiter.
.. versionadded:: 3.0
"""
raise NotImplementedError
class CapacityLimiterAdapter(CapacityLimiter):
_internal_limiter: CapacityLimiter | None = None
def __new__(cls, total_tokens: float) -> CapacityLimiterAdapter:
return object.__new__(cls)
def __init__(self, total_tokens: float) -> None:
self.total_tokens = total_tokens
@property
def _limiter(self) -> CapacityLimiter:
if self._internal_limiter is None:
self._internal_limiter = get_async_backend().create_capacity_limiter(
self._total_tokens
)
return self._internal_limiter
async def __aenter__(self) -> None:
await self._limiter.__aenter__()
async def __aexit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
return await self._limiter.__aexit__(exc_type, exc_val, exc_tb)
@property
def total_tokens(self) -> float:
if self._internal_limiter is None:
return self._total_tokens
return self._internal_limiter.total_tokens
@total_tokens.setter
def total_tokens(self, value: float) -> None:
if not isinstance(value, int) and value is not math.inf:
raise TypeError("total_tokens must be an int or math.inf")
elif value < 1:
raise ValueError("total_tokens must be >= 1")
if self._internal_limiter is None:
self._total_tokens = value
return
self._limiter.total_tokens = value
@property
def borrowed_tokens(self) -> int:
if self._internal_limiter is None:
return 0
return self._internal_limiter.borrowed_tokens
@property
def available_tokens(self) -> float:
if self._internal_limiter is None:
return self._total_tokens
return self._internal_limiter.available_tokens
def acquire_nowait(self) -> None:
self._limiter.acquire_nowait()
def acquire_on_behalf_of_nowait(self, borrower: object) -> None:
self._limiter.acquire_on_behalf_of_nowait(borrower)
async def acquire(self) -> None:
await self._limiter.acquire()
async def acquire_on_behalf_of(self, borrower: object) -> None:
await self._limiter.acquire_on_behalf_of(borrower)
def release(self) -> None:
self._limiter.release()
def release_on_behalf_of(self, borrower: object) -> None:
self._limiter.release_on_behalf_of(borrower)
def statistics(self) -> CapacityLimiterStatistics:
if self._internal_limiter is None:
return CapacityLimiterStatistics(
borrowed_tokens=0,
total_tokens=self.total_tokens,
borrowers=(),
tasks_waiting=0,
)
return self._internal_limiter.statistics()
class ResourceGuard:
"""
A context manager for ensuring that a resource is only used by a single task at a
time.
Entering this context manager while the previous has not exited it yet will trigger
:exc:`BusyResourceError`.
:param action: the action to guard against (visible in the :exc:`BusyResourceError`
when triggered, e.g. "Another task is already {action} this resource")
.. versionadded:: 4.1
"""
__slots__ = "action", "_guarded"
def __init__(self, action: str = "using"):
self.action: str = action
self._guarded = False
def __enter__(self) -> None:
if self._guarded:
raise BusyResourceError(self.action)
self._guarded = True
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
self._guarded = False

Some files were not shown because too many files have changed in this diff Show More