<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Genropy</title><link>https://www.genropy.org/</link><description>Recent content on Genropy</description><generator>Hugo</generator><language>it</language><lastBuildDate>Tue, 07 Apr 2026 15:30:00 +0000</lastBuildDate><atom:link href="https://www.genropy.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Nuovi temi e una veste grafica tutta nuova</title><link>https://www.genropy.org/blog/nuovi-temi-e-una-veste-grafica-tutta-nuova/</link><pubDate>Tue, 07 Apr 2026 15:30:00 +0000</pubDate><guid>https://www.genropy.org/blog/nuovi-temi-e-una-veste-grafica-tutta-nuova/</guid><description>&lt;p style="font-size: 1.1em;margin: 20px 0"&gt;La release 26.04.07 di Genropy porta con s&amp;eacute; un profondo rinnovamento dell'interfaccia utente grazie alla modernizzazione completa del sistema di temi CSS, insieme a importanti novit&amp;agrave; architetturali come il sistema di invio email, il gestore centralizzato degli errori&amp;nbsp;e il nuovo dispatcher REST API.&lt;/p&gt;
&lt;h2 id="il-nuovo-sistema-di-temi-design-token-e-coerenza-visiva"&gt;Il nuovo sistema di temi: design token e coerenza visiva&lt;/h2&gt;
&lt;p&gt;La novità più evidente di questa release è il completo rifacimento del sistema di temi e colori. Tutti gli applicativi costruiti con Genropy beneficiano immediatamente di una nuova veste grafica più moderna, coerente e accessibile, senza necessità di modificare una singola riga di codice.&lt;/p&gt;</description></item><item><title>Version 26.04.07</title><link>https://www.genropy.org/blog/release-notes/version-26-04-07/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.genropy.org/blog/release-notes/version-26-04-07/</guid><description>&lt;h2&gt;New Features&lt;/h2&gt;&lt;h3&gt;Mail Proxy and Email Queue&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A &lt;code&gt;message_to_send&lt;/code&gt; queue table stores outgoing emails together with their sending status. A dedicated dashboard lets operators monitor the queue in real time.&lt;/li&gt; &lt;li&gt;A mail-proxy integration layer routes messages through the queue, using the &lt;code&gt;message_to_send&lt;/code&gt; formula as the single gatekeeper that decides whether a message is actually sent.&lt;/li&gt; &lt;li&gt;The new architecture decouples email generation from delivery, making retry logic and auditing straightforward.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;GnrListener – event-driven handler system&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A new &lt;code&gt;GnrListener&lt;/code&gt; class (&lt;code&gt;gnr.app.gnrlistener&lt;/code&gt;) provides a declarative, database-backed publish/subscribe mechanism.&lt;/li&gt; &lt;li&gt;Handlers are registered with the &lt;code&gt;@listen&lt;/code&gt; decorator and are auto-discovered at start-up both at module level and on package classes.&lt;/li&gt; &lt;li&gt;An optional thread-pool executor enables parallel handler execution for high-throughput workloads.&lt;/li&gt; &lt;li&gt;Notification payloads are automatically enriched with &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;page_id&lt;/code&gt;, and &lt;code&gt;ts&lt;/code&gt; fields and serialised with &lt;code&gt;toTypedJSON&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;The polling loop has been delegated to the adapter layer, keeping the core listener free of database-specific code.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Centralised Error Handler&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A new centralised &lt;code&gt;errorHandler&lt;/code&gt; (#677) replaces the scattered per-page error handling.&lt;/li&gt; &lt;li&gt;Errors are broadcast via &lt;code&gt;pkgBroadcast&lt;/code&gt; so every open page is notified simultaneously.&lt;/li&gt; &lt;li&gt;Toast notifications provide immediate, non-intrusive feedback.&lt;/li&gt; &lt;li&gt;A traceback viewer allows developers to inspect the full Python stack trace directly in the browser.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;REST API Dispatcher (&lt;code&gt;_api&lt;/code&gt;)&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A new &lt;code&gt;_api&lt;/code&gt; dispatcher has been added to the web layer, providing first-class routing for REST API endpoints without requiring a dedicated WSGI application.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;ExpandBox Widget&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A new &lt;code&gt;expandbox&lt;/code&gt; widget based on the HTML5 &lt;code&gt;&lt;br/&gt; &lt;details&gt;&lt;/details&gt;&lt;/code&gt;/&lt;code&gt; &lt;summary&gt;&lt;/summary&gt;&lt;/code&gt; elements has been added to the grouplet system. It provides zero-JavaScript collapsible sections and integrates with the existing grouplet panel infrastructure.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;GnrToast Improvements&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;strong&gt;persistent&lt;/strong&gt; — the toast stays visible until the user explicitly dismisses it.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;copyable&lt;/strong&gt; — a copy-to-clipboard button is added to the toast body, useful for error messages or reference codes.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;code&gt;gnr.web.widgets&lt;/code&gt; Package&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A new Python package &lt;code&gt;gnr.web.widgets&lt;/code&gt; has been introduced. Every widget exposes an &lt;code&gt;@element&lt;/code&gt; method that returns its Bag-based descriptor, providing a programmatic API for widget introspection and documentation generation.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Sourcerer Integration&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;GenroPy now ships a built-in service adapter for Sourcerer, registered through the standard service declaration mechanism.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Improvements and Refactoring&lt;/h2&gt;&lt;h3&gt;CSS / Theme System Modernisation&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;A &lt;strong&gt;design-token system&lt;/strong&gt; replaces ad-hoc colour literals. All colours are now expressed through a numbered seven-step gray scale (&lt;code&gt;--gray-1&lt;/code&gt; … &lt;code&gt;--gray-7&lt;/code&gt;) and semantic aliases (&lt;code&gt;--border-light&lt;/code&gt;, &lt;code&gt;--border-strong&lt;/code&gt;, etc.).&lt;/li&gt; &lt;li&gt;Border-radius values are centralised in CSS custom properties; the &lt;code&gt;--palette-*&lt;/code&gt; namespace has been retired in favour of the new tokens.&lt;/li&gt; &lt;li&gt;&lt;code&gt;color-mix()&lt;/code&gt; calls have been replaced with explicit hex values to maximise browser compatibility.&lt;/li&gt; &lt;li&gt;The theme selection mechanism is unified: the &lt;code&gt;GNR_CSS_THEME&lt;/code&gt; environment variable now controls the default theme consistently in both &lt;code&gt;default.xml&lt;/code&gt;and the Dockerfile.&lt;/li&gt; &lt;li&gt;CSS variables have been added for &lt;code&gt;--multibutton-selected-bg&lt;/code&gt;, &lt;code&gt;--button-in-grid-bg&lt;/code&gt;, &lt;code&gt;--frameindex-tablist-*&lt;/code&gt; sizing, and the &lt;code&gt;deletingButton&lt;/code&gt;specialisation.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Grid Enhancements&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Flex grid columns now enforce an automatic minimum width so that column headers are never truncated below their natural size.&lt;/li&gt; &lt;li&gt;Widget-in-cell rendering has been overhauled: text centering, the invalid-cell icon, and style-attribute conflicts have all been fixed.&lt;/li&gt; &lt;li&gt;The &lt;code&gt;required_columns&lt;/code&gt; parameter is now honoured in print-resource grid queries.&lt;/li&gt; &lt;li&gt;&lt;code&gt;drawFiller&lt;/code&gt; width calculation has been restored to its pre-PR #749 behaviour.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Grouplet Panel&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;GroupletForm&lt;/code&gt; now maintains a strict datapath separation between the grouplet’s own data and the host page’s store, preventing cross-page data leaks.&lt;/li&gt; &lt;li&gt;The error indicator is now shown only when there are actual validation errors, not on every field change.&lt;/li&gt; &lt;li&gt;The inline &lt;code&gt;_onRemote&lt;/code&gt; pattern has been replaced with a proper &lt;code&gt;gnrwdg&lt;/code&gt; method, improving reusability.&lt;/li&gt; &lt;li&gt;A double-load on the preference page has been eliminated.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Authentication Module&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Auth verifiers have been extracted from &lt;code&gt;gnrwebpage&lt;/code&gt; into a dedicated module (#700), improving separation of concerns and making it easier to swap or extend the verification strategy.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Daemon Package&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Daemon initialisation logic has been moved into &lt;code&gt;gnr.web.daemon.service&lt;/code&gt; (#695, #688), reducing coupling between the CLI entry points and the runtime service objects.&lt;/li&gt; &lt;li&gt;The &lt;code&gt;DataCollector&lt;/code&gt; (register analyser) has similarly been moved out of the CLI layer.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;code&gt;gnrdeploy&lt;/code&gt; Refactoring&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The deployment helper has been refactored (#706) to separate configuration parsing from execution.&lt;/li&gt; &lt;li&gt;A typo that mapped &lt;code&gt;column.type&lt;/code&gt; instead of &lt;code&gt;column.dtype&lt;/code&gt; was fixed as part of this work.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Siteregisters Module Organisation&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Siteregisters modules have been reorganised (#733) to follow a clearer package structure, making it easier to locate and extend individual register implementations.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Database Migration Extensions&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;gnr db migrate&lt;/code&gt; command now accepts a &lt;code&gt;-e&lt;/code&gt;/&lt;code&gt;--extension&lt;/code&gt; option with possible values &lt;code&gt;txt&lt;/code&gt;, &lt;code&gt;json&lt;/code&gt;, or &lt;code&gt;sql&lt;/code&gt;, giving operators control over the format of generated migration scripts.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;PostgreSQL Extension Handling&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The database layer now uses &lt;code&gt;CREATE EXTENSION IF NOT EXISTS&lt;/code&gt; instead of the previous &lt;code&gt;DROP → CREATE&lt;/code&gt; sequence, making migrations idempotent and safe to re-run.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Werkzeug ProxyFix&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;ProxyFix&lt;/code&gt; WSGI middleware is now automatically applied when the application is running inside Kubernetes, ensuring that &lt;code&gt;REMOTE_ADDR&lt;/code&gt;, &lt;code&gt;HTTP_HOST&lt;/code&gt;, and scheme headers are correctly resolved behind a reverse proxy.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Frameindex Top Hook&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;frameindex&lt;/code&gt; top hook is now decorated with &lt;code&gt;@customizable&lt;/code&gt;, allowing projects to override the default rendering without monkey-patching.&lt;/li&gt; &lt;li&gt;&lt;code&gt;functools.wraps&lt;/code&gt; is applied so that the decorated function retains its original &lt;code&gt;__name__&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;K8S Generator&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;K8SGenerator&lt;/code&gt; now accepts an optional &lt;code&gt;initContainers&lt;/code&gt; argument for providing accessory init containers to the generated Kubernetes manifests.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Services Declarations&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Missing &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;protocol&lt;/code&gt; fields in service declarations have been added, and &lt;code&gt;last_refresh_ts&lt;/code&gt; availability in new connections has been fixed.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Autoreload Browser-Open Fix&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;When Werkzeug autoreload is active together with the &lt;code&gt;-o&lt;/code&gt; (open browser) option, the browser is now opened only once by the main monitor process, preventing duplicate tabs on every file change.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Removals and Clean-up&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;&lt;strong&gt;Legacy Dojo 1.8 library&lt;/strong&gt; (&lt;code&gt;dojo_libs/dojo_18&lt;/code&gt;) has been removed. The framework now targets a new Dojo internal fork in a non-exclusive way, coexisting with old Dojo 11.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;&lt;code&gt;legacy_packages/gnr&lt;/code&gt;&lt;/strong&gt; has been removed.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;&lt;code&gt;example_configuration/demo_site&lt;/code&gt;&lt;/strong&gt; has been removed.&lt;/li&gt; &lt;li&gt;Dead WSGI code has been deleted (#739).&lt;/li&gt; &lt;li&gt;The &lt;code&gt;name_full&lt;/code&gt; fallback from preference caption resolution has been removed; callers must supply an explicit caption.&lt;/li&gt; &lt;li&gt;Tree branch PNG icons have been replaced by pure-CSS triangles, eliminating several image assets.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Bug Fixes&lt;/h2&gt;&lt;h3&gt;Email&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;sendMessage&lt;/code&gt; method now consults &lt;code&gt;message_to_send&lt;/code&gt; as its sole gating condition, preventing duplicate sends and race conditions.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Storage / S3&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;S3&lt;/code&gt; multipart upload ETags (which contain a &lt;code&gt;-&lt;/code&gt; suffix) are now correctly detected via a &lt;code&gt;len&lt;/code&gt; check rather than a fragile string scan. The &lt;code&gt;md5hash&lt;/code&gt; helper returns &lt;code&gt;None&lt;/code&gt; for multipart ETags instead of raising.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;CKEditor&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;disabled&lt;/code&gt; vs &lt;code&gt;readOnly&lt;/code&gt; regression introduced in a previous release has been fixed. Disabled CKEditor instances are now visually distinct from read-only ones.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;DateTimeTextBox&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;DateTimeTextBox&lt;/code&gt; no longer clears its value on blur when the field contains a valid date/time.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Login Form&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;login_newUser&lt;/code&gt; form has been converted from &lt;code&gt;frameForm&lt;/code&gt; to &lt;code&gt;boxForm&lt;/code&gt; so that it auto-sizes correctly on all viewport sizes.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Document Store&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The custom &lt;code&gt;rpcmethod&lt;/code&gt; in &lt;code&gt;load_document&lt;/code&gt; and the handler rpcmethod chain in &lt;code&gt;load_record&lt;/code&gt;, &lt;code&gt;save_record&lt;/code&gt;, and &lt;code&gt;save_document&lt;/code&gt; have been restored after being lost in a previous refactoring.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Web Page&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;userLocalTags&lt;/code&gt; now returns a safe empty value instead of &lt;code&gt;None&lt;/code&gt; when called from a &lt;code&gt;remoteBuilder&lt;/code&gt; context, preventing &lt;code&gt;AttributeError&lt;/code&gt; downstream.&lt;/li&gt; &lt;li&gt;The &lt;code&gt;--nodebug&lt;/code&gt; command-line flag is now correctly evaluated and no longer silently ignored.&lt;/li&gt; &lt;li&gt;Debug-level evaluation order has been corrected so that the intended log level is applied from the very first log statement.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Record / BoxForm&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The &lt;code&gt;record&lt;/code&gt; property has been extended to be compatible with &lt;code&gt;BoxForm&lt;/code&gt;, removing an incompatibility introduced when grouplet panels were redesigned.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Batch Handler&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Schedulable batches that do not define a &lt;code&gt;table_script_parameters_pane&lt;/code&gt; now correctly show their parameters dialog (#679).&lt;/li&gt; &lt;li&gt;Batch handler CSS now uses &lt;code&gt;em&lt;/code&gt; units and CSS custom properties for consistent scaling; the thermoline label is flex-centred.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Theme / CSS Fixes&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;css_theme&lt;/code&gt; default value is now consistent between &lt;code&gt;default.xml&lt;/code&gt; and the Dockerfile entry point.&lt;/li&gt; &lt;li&gt;The theme editor has been fixed after the CSS variable renaming.&lt;/li&gt; &lt;li&gt;Obsolete &lt;code&gt;--radius-*&lt;/code&gt; and &lt;code&gt;--palette-*&lt;/code&gt; variable references in project and resource CSS files have been updated to the new token names.&lt;/li&gt; &lt;li&gt;The &lt;code&gt;framedindex_tablist&lt;/code&gt; now uses &lt;code&gt;min-height&lt;/code&gt; instead of &lt;code&gt;padding&lt;/code&gt; to avoid layout collisions.&lt;/li&gt; &lt;li&gt;&lt;code&gt;hiderLayer&lt;/code&gt; and &lt;code&gt;hiderMessage&lt;/code&gt; readability has been improved.&lt;/li&gt; &lt;li&gt;The draft-marker ribbon position is now configurable via a &lt;code&gt;draftMarker&lt;/code&gt; option.&lt;/li&gt; &lt;li&gt;Duplicate CSS triangle chevrons in the mobile menu are hidden when &lt;code&gt;branchiconright&lt;/code&gt; is active.&lt;/li&gt; &lt;li&gt;Toolbar background and &lt;code&gt;border-strong&lt;/code&gt; colours have been darkened for better contrast.&lt;/li&gt; &lt;li&gt;&lt;code&gt;grouplet_chunk_box&lt;/code&gt; &lt;code&gt;position: relative&lt;/code&gt; has been moved from hardcoded Python into the CSS file.&lt;/li&gt; &lt;li&gt;&lt;code&gt;NumberTextBox&lt;/code&gt; and other right-aligned inputs now have symmetric &lt;code&gt;padding-right&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;The quickgrid toolbar &lt;code&gt;contentPane&lt;/code&gt; now has a base height so it is always visible.&lt;/li&gt; &lt;li&gt;&lt;code&gt;TabContainer&lt;/code&gt; border-radius is applied only to the top-right corner to preserve the visual tab-line continuation.&lt;/li&gt; &lt;li&gt;The linker error tooltip is now always visible and the scrollable-table header sync issue has been resolved.&lt;/li&gt; &lt;li&gt;XSS sanitisation has been added to the dojo_20 toast output.&lt;/li&gt; &lt;li&gt;&lt;code&gt;ping_semaphore&lt;/code&gt; CSS visibility and &lt;code&gt;TimeTextBox&lt;/code&gt; popup styling have been corrected.&lt;/li&gt; &lt;li&gt;The &lt;code&gt;ext_&lt;/code&gt; column handler mechanism now correctly supports multiple handlers on the same column (#698).&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;code&gt;mkthresource&lt;/code&gt;&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Cross-package foreign key relation errors in &lt;code&gt;mkthresource&lt;/code&gt; have been fixed (#684).&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Wizard / Formlet&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Wizard &lt;code&gt;onLoading&lt;/code&gt; of the main form has been fixed.&lt;/li&gt; &lt;li&gt;Formlet fields now correctly display error, focus, and disabled visual states.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Preferences&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;The preference page no longer triggers a double load on initialisation.&lt;/li&gt; &lt;li&gt;&lt;code&gt;GroupletForm&lt;/code&gt; preference indicator now shows only on error conditions.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Miscellaneous&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;&lt;code&gt;_th_mixinResource&lt;/code&gt; now operates in safe mode for tables that have no &lt;code&gt;th_&lt;/code&gt; resource, and multidomain error URLs are handled correctly (#716).&lt;/li&gt; &lt;li&gt;&lt;code&gt;display: flex&lt;/code&gt; has been removed from &lt;code&gt;cellContent&lt;/code&gt; to restore correct template grid column widths.&lt;/li&gt; &lt;li&gt;&lt;code&gt;inline-flex&lt;/code&gt; is now used for formbuilder cells inside toolbars.&lt;/li&gt; &lt;li&gt;Minor hider background fix removing an unwanted box shadow.&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Version 26.02.16</title><link>https://www.genropy.org/blog/release-notes/version-26-02-16/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.genropy.org/blog/release-notes/version-26-02-16/</guid><description>&lt;div class="warning" style="background-color: #fff3cd;border-left: 4px solid #ffc107;padding: 12px;margin: 20px 0;font-weight: bold"&gt;BREAKING CHANGE: Removed support for Python &amp;lt; 3.11&lt;/div&gt;&lt;h2&gt;Enhancements&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Added get_json method to Request object to automatically parse JSON payloads based on request mime type (#408)&lt;/li&gt; &lt;li&gt;DbAdmin now can show the orphaned entities in the databases and offer a cleanup method (#319)&lt;/li&gt; &lt;li&gt;Generalized use of ‘{}’ to support environment variables in bags&lt;/li&gt; &lt;li&gt;Added ‘insertToolbarItems’ parameters for TinyMCE widget (#418)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Fixes&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Extension creation on managed postgresql services now works correctly (#415)&lt;/li&gt; &lt;li&gt;Fixed regression for task scheduling due to timezone-aware comparisons (#434)&lt;/li&gt; &lt;li&gt;Locale detection for localized columns fixes&lt;/li&gt; &lt;li&gt;Docker image build fixes when cleaning up cloned git repositories&lt;/li&gt; &lt;li&gt;Fixed to handle correctly empty to_address in mail service (#406)&lt;/li&gt; &lt;li&gt;Minor fixes on storage parameters&lt;/li&gt; &lt;li&gt;Fix with tz-aware timestamp in XLSX export (#419)&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Genropy inizia il 2026 con due release ricche di novità</title><link>https://www.genropy.org/blog/genropy-inizia-il-2026-con-due-release-ricche-di-novita/</link><pubDate>Thu, 15 Jan 2026 14:30:00 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-inizia-il-2026-con-due-release-ricche-di-novita/</guid><description>&lt;p style="font-size: 1.1em; margin: 20px 0;"&gt;Siamo lieti di annunciare il rilascio di due nuove versioni di Genropy: la &lt;strong&gt;&lt;a href="https://www.genropy.org/blog/release-notes/version-26-01-09/"&gt;26.01.09&lt;/a&gt;&lt;/strong&gt; e la &lt;strong&gt;&lt;a href="https://www.genropy.org/blog/release-notes/version-26-01-15/"&gt;26.01.15&lt;/a&gt;&lt;/strong&gt;. Queste release introducono importanti novità in termini di sicurezza, localizzazione, deployment e gestione dei dati, oltre a numerosi miglioramenti e correzioni che rendono il framework ancora più robusto e flessibile.&lt;/p&gt;
&lt;h3 id="sicurezza-e-permessi-authtagstruct"&gt;Sicurezza e Permessi: AuthTagStruct&lt;/h3&gt;
&lt;p&gt;La &lt;a href="https://www.genropy.org/blog/release-notes/version-26-01-09/"&gt;release 26.01.09&lt;/a&gt; introduce &lt;strong&gt;AuthTagStruct&lt;/strong&gt; , un nuovo sistema dichiarativo per definire strutture di permessi gerarchiche nelle applicazioni. Questo sistema è completamente retro-compatibile e permette di gestire in modo più elegante e manutenibile le autorizzazioni complesse.&lt;/p&gt;</description></item><item><title>Version 26.01.09</title><link>https://www.genropy.org/blog/release-notes/version-26-01-09/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.genropy.org/blog/release-notes/version-26-01-09/</guid><description>&lt;h2&gt;Enhancements&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Added support for camera selection on image acquisition on mobile devices (#301)&lt;/li&gt; &lt;li&gt;Introduing AuthTagStruct, a new declarative system for defining hierarchical permission structures in applications. It’s fully retro-compatible.&lt;/li&gt; &lt;li&gt;Added a new ‘variantColumn_masked’ method to sqlTable for securely displaying sensitive data by masking portions of it, like credit cards numbers, email addresses etc&lt;/li&gt; &lt;li&gt;Docker images and Kubernetes deployer now support labels allowing multi-FQDNs deployments&lt;/li&gt; &lt;li&gt;Retetion policies have been upgraded to allow tables to provide more complex cutoff queries.&lt;/li&gt; &lt;li&gt;MDEditor improvements: Drag &amp;amp; Drop support, custom toolbar buttons, color syntax plugin, hidden preview mode, and bag mode support to store mardown text into nested Bag structures.&lt;/li&gt; &lt;li&gt;TinyMCE is now available as new text editor (#219)&lt;/li&gt; &lt;li&gt;Postgres database dump is now correctly monitored for runtime errors, like server version mismatches&lt;/li&gt; &lt;li&gt;Storage handling logic has been refactored and moved out of GnrWsgiSite, to be handled by a dedicated storage handler proxy module.&lt;/li&gt; &lt;li&gt;‘gnr app checkdep -i’ installation process now have better control over subprocess execution to collect errors and provide useful informations to debug issues (#343)&lt;/li&gt; &lt;li&gt;new contentEditor in docu_components which supports multiple text editors. (#344)&lt;/li&gt; &lt;li&gt;New ‘gnr core bagedit’ CLI tool which allows to manipulate (get/add/set/update/delete) entities inside bag files using the command line&lt;/li&gt; &lt;li&gt;Bag’s update() method now include a ‘preservePattern’ parameters (a compiled regex) which will prevent to update matching values or attributes, preserving the original value.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Deprecations&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;the ‘gnr app update’ cli command has been marked as deprecated&lt;/li&gt; &lt;li&gt;The “site in maintenance” feature has been deprecated and removed.&lt;/li&gt; &lt;li&gt;getVolumeService() and legacy volumes configuration have been deprecated in favor of section ‘services’&lt;/li&gt; &lt;li&gt;the subdomain concept from wsgisite and gnrwebpage has been dropped (#334)&lt;/li&gt; &lt;li&gt;contentText component in docu_components has been deprecated by contentEditor which supports multiple text editors.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Fixes&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Fixed issue with multiButtonForm, now we force norecord in order to hide former selected record values after record is changed&lt;/li&gt; &lt;li&gt;Improved checks on genropy’s packages relations and dependencies (#178, #279)&lt;/li&gt; &lt;li&gt;remoteRowController handling for new rows fixes&lt;/li&gt; &lt;li&gt;Mobile deployment checks retrieve the correct URL from configuration&lt;/li&gt; &lt;li&gt;GLBL data is loaded automatically via upgrade script&lt;/li&gt; &lt;li&gt;Directory creation for existing directory now fails silently to have tidy logs&lt;/li&gt; &lt;li&gt;Improvements in app template loader&lt;/li&gt; &lt;li&gt;Fixed regression on docker images labels where the main application repository went missing&lt;/li&gt; &lt;li&gt;The python dependency loader now get the list of packages from the loaded app, rather than parsing the instanceconfig, since more package can be applied from other sources (like instanceconfig/default.xml), so no dependency is going missing.&lt;/li&gt; &lt;li&gt;The fullcalendar widget now resizes correctly upon viewport adjustments&lt;/li&gt; &lt;li&gt;DB Migrate handles correctly varchar fields with min/max sizes used in validation, but not supported by RDBMS.&lt;/li&gt; &lt;li&gt;‘gnr’ cli command now correctly handle errors in sub-commands loading (#322)&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Version 26.01.15</title><link>https://www.genropy.org/blog/release-notes/version-26-01-15/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.genropy.org/blog/release-notes/version-26-01-15/</guid><description>&lt;div class="warning" style="background-color: #fff3cd;border-left: 4px solid #ffc107;padding: 12px;margin: 20px 0;font-weight: bold"&gt;WARNING: This will be the last release supporting Python 3.8&lt;/div&gt;&lt;h2&gt;Enhancements&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Introduced a new experimental aiohttp-based task scheduler/worker, not enabled by default. It needs a new deployment if activated, YMMV.&lt;/li&gt; &lt;li&gt;Introduce a localization attribute for table columns.&lt;/li&gt; &lt;li&gt;Support for multidb backup/restore for storetable-based architecture (#402)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Fixes&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Localization scanner regex and dialog strings locations fixed (#391,#393)&lt;/li&gt; &lt;li&gt;Password recovery is now providing more insights when message deliveries occurs (#121)&lt;/li&gt; &lt;li&gt;Current page/request/aux instance thread-based tracker memory leak fixed (#379)&lt;/li&gt; &lt;li&gt;Project builder/dockerize now is capable of building a project without the dependencies installed, provided a valid build.json is avilable for the instance (#404)&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Version 25.10.27</title><link>https://www.genropy.org/blog/release-notes/version-25-10-27/</link><pubDate>Wed, 29 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.genropy.org/blog/release-notes/version-25-10-27/</guid><description>&lt;h2&gt;Overview&lt;/h2&gt;&lt;p&gt; This release includes the introduction of several deployment utilities, and several enhancement and fixes throughout the whole framework.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;PLEASE NOTE:&lt;/strong&gt; We’ve started dropping support for Python version prior to 3.10, this release introduces a preliminary warning. So you’re being warned.&lt;/p&gt;&lt;h2&gt;Enhancements&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Support for &lt;code&gt;security.txt&lt;/code&gt; and &lt;code&gt;robots.txt&lt;/code&gt; WKUs through instanceconfig&lt;/li&gt; &lt;li&gt;Introduced &lt;code&gt;deferAfterCommit&lt;/code&gt; method in GnrSqlDb to executed callables &lt;em&gt;after&lt;/em&gt; a commit&lt;/li&gt; &lt;li&gt;Introduced new &lt;code&gt;gnr web serveprod&lt;/code&gt; cli command, which start a production grade application server. Currently based on gunicorn.&lt;/li&gt; &lt;li&gt;New FAQ models and backoffice tool from docu package&lt;/li&gt; &lt;li&gt; A new data retention framework has been introduced, allowing tables to specify a retention period, which can be overriden in specific deployments, and provided schedulable tasks and CLI command to execute the retention cutoff. Introduced an initial retention policy in &lt;code&gt;sys.error&lt;/code&gt; and &lt;code&gt;sys.task_execution&lt;/code&gt; tables. Please note that the policy is not effecting if a task or a cron job for the cli command is created, it doesn’t work out-of-the-box. &lt;/li&gt; &lt;li&gt;Introduced support for database adapters subclassing, to extend the current framework adapters with custom ones.&lt;/li&gt; &lt;li&gt;Introduced &lt;code&gt;dbbranch&lt;/code&gt; db connection attributes, for database backends that supports branching.&lt;/li&gt; &lt;li&gt; &lt;code&gt;boto3&lt;/code&gt; client parameters now supports regions, retro-compatible.&lt;/li&gt; &lt;li&gt;Added support for multiple sub-table in the ORM.&lt;/li&gt; &lt;li&gt;Removed dependency from &lt;code&gt;backports.zoneinfo&lt;/code&gt;, which is handled directly by stdlib’s &lt;code&gt;datetime.timezone&lt;/code&gt; &lt;/li&gt; &lt;li&gt;Improvements to 2FA and validation handling at login.&lt;/li&gt; &lt;li&gt;Bag can now export to JSON format.&lt;/li&gt; &lt;li&gt;Formhandler support a &lt;code&gt;dismissrow&lt;/code&gt; event publising for grid delete operations.&lt;/li&gt; &lt;li&gt;Code cleanup for past/future references&lt;/li&gt; &lt;li&gt;App stores utilities to correctly handle integrations with native mobile apps (Android/iOS)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Develop &amp;amp; Deployment changes&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Added support for &lt;code&gt;debugpy&lt;/code&gt;, installed via &lt;code&gt;developer&lt;/code&gt; profile.&lt;/li&gt; &lt;li&gt;Introduce a self-test procedure to verify if the deployment is finalized for mobile app usage.&lt;/li&gt; &lt;li&gt;Introduced new &lt;code&gt;sys maintanance&lt;/code&gt; instance cli command to enable/disable maintenance mode&lt;/li&gt; &lt;li&gt;Reduced Docker image footprint by disabling local cache&lt;/li&gt; &lt;li&gt;Introduced switch to &lt;code&gt;gnr app dockerize&lt;/code&gt; to create images based on development version of the framework, and new switch to specify a different image name&lt;/li&gt; &lt;li&gt;New deployment tool to Kubernetes cluster has been introduced (EXPERIMENTAL), allowing also splitted container deployments.&lt;/li&gt; &lt;li&gt;New commodity CLI command &lt;code&gt;gnr web stack&lt;/code&gt; is provided to run the entire stack with a single command.&lt;/li&gt; &lt;li&gt;Package dependency installer (&lt;code&gt;gnr app checkdep&lt;/code&gt;) has a new &lt;code&gt;-n&lt;/code&gt; option to disable package caching.&lt;/li&gt; &lt;li&gt; Package dependencies solver/installer can now automatically upgrade/downgrade version in order to fix the environment, by using &lt;code&gt;gnr app checkdep -f &amp;lt;instanceName&amp;gt;&lt;/code&gt;. &lt;/li&gt; &lt;li&gt;Test suite for package has been added, automating invocation via &lt;code&gt;gnr dev tests&lt;/code&gt; CLI command.&lt;/li&gt; &lt;li&gt; A project builder framework has been introduce to manage multi-repositoy projects.&lt;ul&gt; &lt;li&gt; &lt;strong&gt;New module:&lt;/strong&gt; &lt;code&gt;gnr.dev.builder&lt;/code&gt;&lt;ul&gt; &lt;li&gt;Manages &lt;code&gt;build.json&lt;/code&gt; configuration.&lt;/li&gt; &lt;li&gt;Handles Git operations (clone, checkout, update) for dependencies.&lt;/li&gt; &lt;li&gt;Provides methods to rebuild or synchronize project state.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt; &lt;li&gt; &lt;strong&gt;New CLI:&lt;/strong&gt; &lt;code&gt;gnr dev builder&lt;/code&gt;&lt;ul&gt; &lt;li&gt;Commands: &lt;code&gt;check&lt;/code&gt;, &lt;code&gt;generate&lt;/code&gt;, &lt;code&gt;regenerate&lt;/code&gt;, &lt;code&gt;show&lt;/code&gt;, &lt;code&gt;repositories&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;checkout&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt; &lt;li&gt; &lt;strong&gt;Integration:&lt;/strong&gt;&lt;ul&gt; &lt;li&gt; &lt;code&gt;gnrdockerize&lt;/code&gt; command now uses the new builder for build context creation.&lt;/li&gt; &lt;li&gt;Simplified Docker image build pipeline with automatic repository checkout.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Provides groundwork for future automated build and CI/CD pipelines.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Fixes &amp;amp; Minor Adjustments&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Updated werkzeug &lt;code&gt;max_form_memory_size&lt;/code&gt; limit to 100M, to deal with new hardcoded limit in recent werkzeug releases.&lt;/li&gt; &lt;li&gt;Fixed several regressions in menu resolver behavior, simplified methods and fixes issue with single item menus.&lt;/li&gt; &lt;li&gt;Improved error handling in menu source loading.&lt;/li&gt; &lt;li&gt;Refined package branch expansion and flattening logic.&lt;/li&gt; &lt;li&gt;Cleaned up redundant imports and improved log consistency.&lt;/li&gt; &lt;li&gt;Added stricter executable dependency checks for builder and dockerization tools.&lt;/li&gt; &lt;li&gt;Handling duplicaes tables views related to user object.s&lt;/li&gt; &lt;li&gt;Aws translation service regressions fixes.&lt;/li&gt; &lt;li&gt;Bag file system loaders avois journal/backups files when globbing.&lt;/li&gt; &lt;li&gt;Picker building issues fixes, which was ignoring disable flag&lt;/li&gt; &lt;li&gt;Logging cleanup&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Migration Notes&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Review and adjust data retention policies under &lt;code&gt;/sys/dataretention&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;Validate custom menu or branch logic against the simplified menu resolver.&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Scopriamo le nuove colonne virtuali: compositeColumn, joinColumn e subQueryColumn</title><link>https://www.genropy.org/blog/scopriamo-le-nuove-colonne-virtuali-compositecolumn-joincolumn-e-subquerycolumn/</link><pubDate>Thu, 24 Apr 2025 15:53:14 +0000</pubDate><guid>https://www.genropy.org/blog/scopriamo-le-nuove-colonne-virtuali-compositecolumn-joincolumn-e-subquerycolumn/</guid><description>&lt;p&gt;Dalla &lt;a href="https://www.genropy.org/blog/ultime-novita-di-genropy-orm-e-colonne-virtuali-widget-per-mobile-deploy-con-docker/"&gt;release 25.04&lt;/a&gt; di Genropy sono stati introdotti importanti aggiornamenti per semplificare e potenziare il lavoro con i database, in particolare con &lt;strong&gt;PostgreSQL&lt;/strong&gt;, l'implementazione che rimane consigliata in ambiente di produzione. Tra le novità più interessanti troviamo delle nuove &lt;a href="https://docs.genropy.org/genropy_orm/virtual_columns.html" target="_blank" rel="noreferrer noopener"&gt;&lt;strong&gt;colonne virtuali&lt;/strong&gt;,&lt;/a&gt; strumenti essenziali per gestire relazioni e &lt;em&gt;query&lt;/em&gt; in modo più efficiente. In questo articolo, esploriamo insieme tre nuovi tipi di colonne: &lt;strong&gt;compositeColumn&lt;/strong&gt;, &lt;strong&gt;joinColumn&lt;/strong&gt; e &lt;strong&gt;subQueryColumn&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="compositecolumn-la-base-per-le-chiavi-composte"&gt;&lt;strong&gt;CompositeColumn: La Base per le Chiavi Composte&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Le &lt;strong&gt;compositeColumn&lt;/strong&gt; permettono di concatenare più colonne reali, diventando perfette per la gestione delle chiavi primarie composte.&lt;/p&gt;</description></item><item><title>Genropy e Docker: come creare le immagini degli applicativi</title><link>https://www.genropy.org/blog/genropy-e-docker-come-creare-le-immagini-degli-applicativi/</link><pubDate>Wed, 16 Apr 2025 16:27:00 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-e-docker-come-creare-le-immagini-degli-applicativi/</guid><description>&lt;p&gt;Con il rilascio della &lt;a href="https://www.genropy.org/media/2025/04/Release-25.04-ultime-novita-di-Genropy.webp" target="_blank" rel="noreferrer noopener"&gt;versione 25.04.10 di Genropy&lt;/a&gt; è stato introdotto uno strumento di utilità per la generazione di immagini Docker. Grazie a questo nuovo strumento, è possibile creare un'immagine dell'applicativo e di tutto il necessario per poterla eseguire (&lt;em&gt;package&lt;/em&gt;, librerie, e Genropy stesso), senza bisogno di installazioni manuali o configurazioni complesse.&lt;/p&gt;
&lt;p&gt;Significa che da oggi abbiamo a disposizione un &lt;strong&gt;modo semplice e ripetibile per creare &lt;em&gt;container&lt;/em&gt; pronti al &lt;em&gt;deploy&lt;/em&gt;&lt;/strong&gt; , anche automatizzabili in pipeline CI/CD.&lt;/p&gt;</description></item><item><title>Release notes</title><link>https://www.genropy.org/release-notes/</link><pubDate>Fri, 11 Apr 2025 11:10:43 +0000</pubDate><guid>https://www.genropy.org/release-notes/</guid><description/></item><item><title>Ultime novità di Genropy: ORM e colonne virtuali, widget per mobile, deploy con Docker</title><link>https://www.genropy.org/blog/ultime-novita-di-genropy-orm-e-colonne-virtuali-widget-per-mobile-deploy-con-docker/</link><pubDate>Thu, 10 Apr 2025 17:35:16 +0000</pubDate><guid>https://www.genropy.org/blog/ultime-novita-di-genropy-orm-e-colonne-virtuali-widget-per-mobile-deploy-con-docker/</guid><description>&lt;p&gt;Le recenti release di Genropy introducono nuove funzionalità e importanti miglioramenti che rendono il framework ancora più moderno, soprattutto per il deploy e l&amp;rsquo;uso nello sviluppo di applicativi &lt;em&gt;mobile&lt;/em&gt;. Vediamo le principali novità.&lt;/p&gt;
&lt;h3 id="orm-e-colonne-virtuali"&gt;ORM e colonne virtuali&lt;/h3&gt;
&lt;p&gt;Con il rilascio della &lt;a href="https://www.genropy.org/blog/release-notes/version-25-04-10/"&gt;versione 25.04 del 10 aprile 2025&lt;/a&gt; sono state introdotte importanti modifiche all'ORM e nuove tipologie di &lt;a href="https://docs.genropy.org/genropy_orm/virtual_columns.html" target="_blank" rel="noreferrer noopener"&gt;colonne virtuali&lt;/a&gt;.&lt;/p&gt;
&lt;h5 id="gnr-db-migrate"&gt;&lt;strong&gt;gnr db migrate&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;È stata introdotta, per il momento solo nell'implementazione PostgreSQL, una nuova procedura di allineamento del database alla struttura definita nei model, la &lt;code&gt;gnr db migrate&lt;/code&gt;. La &lt;em&gt;migrate&lt;/em&gt; va di fatto a sostituire la&lt;em&gt; db setup &lt;/em&gt;con una procedura &lt;strong&gt;estremamente più efficiente e veloce&lt;/strong&gt;. Nelle prossime release verrà gradualmente estesa anche alle altre implementazioni.&lt;/p&gt;</description></item><item><title>Version 25.04.10</title><link>https://www.genropy.org/blog/release-notes/version-25-04-10/</link><pubDate>Thu, 10 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.genropy.org/blog/release-notes/version-25-04-10/</guid><description>&lt;p&gt;Overview&lt;/p&gt;&lt;p&gt;&lt;a href="https://github.com/genropy/genropy/blob/master/gnrpy/RELEASE_NOTES.rst#overview"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This release delivers major improvements across the database migration tooling, PostgreSQL adapter, Docker tooling, UI components (especially attachment and media handling), and the web server infrastructure. It also introduces a WSGI testing framework, endpoint handling for tables, fixes to ensure compatibility with various Python versions.&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3 class="wp-block-heading"&gt;Enhancements&lt;/h3&gt;&lt;p&gt;&lt;a href="https://github.com/genropy/genropy/blob/master/gnrpy/RELEASE_NOTES.rst#enhancements"&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul class="wp-block-list"&gt; &lt;li&gt; &lt;strong&gt;General Code Improvements&lt;/strong&gt;: * Introduced SQL comment decorators for better traceability in SQL execution. * Standardized decorator patterns across the codebase for clarity. * _documentation storage is now used for &lt;strong&gt;locally generated&lt;/strong&gt; documentation files, improving file management. * &lt;strong&gt;Removed `httplib2`&lt;/strong&gt;, replacing it with requests, which is more actively maintained. * &lt;strong&gt;Removed `future` dependency&lt;/strong&gt;, since Python 3 is now the baseline. * Eliminated &lt;strong&gt;redundant&lt;/strong&gt; runtime imports to &lt;strong&gt;reduce startup overhead&lt;/strong&gt;. * Removed &lt;strong&gt;`simplejson`&lt;/strong&gt;, since json is part of Python’s standard library. – Removed &lt;strong&gt;unused imports&lt;/strong&gt; across multiple files.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;SQL Improvements&lt;/strong&gt;: * Enhanced database migration logic by improving error handling for relation-based exceptions. * The GNR_GLOBAL_DEBUG flag was removed, and gnr db migrate now defaults to &lt;strong&gt;INFO&lt;/strong&gt; log level instead of DEBUG. * Improved checkRelationIndex() to log more descriptive errors when an invalid relation is encountered. * Improved handling of deferred relations and indexing for tenant schemas. * &lt;strong&gt;New `#BETWEEN` syntax&lt;/strong&gt; added for SQL queries, supporting rangefiltering (e.g., dates, integers), which include the &lt;strong&gt;upper bound&lt;/strong&gt; by default.&lt;ul class="wp-block-list"&gt; &lt;li&gt;Excluded unique constraints that overlap with primary keys.&lt;/li&gt;&lt;li&gt;Added support for PostgreSQL extensions in migrations, including: * Commands to create extensions. * Integration with the migration framework.&lt;/li&gt;&lt;li&gt;Added event triggers to the migration structure.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;New `–inspect` flag for `gnr db migrate`&lt;/strong&gt;. Outputs a zip file with SQL schema, DB structure in JSON, ORM state, and planned SQL changes.&lt;/li&gt;&lt;li&gt;Added support to avoid table creation if columns are empty.&lt;/li&gt;&lt;li&gt;Centralized UNIQUE constraint generation (addColumnUniqueConstraint() method).&lt;/li&gt;&lt;li&gt;Improved diff and handler mechanism with default fallback for missing handlers.&lt;/li&gt;&lt;li&gt;New test cases covering unique columns and empty tables.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;strong&gt;PostgreSQL Utilities&lt;/strong&gt;: * Introduced new utilities for monitoring PostgreSQL performance:&lt;ul class="wp-block-list"&gt; &lt;li&gt;Queries for most-used indexes and sequential scans.&lt;/li&gt;&lt;li&gt;Autovacuum status monitoring.&lt;/li&gt;&lt;li&gt;Top and least-efficient queries statistics.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;strong&gt;Database Schema&lt;/strong&gt;: * Added support for extension management in migration commands. * Introduced structured column grouping (colgroup_label, colgroup_name_long) for better schema organization. * Refactored column width estimation logic to use &lt;strong&gt;a lookup table&lt;/strong&gt; for improved accuracy. * Enhanced column width calculations when handling &lt;strong&gt;empty tables&lt;/strong&gt;. * Injected column group metadata into table models to improve &lt;strong&gt;attribute management&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Database adapters&lt;/strong&gt;: * Updated PostgreSQL adapter to handle DEFERRABLE and INITIALLY DEFERRED constraints. * Added support for capabilities declaration inside of databaseadapter, in order to conditionally execute specific tasks base on such specific capabilities.&lt;ul class="wp-block-list"&gt; &lt;li&gt;Introduced ‘postgres3’ database adapter which uses the psycopg3 driver.&lt;/li&gt;&lt;li&gt;Aligned adapters inheritance method and added test coverage for it&lt;/li&gt;&lt;li&gt;Improved FK detection with ordering preserved.&lt;/li&gt;&lt;li&gt;Extended constraint introspection logic for better diff generation.&lt;/li&gt;&lt;li&gt;Multikey sort support for foreign keys.&lt;/li&gt;&lt;li&gt;Ordered foreign key extraction for better reproducibility.&lt;/li&gt;&lt;li&gt;The gnr db migrate command recognizes adapter-specific capabilities, ensuring better database compatibility.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;strong&gt;Logging infrastructure&lt;/strong&gt;: * Introduced a consistent usage of python logging inside the framework. * All CLI commands provide a –loglevel options to set the logging level. * Logging levels can be also defined using GNR_LOGLEVEL env var. * sys package provide a minimale UI to control levels for eachpackage of the framework.&lt;ul class="wp-block-list"&gt; &lt;li&gt;Logging captures &lt;strong&gt;all&lt;/strong&gt; exceptions for model relation validation errors.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;Added ‘gnr dev bugreport &amp;lt;instance name&amp;gt;’ to create a report of the current environment the instance is using, for more complete bug reports – please see –help for possible usage&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Sphinx Export Enhancements&lt;/strong&gt; * Improved &lt;strong&gt;error handling&lt;/strong&gt; when exporting documentation to &lt;strong&gt;Sphinx&lt;/strong&gt;. * Missing images will &lt;strong&gt;no longer break&lt;/strong&gt; the export process. * Removed redundant configuration settings for &lt;strong&gt;handbook preferences&lt;/strong&gt;. * Instead of spawning an &lt;strong&gt;external&lt;/strong&gt; Sphinx process, the framework now calls the &lt;strong&gt;Sphinx build API directly&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;AttachManager Enhancements&lt;/strong&gt;: – Supports inline preview for images with zoom-in feature. – Conditional PDF viewer usage based on file extension. – Reworked iframe viewer logic for better handling of images/videos/docs.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Login Reload Fix&lt;/strong&gt;: * Removed gnrtoken from reload URLs to avoid state duplication.&lt;/li&gt;&lt;/ul&gt;&lt;ul class="wp-block-list"&gt; &lt;li&gt; &lt;strong&gt;PDF/Image Preview Detection Logic&lt;/strong&gt;: – Refined JS detection of when to use PDF viewer vs inline display.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;GnrWsgiSite refactoring&lt;/strong&gt;: – Safer fallback on bad URLs or missing packages. – Better modularity in UrlInfo routing logic. – Handles edge cases like ..//etc/passwd to harden path traversal.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Werkzeug Compatibility Patch&lt;/strong&gt;: – Fix for subcommand CLI trick used by gnr that breaks Python 3.8 autoreloader.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;</description></item><item><title>Nuova release 24.5 di Genropy: miglioramenti all’interfaccia e tool di verifica dipendenze</title><link>https://www.genropy.org/blog/nuova-release-24-5-di-genropy-miglioramenti-allinterfaccia-e-tool-di-verifica-dipendenze/</link><pubDate>Thu, 06 Jun 2024 10:30:23 +0000</pubDate><guid>https://www.genropy.org/blog/nuova-release-24-5-di-genropy-miglioramenti-allinterfaccia-e-tool-di-verifica-dipendenze/</guid><description>&lt;p&gt;Il 30 maggio 2024 è stata rilasciata la nuova versione 24.5.30 contenente alcune importanti novità. Segnaliamo innanzitutto che è da ora presente un file &lt;strong&gt;RELEASE_NOTES&lt;/strong&gt;.rst nella cartella &lt;em&gt;gnrpy&lt;/em&gt; contenente il dettaglio delle modifiche tra una &lt;em&gt;release&lt;/em&gt; e la successiva (divise tra &lt;em&gt;bug fix&lt;/em&gt; e nuove &lt;em&gt;features&lt;/em&gt;). &lt;/p&gt;
&lt;p&gt;Vediamo ora nel dettaglio le ultime novità della nostra piattaforma, con un focus particolare sui miglioramenti all&amp;rsquo;interfaccia mobile e sull&amp;rsquo;introduzione del nuovo tool gnr app checkdep.&lt;/p&gt;</description></item><item><title>Novità: nuova modalità di installazione</title><link>https://www.genropy.org/blog/novita-nuova-modalita-di-installazione/</link><pubDate>Thu, 07 Mar 2024 15:46:17 +0000</pubDate><guid>https://www.genropy.org/blog/novita-nuova-modalita-di-installazione/</guid><description>&lt;p&gt;Siamo lieti di annunciare una grande novità che semplificherà notevolmente l&amp;rsquo;installazione di Genropy.&lt;/p&gt;
&lt;p&gt;Con il rilascio della &lt;strong&gt;versione 24.3&lt;/strong&gt; è ora disponibile il nuovo &lt;em&gt;&lt;strong&gt;installer&lt;/strong&gt;&lt;/em&gt; , che sostituendosi alla procedura precedente permette di eseguire l&amp;rsquo;installazione tramite &lt;em&gt;&lt;strong&gt;pip&lt;/strong&gt;&lt;/em&gt; , semplificando notevolmente la corretta gestione delle dipendenze sia su Mac che su Windows.&lt;/p&gt;
&lt;p&gt;È quindi possibile installare Genropy in due modalità, una &amp;ldquo;rapida&amp;rdquo; consigliata per utenti alle prime armi, che vogliono solo testare rapidamente Genropy, e una più &amp;ldquo;completa&amp;rdquo;, consigliata per gli sviluppatori abituali che necessitano del codice sorgente a portata di mano.&lt;/p&gt;</description></item><item><title>Novità sui login: personalizzazioni, OpenID e autenticazione a due fattori in Genropy</title><link>https://www.genropy.org/blog/novita-sui-login-personalizzazioni-openid-e-autenticazione-a-due-fattori-in-genropy/</link><pubDate>Thu, 21 Dec 2023 10:50:17 +0000</pubDate><guid>https://www.genropy.org/blog/novita-sui-login-personalizzazioni-openid-e-autenticazione-a-due-fattori-in-genropy/</guid><description>&lt;p&gt;Da inizio 2023 Genropy ha gradualmente inserito nel framework alcune importanti novità riguardanti il login a un applicativo. Le novità interessano la schermata di login, la possibilità di creare nuovi utenti o effettuare il login sfruttando servizi esterni come Google, Facebook, ecc, e il rafforzamento dell&amp;rsquo;autenticazione con il meccanismo dell&amp;rsquo;autenticazione a 2 fattori.&lt;/p&gt;
&lt;h3 id="nuova-schermata-di-login"&gt;Nuova schermata di login&lt;/h3&gt;
&lt;p&gt;Innanzitutto la &lt;strong&gt;schermata del login&lt;/strong&gt; , ora interamente &lt;strong&gt;personalizzabile&lt;/strong&gt; : dalle Preferenze di un applicativo, alla voce &amp;ldquo;Strumenti di Amministrazione&amp;rdquo;, infatti, è possibile specificare il contenuto della schermata in termini di &lt;code&gt;Login title&lt;/code&gt; e &lt;code&gt;Login subtitle&lt;/code&gt;, nonché optare per un &lt;code&gt;Flat login&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Come realizzare app per mobile con Genropy: le PWA</title><link>https://www.genropy.org/blog/come-realizzare-app-per-mobile-con-genropy-le-pwa/</link><pubDate>Thu, 23 Nov 2023 12:18:37 +0000</pubDate><guid>https://www.genropy.org/blog/come-realizzare-app-per-mobile-con-genropy-le-pwa/</guid><description>&lt;p&gt;Nell&amp;rsquo;ottica di facilitare sempre di più lo sviluppo di applicativi destinati all&amp;rsquo;uso da dispositivi mobile, Genropy ha recentemente introdotto il &lt;strong&gt;supporto alle PWA&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le PWA (applicazioni web progressive) sono delle applicazioni web che vengono sviluppate e caricate come normali pagine web, ma che si comportano in modo simile alle applicazioni native sui dispositivi mobile, offrendo un&amp;rsquo;esperienza utente veloce e coinvolgente.&lt;/p&gt;
&lt;p&gt;Dai browser Safari e Chrome sui device mobili, nel momento in cui si visita un&amp;rsquo;url dove è abilitata la web app progressiva, comparirà nella barra degli indirizzi un&amp;rsquo;iconcina che invita a &lt;strong&gt;scaricare l&amp;rsquo;app sul dispositivo&lt;/strong&gt; , sia questo un dispositivo desktop oppure mobile.&lt;/p&gt;</description></item><item><title>Nuova release luglio 2023: le novità</title><link>https://www.genropy.org/blog/nuova-release-luglio-2023-le-novita/</link><pubDate>Tue, 04 Jul 2023 11:00:58 +0000</pubDate><guid>https://www.genropy.org/blog/nuova-release-luglio-2023-le-novita/</guid><description>&lt;p&gt;Oggi, con la &lt;strong&gt;release 2307&lt;/strong&gt; , sono state nuovamente portate sul ramo master le ultime funzionalità sviluppate e testate sul ramo develop. Si consiglia pertanto di effettuare un &lt;code&gt;git pull&lt;/code&gt; del repository di Genropy per usufruire a pieno degli ultimi aggiornamenti.&lt;/p&gt;
&lt;p&gt;Di seguito le principali novità introdotte.&lt;/p&gt;
&lt;blockquote class="wp-block-quote"&gt;
&lt;p&gt;Problemi? Puoi tornare in qualsiasi momento allo stato precedente spostandoti indietro di un commit sul ramo &lt;em&gt;master&lt;/em&gt; oppure facendo il checkout del ramo &lt;code&gt;prev_master&lt;/code&gt;. Ti preghiamo comunque di segnalarci problemi e anomalie su &lt;a href="http://t.me/askongenropy" target="_blank" rel="noreferrer noopener"&gt;AskGenropy&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Come avviare un'istanza con certificato SSL in locale</title><link>https://www.genropy.org/blog/come-avviare-unistanza-con-certificato-ssl-in-locale/</link><pubDate>Fri, 14 Apr 2023 14:42:18 +0000</pubDate><guid>https://www.genropy.org/blog/come-avviare-unistanza-con-certificato-ssl-in-locale/</guid><description>&lt;p&gt;Sui server in produzione già da tempo Genropy consiglia la configurazione di un certificato SSL con &lt;a href="https://docs.genropy.org/installation_guide/certbot.html" target="_blank" rel="noreferrer noopener"&gt;Certbot&lt;/a&gt;, proprio come ultimo step del &lt;em&gt;deploy&lt;/em&gt; di un applicativo. A volte ci farebbe tuttavia comodo poter avviare anche in locale un'istanza in &lt;em&gt;&lt;strong&gt;https&lt;/strong&gt;&lt;/em&gt; anziché in &lt;em&gt;http&lt;/em&gt;, soprattutto quando stiamo testando delle chiamate esterne al nostro applicativo, che spesso richiedono un certificato SSL.&lt;/p&gt;
&lt;p&gt;È possibile &lt;strong&gt;avviare anche in locale un&amp;rsquo;istanza Genropy in https&lt;/strong&gt; , previa generazione di un certificato SSL. Vediamo quindi i pochi semplici step necessari per predisporre la nostra macchina per questa possibilità, e come lanciare l&amp;rsquo;istanza in https.&lt;/p&gt;</description></item><item><title>Gestire il dialogo frontend-backend con le API REST di Genropy: il caso Genromed</title><link>https://www.genropy.org/blog/gestire-il-dialogo-frontend-backend-con-le-api-rest-di-genropy-il-caso-genromed/</link><pubDate>Wed, 12 Apr 2023 16:35:57 +0000</pubDate><guid>https://www.genropy.org/blog/gestire-il-dialogo-frontend-backend-con-le-api-rest-di-genropy-il-caso-genromed/</guid><description>&lt;p&gt;Molte volte ci troviamo di fronte alla necessità di far dialogare un &lt;em&gt;frontend&lt;/em&gt; (un sito HTML, o Wordpress) e un &lt;em&gt;backend&lt;/em&gt; in Genropy, sia questa una scelta specifica, finalizzata a gestire la parte &lt;em&gt;frontend&lt;/em&gt; in modo indipendente, sia perché obbligati da ragioni storiche (sito già presente) o da scelte meramente di carattere estetico (più libertà nella gestione della grafica del sito).&lt;/p&gt;
&lt;p&gt;Un caso simile lo avevamo trattato in un precedente tutorial, &lt;a href="https://www.genropy.org/blog/come-integrare-un-modulo-di-contatto-wordpress-cf7-in-genropy-con-le-api-rest/"&gt;&amp;ldquo;Come integrare un modulo di contatto WordPress CF7 in Genropy con le API REST&amp;rdquo;&lt;/a&gt;, ma desideriamo in questo caso condividere un caso pratico per vedere insieme cosa si può ottenere in termini grafici e pratici da una configurazione di questo tipo.&lt;/p&gt;</description></item><item><title>Genropy augura buon Natale</title><link>https://www.genropy.org/blog/genropy-augura-buon-natale/</link><pubDate>Thu, 22 Dec 2022 15:05:07 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-augura-buon-natale/</guid><description>&lt;p&gt;Il 2022 è al termine. È stato un anno ricco di grandi novità per noi, in particolare:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;abbiamo riorganizzato i &lt;a href="https://www.genropy.org/blog/genropy-update-announcement-nomi-dei-branch/"&gt;&lt;strong&gt;branch&lt;/strong&gt;&lt;/a&gt;, rendendo il vecchio "&lt;em&gt;py3&lt;/em&gt;" il nuovo ramo "&lt;em&gt;master&lt;/em&gt;"&lt;/li&gt;
&lt;li&gt;abbiamo introdotto i nuovi &lt;a href="https://www.genropy.org/blog/genropy-update-announcement-nuovi-menu/"&gt;&lt;strong&gt;menu&lt;/strong&gt;&lt;/a&gt;, ora più dinamici, più personalizzabili, più facilmente differenziabili per dispositivo o gruppo di utenza &lt;/li&gt;
&lt;li&gt;introducendo la libreria &lt;a href="https://www.genropy.org/blog/nuova-libreria-per-la-generazione-di-stampe-pdf-weasyprint/"&gt;Weasyprint&lt;/a&gt;, abbiamo migliorato le&amp;nbsp;&lt;strong&gt;stampe&lt;/strong&gt;, che risultano ora più veloci e precise&lt;/li&gt;
&lt;li&gt;abbiamo migliorato gli strumenti di&amp;nbsp;&lt;strong&gt;analisi dei dati in tempo reale&lt;/strong&gt;, tra cui la&amp;nbsp;&lt;strong&gt;&lt;a href="https://docs.genropy.org/manuale_utente_genropy/table_manager/selection_view/grid/grouped_view.html"&gt;groupedView&lt;/a&gt;&lt;/strong&gt;, disponibile su tutti gli applicativi in tutte le pagine&lt;/li&gt;
&lt;li&gt;abbiamo completato e aggiornato la &lt;a href="https://www.genropy.org/documentazione/"&gt;documentazione&lt;/a&gt;, arricchendola sempre più, prodotto nuovo materiale didattico per il &lt;a href="https://www.genropy.org/blog/" target="_blank" rel="noreferrer noopener"&gt;nostro blog&lt;/a&gt; e il nostro &lt;a href="https://www.youtube.com/@genropy" target="_blank" rel="noreferrer noopener"&gt;canale Youtube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ovviamente-non-è-finita-qui-stiamo-già-lavorando-a-importanti-novità-che-verranno-rilasciate-nei-prossimi-mesi-quindi-stay-tuned"&gt;Ovviamente non è finita qui! Stiamo già lavorando a importanti novità che verranno rilasciate nei prossimi mesi, quindi&amp;hellip; stay tuned!&lt;/h4&gt;
&lt;p&gt;Ci piacerebbe ricevere i feedback della nostra community riguardo alle novità introdotte e alle possibilità future. Approfittando quindi dell&amp;rsquo;occasione per farci un saluto tutti insieme e augurarci Buone Feste, ti invitiamo a dire la tua, o anche solo a fare un saluto, &lt;strong&gt;giovedì 29 alle ore 17 su Google Meet&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Come ereditare dei default tra record in relazione: l'attributo defaultFrom</title><link>https://www.genropy.org/blog/come-ereditare-dei-default-tra-record-in-relazione-lattributo-defaultfrom/</link><pubDate>Mon, 28 Nov 2022 16:53:40 +0000</pubDate><guid>https://www.genropy.org/blog/come-ereditare-dei-default-tra-record-in-relazione-lattributo-defaultfrom/</guid><description>&lt;p&gt;In una table &lt;strong&gt;gerarchica&lt;/strong&gt; o in caso di record in &lt;strong&gt;relazione&lt;/strong&gt; , può essere comodo prevedere la possibilità di far &amp;ldquo;ereditare&amp;rdquo; dei valori di record genitore o in relazione, così da offrire all&amp;rsquo;inserimento di un nuovo record un &lt;strong&gt;campo di default pre-compilato con il valore desiderato&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Supponiamo di trovarci nella tabella &lt;code&gt;prodotto_tipo&lt;/code&gt;, una tipica &lt;a href="https://docs.genropy.org/genropy_orm/tabelle_gerarchiche.html" target="_blank" rel="noreferrer noopener"&gt;tabella gerarchica&lt;/a&gt; di Genropy, dove quindi è possibile categorizzare i tipi di prodotto in una gerarchia con dei padri (es: "vernici") e dei figli (es: "vernici antiruggine", "primer", "vernici metalli"). È ragionevole supporre che nel caso di alcuni campi di una tabella di questo tipo, come ad esempio il &lt;code&gt;tipo_iva&lt;/code&gt;, questo sia comune tra i record "genitore" e i record "figlio". Non sarebbe quindi comodo trovarsi il campo &lt;em&gt;tipo_iva&lt;/em&gt; pre-popolato, nel momento in cui andrò a inserire un nuovo &lt;em&gt;tipo_prodotto&lt;/em&gt; della medesima categoria "vernici"?&lt;/p&gt;</description></item><item><title>Nuova libreria per la generazione di stampe PDF: WeasyPrint</title><link>https://www.genropy.org/blog/nuova-libreria-per-la-generazione-di-stampe-pdf-weasyprint/</link><pubDate>Fri, 28 Oct 2022 12:06:15 +0000</pubDate><guid>https://www.genropy.org/blog/nuova-libreria-per-la-generazione-di-stampe-pdf-weasyprint/</guid><description>&lt;p&gt;Siamo lieti di annunciare un'importante novità riguardante il mondo delle stampe: da oggi, anche sul ramo &lt;em&gt;&lt;strong&gt;master&lt;/strong&gt;&lt;/em&gt; di Genropy, sarà possibile utilizzare, al posto della tradizionale &lt;a href="https://wkhtmltopdf.org/" target="_blank" rel="noreferrer noopener"&gt;&lt;em&gt;wkhtmltopdf&lt;/em&gt;&lt;/a&gt;, la libreria &lt;a href="https://weasyprint.org/" target="_blank" rel="noreferrer noopener"&gt;&lt;em&gt;&lt;strong&gt;WeasyPrint&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La nuova libreria permetterà di generare stampe di file in formato PDF in modo &lt;strong&gt;più veloce&lt;/strong&gt; e &lt;strong&gt;più&lt;/strong&gt; &lt;strong&gt;efficiente&lt;/strong&gt; rispetto alla libreria &lt;em&gt;wkhtmltopdf&lt;/em&gt; precedentemente utilizzata.&lt;/p&gt;
&lt;p&gt;Consigliamo pertanto a tutti gli utenti di passare alla nuova libreria, seppur verrà mantenuta la retro-compatibilità con il sistema precedente.&lt;/p&gt;</description></item><item><title>Salvare e distribuire i manuali del documentatore con AWS S3 e Cloudfront</title><link>https://www.genropy.org/blog/salvare-e-distribuire-i-manuali-del-documentatore-con-aws-s3-e-cloudfront/</link><pubDate>Thu, 20 Oct 2022 11:25:00 +0000</pubDate><guid>https://www.genropy.org/blog/salvare-e-distribuire-i-manuali-del-documentatore-con-aws-s3-e-cloudfront/</guid><description>&lt;p&gt;L&amp;rsquo;attività di documentazione può essere piuttosto &amp;ldquo;energivora&amp;rdquo; in termini di spazio disco, soprattutto se si offrono manuali copiosi in termini di immagini, video, e materiale multimediale.&lt;/p&gt;
&lt;p&gt;Proprio per questo abbiamo deciso di sfruttare i &lt;strong&gt;&lt;a href="https://aws.amazon.com/it/s3/" target="_blank" rel="noreferrer noopener"&gt;bucket di AWS&lt;/a&gt;&lt;/strong&gt;, già in buona parte &lt;a href="https://docs.genropy.org/service/service_genropy/storage/aws_s3.html" target="_blank" rel="noreferrer noopener"&gt;integrati in Genropy&lt;/a&gt;, per ospitare anche tutti i manuali e i relativi file. Questo aggiornamento, rilasciato il 31/08/2022 sul &lt;strong&gt;branch &lt;em&gt;develop&lt;/em&gt;&lt;/strong&gt; e nell'imminente futuro anche sul branch &lt;em&gt;master&lt;/em&gt;, richiederà all'utente che faceva uso del documentatore sulle proprie istanze di effettuare qualche &lt;strong&gt;breve procedura di aggiornamento&lt;/strong&gt; per continuare a pubblicare correttamente la documentazione precedente, sia che si desideri usufruire della nuova opportunità offerta dai bucket di AWS, sia che si desideri continuare con la configurazione pre-esistente.&lt;/p&gt;</description></item><item><title>Lo storage dei file con AWS S3</title><link>https://www.genropy.org/blog/lo-storage-dei-file-con-aws-s3/</link><pubDate>Fri, 13 May 2022 13:09:10 +0000</pubDate><guid>https://www.genropy.org/blog/lo-storage-dei-file-con-aws-s3/</guid><description>&lt;p&gt;Normalmente lo storage di file, siano questi allegati di &lt;a href="https://docs.genropy.org/genropy_orm/attachments_table.html" target="_blank" rel="noreferrer noopener"&gt;Attachments Tables&lt;/a&gt;, file immagine caricati tramite &lt;a href="https://docs.genropy.org/widgetpedia/html/img.html" target="_blank" rel="noreferrer noopener"&gt;widget immagine&lt;/a&gt;, o altri file (es: video) caricati con un &lt;a href="https://docs.genropy.org/widgetpedia/components/dropUploader.html" target="_blank" rel="noreferrer noopener"&gt;dropUploader&lt;/a&gt;, avviene sullo stesso server su cui si trova la nostra istanza, generalmente a un path indicato all'interno della cartella &lt;code&gt;site&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In alcuni casi può essere però preferibile separare lo storage di questi file dal server su cui viene eseguita l&amp;rsquo;istanza, per esigenze di performance, di più semplice backup e disponibilità dei dati, di condivisione con altri software, ecc.&lt;/p&gt;</description></item><item><title>Come personalizzare le procedure di importazione</title><link>https://www.genropy.org/blog/come-personalizzare-le-procedure-di-importazione/</link><pubDate>Fri, 08 Apr 2022 11:14:44 +0000</pubDate><guid>https://www.genropy.org/blog/come-personalizzare-le-procedure-di-importazione/</guid><description>&lt;p&gt;Il tema dell'importazione da file Excel è ampiamente diffuso in Genropy, si pensi alla possibilità di &lt;a href="https://docs.genropy.org/manuale_utente_genropy/basic_elements/basic_grid.html#altre-operazioni-esportare-e-importare-excel" target="_blank" rel="noreferrer noopener"&gt;importare record di una tabella da file xls&lt;/a&gt; o addirittura alla &lt;a href="https://www.genropy.org/blog/da-file-excel-al-web-app-in-meno-di-3-minuti/" target="_blank" rel="noreferrer noopener"&gt;possibilità di creare completamente da zero un intero applicativo&lt;/a&gt; proprio da una serie di fogli. &lt;/p&gt;
&lt;p&gt;La procedura di importazione consente quindi di popolare le tabelle associando le colonne a quelle di un foglio di calcolo, anche se queste hanno nomi diversi. Supponiamo però di avere bisogno di &lt;strong&gt;personalizzare questa procedura di importazione.&lt;/strong&gt; Potrebbe essere il caso di un&amp;rsquo;importazione in cui abbiamo dei campi in relazione, per esempio, ed è quindi necessario effettuare delle query preventive, oppure i valori devono essere scritti su più tabelle, devono essere effettuate delle operazioni di controllo o modifica, ecc.&lt;/p&gt;</description></item><item><title>I campi dinamici in Genropy: istruzioni per l'uso</title><link>https://www.genropy.org/blog/campi-dinamici-in-genropy-istruzioni-per-luso/</link><pubDate>Thu, 31 Mar 2022 14:54:12 +0000</pubDate><guid>https://www.genropy.org/blog/campi-dinamici-in-genropy-istruzioni-per-luso/</guid><description>&lt;p&gt;Quando si progetta una base di dati può capitare di avere l’esigenza di avere in un’&lt;strong&gt;unica tabella&lt;/strong&gt; significativa &lt;strong&gt;elementi&lt;/strong&gt; che richiederebbero &lt;strong&gt;tracciati record diversi&lt;/strong&gt; tra loro. Potrebbe essere il caso di alcune &lt;strong&gt;caratteristiche di un prodotto&lt;/strong&gt; valide solo per una &lt;strong&gt;particolare tipologia di prodotto&lt;/strong&gt; : è infatti più che probabile che alcuni attributi di una sedia (materiale, colore, altezza, tessuto) non saranno gli stessi necessari per identificare un tipo di vernice, così come le taglie di una maglietta (S,M,L) non saranno confrontabili con la misura delle scarpe (40, 41, ecc).&lt;/p&gt;</description></item><item><title>Genropy update announcement: nomi dei branch</title><link>https://www.genropy.org/blog/genropy-update-announcement-nomi-dei-branch/</link><pubDate>Mon, 14 Mar 2022 14:03:37 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-update-announcement-nomi-dei-branch/</guid><description>&lt;p&gt;Come accennato durante la serata dedicata ai &lt;a href="https://www.genropy.org/blog/genropy-update-announcement-nuovi-menu/" target="_blank" rel="noreferrer noopener"&gt;nuovi menu&lt;/a&gt; settimana scorsa, ecco in arrivo un'altra importante novità riguardante i nomi dei branch di Genropy. &lt;/p&gt;
&lt;p&gt;Ecco come varieranno i branch &lt;strong&gt;a partire da oggi&lt;/strong&gt; :&lt;/p&gt;
&lt;figure class="wp-block-table"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;py3 --&amp;gt; &lt;strong&gt;master&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;develop --&amp;gt; &lt;strong&gt;py2&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;py3-newappmenu --&amp;gt; &lt;strong&gt;develop&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Consigliamo quindi a tutti di effettuare subito un &lt;strong&gt;&lt;em&gt;checkout&lt;/em&gt;&lt;/strong&gt; dei nuovi branch, direttamente dalla cartella &lt;em&gt;genropy&lt;/em&gt;. Per prima cosa ti invitiamo a controllare i branch attualmente monitorati nella tua installazione di Genropy:&lt;/p&gt;</description></item><item><title>Genropy update announcement: nuovi menu</title><link>https://www.genropy.org/blog/genropy-update-announcement-nuovi-menu/</link><pubDate>Tue, 08 Mar 2022 15:29:36 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-update-announcement-nuovi-menu/</guid><description>&lt;p&gt;Siamo lieti di annunciare fantastiche novità in arrivo per gli utilizzatori di Genropy, riguardanti i menu degli applicativi. Il menu di un applicativo Genropy, che abbiamo conosciuto già nello svolgimento del &lt;a href="https://docs.genropy.org/tutorial_fatturazione/intro.html" target="_blank" rel="noreferrer noopener"&gt;Tutorial di Fatturazione&lt;/a&gt;, è da sempre piuttosto statico: in un file &lt;em&gt;menu.py &lt;/em&gt;si specificavano infatti le &lt;em&gt;thpage&lt;/em&gt;, le &lt;em&gt;webpage&lt;/em&gt;, le cartelle e si raccoglievano in un'unica voce le tabelle di &lt;em&gt;lookup&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;Il funzionamento dei menu, al fine di essere più in linea con la dinamicità tipica di Genropy e alla luce anche di una serie di &lt;strong&gt;miglioramenti alla versione mobile attualmente in fase di sviluppo&lt;/strong&gt; , è stato &lt;strong&gt;totalmente rivisto&lt;/strong&gt; per rendere questi strumenti più &lt;strong&gt;dinamici&lt;/strong&gt; , più &lt;strong&gt;personalizzabili&lt;/strong&gt; , più facilmente &lt;strong&gt;differenziabili per dispositivo o gruppo di utenza&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Come integrare un modulo di contatto Wordpress CF7 in Genropy con le API REST</title><link>https://www.genropy.org/blog/come-integrare-un-modulo-di-contatto-wordpress-cf7-in-genropy-con-le-api-rest/</link><pubDate>Tue, 22 Feb 2022 11:21:10 +0000</pubDate><guid>https://www.genropy.org/blog/come-integrare-un-modulo-di-contatto-wordpress-cf7-in-genropy-con-le-api-rest/</guid><description>&lt;p&gt;Molto spesso può capitare di voler integrare un applicativo Genropy con delle fonti di dati esterni (siti web, altri applicativi, fogli di calcolo). Una delle possibili necessità potrebbe essere quella di raccogliere i dati da un sito Wordpress: può essere il caso di una generica richiesta di informazioni da un modulo di contatto (CRM), dell&amp;rsquo;iscrizione a una newsletter, o ancora dell&amp;rsquo;iscrizione al sito, dell&amp;rsquo;invio dei dati di un ordine al software di fatturazione.&lt;/p&gt;</description></item><item><title>Come visualizzare i record con i template di riga</title><link>https://www.genropy.org/blog/come-visualizzare-i-record-con-i-template-di-riga/</link><pubDate>Mon, 31 Jan 2022 09:50:03 +0000</pubDate><guid>https://www.genropy.org/blog/come-visualizzare-i-record-con-i-template-di-riga/</guid><description>&lt;p&gt;Il template di riga (&lt;em&gt;rowtemplate&lt;/em&gt;) è uno strumento che permette di applicare un template alla modalità di visualizzazione del record sulla griglia.&lt;/p&gt;
&lt;p&gt;Il &lt;em&gt;rowtemplate&lt;/em&gt; può di conseguenza essere molto utile il tutte quelle situazioni in cui vogliamo fornire un&amp;rsquo;&lt;strong&gt;anteprima di alcuni dati del record già nella griglia&lt;/strong&gt; , in una forma personalizzata e senza &amp;ldquo;appesantire&amp;rdquo; le colonne della vista, permettendo all&amp;rsquo;utente di confrontare i dati senza aprire record per record. Supponiamo per esempio di voler dare subito un&amp;rsquo;anteprima del totale fatturato e del numero di fatture di un cliente: grazie al template, sarà possibile visualizzare queste informazioni al passaggio del mouse sui record cliente.&lt;/p&gt;</description></item><item><title>Tipi di TableHandler: una panoramica</title><link>https://www.genropy.org/blog/tipi-di-tablehandler-una-panoramica/</link><pubDate>Tue, 18 Jan 2022 10:30:49 +0000</pubDate><guid>https://www.genropy.org/blog/tipi-di-tablehandler-una-panoramica/</guid><description>&lt;p&gt;Come abbiamo visto nelle nostre Genropill &lt;a href="https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/" target="_blank" rel="noreferrer noopener"&gt;Dal database alla web app in meno di 2 minuti&lt;/a&gt;, &lt;a href="https://www.genropy.org/blog/da-file-excel-al-web-app-in-meno-di-3-minuti/" target="_blank" rel="noreferrer noopener"&gt;Da file excel al web app in meno di 3 minuti&lt;/a&gt;, &lt;a href="https://www.genropy.org/blog/come-creare-un-applicativo-web-da-zero-in-pochi-minuti-con-il-package-editor/" target="_blank" rel="noreferrer noopener"&gt;Come creare un applicativo web da zero in pochi minuti con il Package Editor&lt;/a&gt;, grazie al Package Editor siamo riusciti a creare in pochissimo tempo lo scheletro di un mini-applicativo web: questo è stato reso possibile sfruttando un component di Genropy chiamato &lt;a href="https://docs.genropy.org/tablehandler/index.html" target="_blank" rel="noreferrer noopener"&gt;TableHandler&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Come gestire file in Genropy: le attachmentTable</title><link>https://www.genropy.org/blog/come-gestire-file-in-genropy-le-attachmenttable/</link><pubDate>Mon, 22 Nov 2021 14:42:26 +0000</pubDate><guid>https://www.genropy.org/blog/come-gestire-file-in-genropy-le-attachmenttable/</guid><description>&lt;p&gt;In un software si ha molto spesso a che fare con la &lt;strong&gt;gestione di file su disco&lt;/strong&gt; , di tipologie anche molto diverse a seconda del tipo di applicativo: cataloghi, brochure, curriculum, schede tecniche, bolle di trasporto, contratti, ecc.&lt;/p&gt;
&lt;p&gt;Ciò che li accomuna è il &lt;strong&gt;collegamento con una tabella principale&lt;/strong&gt; , quella dei prodotti, dei candidati, degli ordini, anche questa ovviamente molto diversa a seconda delle funzioni dell&amp;rsquo;applicativo. Come quindi &lt;strong&gt;gestire facilmente file così diversi in ambiti totalmente differenti&lt;/strong&gt;?&lt;/p&gt;</description></item><item><title>formulaColumn parametriche</title><link>https://www.genropy.org/blog/formulacolumn-parametriche/</link><pubDate>Fri, 05 Nov 2021 14:21:58 +0000</pubDate><guid>https://www.genropy.org/blog/formulacolumn-parametriche/</guid><description>&lt;p&gt;Le &lt;a href="https://docs.genropy.org/genropy_orm/formulaColumn/formulaColumn.html" target="_blank" rel="noreferrer noopener"&gt;formulaColumn&lt;/a&gt; sono &lt;strong&gt;colonne virtuali calcolate in tempo reale al caricamento della pagina&lt;/strong&gt; dell'applicativo. Queste sono molto utili per effettuare calcoli sempre aggiornati da visualizzare in una griglia, come per esempio il totale fatturato di uno specifico cliente che visualizziamo in &lt;a href="https://docs.genropy.org/installation_guide/sandbox.html" target="_blank" rel="noreferrer noopener"&gt;Sandbox&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tuttavia, prendendo a titolo di esempio proprio questo totale fatturato, questo è un valore &amp;ldquo;assoluto&amp;rdquo;, indipendente cioè da una data, sia questa la data di lavoro, sia questa invece un&amp;rsquo;ipotetica data specificata manualmente via codice o tramite interfaccia.&lt;/p&gt;</description></item><item><title>"Scopriamo insieme Genropy!" con PythonBiellaGroup</title><link>https://www.genropy.org/blog/scopriamo-insieme-genropy-con-pythonbiellagroup/</link><pubDate>Thu, 21 Oct 2021 08:35:55 +0000</pubDate><guid>https://www.genropy.org/blog/scopriamo-insieme-genropy-con-pythonbiellagroup/</guid><description>&lt;p&gt;Dalla collaborazione con&amp;nbsp;&lt;a href="https://t.me/joinchat/UZJZzGFKWf9JGGx5" target="_blank" rel="noreferrer noopener"&gt;Python Biella Group&lt;/a&gt;&amp;nbsp;nasce "Scopriamo insieme Genropy!", una serie di eventi in cui esploreremo insieme il framework e svilupperemo un'applicazione per le donazioni di sangue da zero.&lt;/p&gt;
&lt;p&gt;Il programma consiste in 4 serate, &lt;strong&gt;ogni lunedì sera alle ore 21 a partire da lunedì 18 ottobre&lt;/strong&gt;. Nella prima serata abbiamo fatto una panoramica sul framework, passato in rassegna qualche caso studio, visto in azione il Package Editor per creare un&amp;rsquo;applicazione partendo da un database legacy, analizzato brevemente come viene costruita una pagina standard di Genropy.&lt;/p&gt;</description></item><item><title>Le shortcuts in Genropy</title><link>https://www.genropy.org/blog/le-shortcuts-in-genropy/</link><pubDate>Fri, 08 Oct 2021 12:09:43 +0000</pubDate><guid>https://www.genropy.org/blog/le-shortcuts-in-genropy/</guid><description>&lt;p&gt;Il nostro utente finale dell&amp;rsquo;applicativo può a volte trovarsi a eseguire delle operazioni in sequenza, per esempio la modifica uno a uno di alcuni campi dei record, così come lo sviluppatore che sta eseguendo dei test: in entrambi i casi ci troviamo di fronte a operazione estremamente ripetitive e meccaniche, che potremmo svolgere più velocemente sfruttando delle &lt;strong&gt;scorciatoie da tastiera&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Per questo genere di casi Genropy ci mette a disposizione delle shortcuts di sistema, che ci permettono per esempio di salvare più velocemente, spostarci tra i record, ricaricare la pagina, tutte estremamente personalizzabili a piacimento.&lt;/p&gt;</description></item><item><title>Come realizzare un component Python in Genropy</title><link>https://www.genropy.org/blog/come-realizzare-un-component-python-in-genropy/</link><pubDate>Thu, 09 Sep 2021 11:32:42 +0000</pubDate><guid>https://www.genropy.org/blog/come-realizzare-un-component-python-in-genropy/</guid><description>&lt;p&gt;In alcuni casi può capitare di voler &lt;strong&gt;personalizzare il comportamento&lt;/strong&gt; di alcuni widget o component &amp;ldquo;core&amp;rdquo; di Genropy, oppure &lt;strong&gt;creare veri e propri blocchi o interfacce personalizzate da zero&lt;/strong&gt;. Prendiamo ad esempio il caso di una form particolarmente complessa, che vogliamo ripetere uguale (o quasi) su più pagine.&lt;/p&gt;
&lt;p&gt;È sempre buona norma rendere il nostro codice il più possibile &lt;strong&gt;riutilizzabile, flessibile e generico&lt;/strong&gt;: piuttosto che scrivere quindi righe e righe di codice ogni volta, ci converrà utilizzare i component di Genropy, che ci permettono di &lt;strong&gt;scrivere un blocco di codice in un punto dell'applicativo e richiamarlo comodamente al bisogno&lt;/strong&gt;. Un component può essere molto semplice o anche estremamente complesso: si pensi ad esempio al &lt;strong&gt;component core per eccellenza di Genropy, il &lt;a href="https://docs.genropy.org/tablehandler/" target="_blank" rel="noreferrer noopener"&gt;TableHandler&lt;/a&gt;&lt;/strong&gt;, grazie al quale con una sola riga di codice è possibile mostrare la particolare visualizzazione dei record di una tabella. &lt;/p&gt;</description></item><item><title>Novità: uso dei controller con bottoni e menuline</title><link>https://www.genropy.org/blog/novita-uso-dei-controller-con-bottoni-e-menuline/</link><pubDate>Tue, 13 Jul 2021 11:50:41 +0000</pubDate><guid>https://www.genropy.org/blog/novita-uso-dei-controller-con-bottoni-e-menuline/</guid><description>&lt;p&gt;Con un importante aggiornamento rilasciato nella &lt;strong&gt;prima settimana di luglio&lt;/strong&gt; abbiamo introdotto alcune importanti novità in casa Genropy, riguardanti il mondo dei &lt;strong&gt;&lt;a href="https://docs.genropy.org/widgetpedia/datastore%20elements/controllers/controllers.html" target="_blank" rel="noreferrer noopener"&gt;controllers&lt;/a&gt;&lt;/strong&gt; collegati a &lt;a href="https://docs.genropy.org/widgetpedia/html/button.html" target="_blank" rel="noreferrer noopener"&gt;bottoni, lightbuttons&lt;/a&gt; e menuline.&lt;/p&gt;
&lt;p&gt;Fino a questo momento, infatti, i bottoni potevano, tramite la &lt;strong&gt;&lt;em&gt;action&lt;/em&gt;&lt;/strong&gt;, specificare direttamente l'azione da eseguire e contenere tutti i parametri necessari, ma questa eventualità poco si adatta ad azioni complesse con tanti parametri, e inoltre rischia di generare confusione in merito alle modalità applicative nonché un codice "non pulito". Una prima possibilità a nostra disposizione per far fronte a questo tipo di situazione era di innescare invece con la &lt;em&gt;&lt;strong&gt;action&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;un&lt;strong&gt; &lt;a href="https://docs.genropy.org/widgetpedia/datastore%20elements/controllers/dataController.html" target="_blank" rel="noreferrer noopener"&gt;dataController&lt;/a&gt; &lt;/strong&gt;tramite l'attributo "&lt;strong&gt;&lt;em&gt;_fired&lt;/em&gt;&lt;/strong&gt;" o tramite il meccanismo &lt;strong&gt;&lt;em&gt;publish/subscribe&lt;/em&gt;&lt;/strong&gt;: in questo modo è possibile separare chiaramente l'oggetto chiamante (il bottone) e l'azione chiamata, che si può andare ad arricchire anche in modo complesso con i parametri necessari.&lt;/p&gt;</description></item><item><title>Come utilizzare l'ORM di Genropy da Terminale</title><link>https://www.genropy.org/blog/come-utilizzare-lorm-di-genropy-da-terminale/</link><pubDate>Mon, 05 Jul 2021 11:25:33 +0000</pubDate><guid>https://www.genropy.org/blog/come-utilizzare-lorm-di-genropy-da-terminale/</guid><description>&lt;p&gt;Sia a scopo di debug che per l&amp;rsquo;accesso da applicazioni terze, a volte può servire &lt;strong&gt;utilizzare l&amp;rsquo;ORM di Genropy anche al di fuori dell&amp;rsquo;applicativo&lt;/strong&gt; stesso. Per questo tipo di esigenza, Genropy offre la possibilità di &lt;strong&gt;istanziare&lt;/strong&gt; comodamente &lt;strong&gt;un&amp;rsquo;applicazione&lt;/strong&gt; semplicemente &lt;strong&gt;da un terminale&lt;/strong&gt;. Così facendo sarà possibile &lt;strong&gt;sfruttare tutte le funzionalità dell&amp;rsquo;ORM di Genropy&lt;/strong&gt; , quindi visualizzare la struttura del model, eseguire operazioni di lettura e scrittura, ecc, anche a webserver inattivo e al di fuori dell&amp;rsquo;interfaccia dell&amp;rsquo;applicativo.&lt;/p&gt;</description></item><item><title>"L'ho fatto con Genropy": i progetti della community</title><link>https://www.genropy.org/blog/lho-fatto-con-genropy-i-progetti-della-community/</link><pubDate>Mon, 14 Jun 2021 11:24:16 +0000</pubDate><guid>https://www.genropy.org/blog/lho-fatto-con-genropy-i-progetti-della-community/</guid><description>&lt;p&gt;Il &lt;a href="https://www.genropy.org/blog/contest-lho-fatto-con-genropy/" target="_blank" rel="noreferrer noopener"&gt;Contest "L'ho fatto con Genropy"&lt;/a&gt;, che ha visto protagonisti nel mese di maggio i progetti dei membri della community di Genropy, è giunto al termine. Abbiamo avuto modo di vedere all'opera 7 progetti, nei campi più disparati: salute, contabilità, archiviazione, tributi, sport... perfino allevamento di vongole!&lt;/p&gt;
&lt;p&gt;Tutti i partecipanti si sono aggiudicati il premio per la condivisione con il resto della community del loro progetto:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mezza giornata (4h) di formazione e consulenza di gruppo di livello avanzato con i core developer di Genropy&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Le Preferenze in Genropy</title><link>https://www.genropy.org/blog/le-preferenze-in-genropy/</link><pubDate>Thu, 06 May 2021 16:21:13 +0000</pubDate><guid>https://www.genropy.org/blog/le-preferenze-in-genropy/</guid><description>&lt;p&gt;Ipotizziamo di voler inserire all&amp;rsquo;interno del nostro applicativo una procedura di controllo che impedisca il salvataggio di un record &amp;ldquo;fattura&amp;rdquo; se l&amp;rsquo;importo totale è al di sotto di un importo minimo, oppure di voler aggiungere un limite massimo allo sconto inseribile, o ancora impostare un costo della spedizione sulla base di valori reperibili da una tabella di riferimento.&lt;/p&gt;
&lt;p&gt;La soluzione potrebbe essere estremamente semplice. Prendendo il primo caso, sarebbe sufficiente posizionarsi all'interno di un &lt;em&gt;&lt;a href="https://docs.genropy.org/genropy_orm/trigger_intro.html" target="_blank" rel="noreferrer noopener"&gt;trigger&lt;/a&gt;&lt;/em&gt; e al momento del calcolo del totale in vista del salvataggio andare a sollevare un'eccezione se il totale è inferiore all'importo che specifichiamo, ad esempio "1":&lt;/p&gt;</description></item><item><title>Come arricchire le viste con le Sections</title><link>https://www.genropy.org/blog/come-arricchire-le-viste-con-le-sections/</link><pubDate>Mon, 03 May 2021 13:30:47 +0000</pubDate><guid>https://www.genropy.org/blog/come-arricchire-le-viste-con-le-sections/</guid><description>&lt;p&gt;Quando si ha a che fare con &lt;strong&gt;molti dati all'interno di una stessa vista&lt;/strong&gt; potremmo aver bisogno di sistemi per filtrare rapidamente questi dati sulla base di criteri predefiniti. In un precedente tutorial avevamo già visto come usare a tale scopo le &lt;a href="https://www.genropy.org/blog/come-definire-le-querybysample-per-impostare-criteri-di-ricerca-predefiniti/" target="_blank" rel="noreferrer noopener"&gt;&lt;strong&gt;queryBySample&lt;/strong&gt;&lt;/a&gt;, che sono particolarmente utili quando si vuole offrire dei &lt;strong&gt;criteri di ricerca predefiniti&lt;/strong&gt; (es: ricerca per artista, per titolo della canzone, per album, per genere musicale). &lt;/p&gt;
&lt;p&gt;Ipotizziamo però un caso in cui si voglia individuare tutte le tracce audio di un certo formato (&amp;ldquo;mp4&amp;rdquo;, &amp;ldquo;wav&amp;rdquo; e così via), o appartenenti allo stesso genere musicale, o raggruppando i risultati per durata: tutti casi, quindi, in cui si ha a che fare con &lt;strong&gt;pochi criteri di scelta, sempre uguali&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Contest: "L'ho fatto con Genropy"</title><link>https://www.genropy.org/blog/contest-lho-fatto-con-genropy/</link><pubDate>Fri, 30 Apr 2021 11:32:13 +0000</pubDate><guid>https://www.genropy.org/blog/contest-lho-fatto-con-genropy/</guid><description>&lt;p&gt;Hai già utilizzato Genropy per realizzare un progetto sul web? Ti piace il framework, ma sei sempre più desideroso di imparare? Allora questo contest fa al caso tuo&amp;hellip;&lt;/p&gt;
&lt;p&gt;Come ben saprai Genropy è un progetto open-source gestito da poche persone, che mettono a disposizione il proprio lavoro, la propria conoscenza e la propria esperienza al servizio del framework. Siamo però desiderosi di espandere maggiormente la nostra community, quindi vogliamo che chi lo usa &lt;strong&gt;condivida con gli altri la propria esperienza&lt;/strong&gt; , un progetto realizzato, in che cosa Genropy è stato d&amp;rsquo;aiuto e perché no, anche in che cosa non lo è stato.&lt;/p&gt;</description></item><item><title>Quick Start</title><link>https://www.genropy.org/quick-start/</link><pubDate>Mon, 26 Apr 2021 09:46:41 +0000</pubDate><guid>https://www.genropy.org/quick-start/</guid><description>&lt;h3 class="text-center" id="da-dove-incominciare"&gt;DA DOVE INCOMINCIARE?&lt;/h3&gt;
&lt;p class="text-center"&gt;Se ti trovi qui probabilmente hai già visto Genropy all’opera su &lt;a href="https://sandbox.genropy.org/"&gt;Sandbox&lt;/a&gt; o in una delle nostre &lt;a href="https://www.genropy.org/blog/categoria/genropills/"&gt;Genropills&lt;/a&gt; e sei interessato a provare in prima persona le potenzialità del nostro framework.&lt;/p&gt;
&lt;div class="gnr-cols"&gt;
&lt;div class="gnr-col gnr-col-8"&gt;&lt;p&gt;Ecco i primi passi da compiere per partire subito con Genropy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Installa Genropy&lt;/strong&gt; nella &lt;a href="https://docs.genropy.org/installation_guide/quick_installation.html"&gt;modalità rapida&lt;/a&gt; (2 min.) con &lt;em&gt;pip install&lt;/em&gt; a scopo di test, oppure esegui l’&lt;a href="https://docs.genropy.org/installation_guide/framework_installation.html"&gt;installazione completa&lt;/a&gt; (10 min.) effettuando il &lt;em&gt;clone&lt;/em&gt; del &lt;em&gt;repository&lt;/em&gt; di Genropy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Muovi i primi passi&lt;/strong&gt; con il framework completando il &lt;a href="https://docs.genropy.org/tutorial_fatturazione/intro.html"&gt;Tutorial di Fatturazione&lt;/a&gt; (90 min.)&lt;/li&gt;
&lt;li&gt;Se hai &lt;strong&gt;domande o curiosità&lt;/strong&gt; puoi rivolgerle al &lt;a href="https://t.me/AskOnGenropy"&gt;gruppo Telegram AskGenropy&lt;/a&gt; (15 min.)&lt;/li&gt;
&lt;li&gt;Sbizzarrisciti creando il tuo &lt;strong&gt;primo applicativo con il Package Editor&lt;/strong&gt; partendo da un &lt;a href="https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/"&gt;db legacy&lt;/a&gt;, un &lt;a href="https://www.genropy.org/blog/da-file-excel-al-web-app-in-meno-di-3-minuti/"&gt;foglio Excel&lt;/a&gt;, o semplicemente &lt;a href="https://www.genropy.org/blog/come-creare-un-applicativo-web-da-zero-in-pochi-minuti-con-il-package-editor/"&gt;da zero&lt;/a&gt; (10 min.)&lt;/li&gt;
&lt;li&gt;Ti piace quello che hai visto finora? È il momento di &lt;strong&gt;approfondire&lt;/strong&gt; con il &lt;a href="https://docs.genropy.org/corso_genropy/index.html"&gt;Corso Base&lt;/a&gt; (120 min.)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;div class="gnr-col gnr-col-4"&gt;&lt;div class="gnr-progress"&gt;&lt;span class="gnr-progress-fill" style="width:10%"&gt;&lt;/span&gt;&lt;small class="gnr-progress-label"&gt;Installazione Genropy&lt;/small&gt;&lt;/div&gt;
&lt;div class="gnr-progress"&gt;&lt;span class="gnr-progress-fill" style="width:40%"&gt;&lt;/span&gt;&lt;small class="gnr-progress-label"&gt;Tutorial di Fatturazione&lt;/small&gt;&lt;/div&gt;
&lt;div class="gnr-progress"&gt;&lt;span class="gnr-progress-fill" style="width:50%"&gt;&lt;/span&gt;&lt;small class="gnr-progress-label"&gt;Gruppo AskGenropy&lt;/small&gt;&lt;/div&gt;
&lt;div class="gnr-progress"&gt;&lt;span class="gnr-progress-fill" style="width:60%"&gt;&lt;/span&gt;&lt;small class="gnr-progress-label"&gt;Package Editor&lt;/small&gt;&lt;/div&gt;
&lt;div class="gnr-progress"&gt;&lt;span class="gnr-progress-fill" style="width:100%"&gt;&lt;/span&gt;&lt;small class="gnr-progress-label"&gt;Corso Base&lt;/small&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;p class="text-center"&gt;Inoltre, ricordati di consultare sempre la nostra &lt;a href="https://www.genropy.org/documentazione/"&gt;Documentazione&lt;/a&gt; e il nostro &lt;a href="https://www.genropy.org/blog/"&gt;Blog&lt;/a&gt;, dove potrai scoprire nuove funzionalità e approfondire sempre di più la conoscenza di Genropy, e di seguirci su tutti i canali Telegram e sui social per tenerti informato con le ultime novità!&lt;/p&gt;</description></item><item><title>GenroTalks: Conosciamo insieme Genropy</title><link>https://www.genropy.org/blog/genrotalks-conosciamo-insieme-genropy/</link><pubDate>Mon, 22 Mar 2021 16:03:08 +0000</pubDate><guid>https://www.genropy.org/blog/genrotalks-conosciamo-insieme-genropy/</guid><description>&lt;h3 id="martedì-20-aprile-ore-1800---live-su-youtube"&gt;Martedì 20 Aprile ore 18.00 - Live su Youtube&lt;/h3&gt;
&lt;div class="wp-block-buttons"&gt;
&lt;div class="wp-block-button"&gt;&lt;a class="wp-block-button__link" href="https://youtu.be/mZ2x0XSIM04" target="_blank" rel="noreferrer noopener"&gt;Segui l'evento su YT&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Dalla collaborazione con &lt;a href="https://www.facebook.com/djangogirlsIT" target="_blank" rel="noreferrer noopener"&gt;Django Girls Italia&lt;/a&gt; e &lt;a href="https://www.fuzzybrains.org/it/" target="_blank" rel="noreferrer noopener"&gt;Fuzzy Brains&lt;/a&gt; nasce GenroTalks, una serie di eventi che sarà un’occasione per conoscere meglio Genropy, per chi ancora non lo conoscesse, o semplicemente rivederci.&lt;/p&gt;
&lt;p&gt;Racconteremo la &lt;strong&gt;storia&lt;/strong&gt; del framework, ne approfondiremo le &lt;strong&gt;potenzialità&lt;/strong&gt; , vedremo insieme alcuni &lt;strong&gt;casi pratici&lt;/strong&gt; di utilizzo, dalle piccole applicazioni amatoriali alla gestione del contenimento dei casi di Covid-19 in Sicilia, fino alla gestione contabile di grandi aziende italiane in un vero e proprio software ERP.&lt;/p&gt;</description></item><item><title>Imparare Genropy: il corso Base di Genropy</title><link>https://www.genropy.org/blog/imparare-genropy-il-corso-base-di-genropy/</link><pubDate>Tue, 16 Mar 2021 14:56:42 +0000</pubDate><guid>https://www.genropy.org/blog/imparare-genropy-il-corso-base-di-genropy/</guid><description>&lt;p&gt;Per sfruttare al massimo tutte le potenzialità offerte da Genropy, come per tutte le cose è necessario approfondire lo studio per comprenderne al meglio i meccanismi e le dinamiche di funzionamento.&lt;/p&gt;
&lt;p&gt;Grazie al nostro &lt;a href="https://docs.genropy.org/tutorial_fatturazione/intro.html" target="_blank" rel="noreferrer noopener"&gt;&lt;strong&gt;Tutorial di Fatturazione&lt;/strong&gt;&lt;/a&gt; è infatti possibile apprendere rapidamente gli &lt;strong&gt;aspetti più pratici&lt;/strong&gt;, dalla creazione di un progetto e di un &lt;a href="https://docs.genropy.org/package/docu/intro.html" target="_blank" rel="noreferrer noopener"&gt;&lt;strong&gt;Package&lt;/strong&gt;&lt;/a&gt; all'utilizzo del component &lt;a href="https://docs.genropy.org/tablehandler/" target="_blank" rel="noreferrer noopener"&gt;&lt;strong&gt;Tablehandler&lt;/strong&gt;&lt;/a&gt;, dall'utilizzo dei principali &lt;a href="https://docs.genropy.org/widgetpedia/index.html" target="_blank" rel="noreferrer noopener"&gt;&lt;strong&gt;Widget&lt;/strong&gt;&lt;/a&gt; a disposizione fino alla &lt;a href="https://docs.genropy.org/stampe/index.html" target="_blank" rel="noreferrer noopener"&gt;creazione di una &lt;strong&gt;stampa&lt;/strong&gt;&lt;/a&gt;. &lt;/p&gt;</description></item><item><title>Come usare i semafori con i valori booleani</title><link>https://www.genropy.org/blog/come-usare-i-semafori-con-i-booleani/</link><pubDate>Fri, 12 Feb 2021 09:51:09 +0000</pubDate><guid>https://www.genropy.org/blog/come-usare-i-semafori-con-i-booleani/</guid><description>&lt;p&gt;Supponiamo di dover &lt;strong&gt;visualizzare in una Form&lt;/strong&gt; &lt;strong&gt;un valore booleano &lt;/strong&gt;che può assumere tre stati: &lt;strong&gt;Vero, Falso e nullo&lt;/strong&gt;. Può essere per esempio il caso di un campo "Iscritto alla newsletter", dove se presente una data di iscrizione viene restituito &lt;em&gt;Vero&lt;/em&gt;, se presente una data di disiscrizione viene restituito &lt;em&gt;Falso&lt;/em&gt;, o se non presente nessuna data viene restituito &lt;em&gt;null&lt;/em&gt;. Si noti quindi che il campo in sé non prevede la possibilità di inserire alcun valore direttamente, ma &lt;strong&gt;dipende da altri campi&lt;/strong&gt;, la data di iscrizione e la data di disiscrizione, che vengono peraltro compilati su una pagina esterna alla Form, e il nostro obiettivo è di mostrare nella Form questo &lt;strong&gt;valore di sola lettura&lt;/strong&gt; in modo chiaro e rapido per l'utilizzatore finale. &lt;/p&gt;</description></item><item><title>Come duplicare un record</title><link>https://www.genropy.org/blog/come-duplicare-un-record/</link><pubDate>Thu, 04 Feb 2021 11:57:48 +0000</pubDate><guid>https://www.genropy.org/blog/come-duplicare-un-record/</guid><description>&lt;p&gt;Supponiamo di voler consentire all&amp;rsquo;utente del nostro applicativo di duplicare i record in modo semplice e veloce: potrebbe essere il caso di una tabella prodotto, dove ci sono prodotti simili che differiscono solo per la descrizione, o di una serie replicata di interventi, che vogliamo marcare con un numero di copia.&lt;/p&gt;
&lt;p&gt;È possibile in questi casi utilizzare il parametro duplicate=True all'interno del metodo &lt;strong&gt;&lt;em&gt;th_options &lt;/em&gt;&lt;/strong&gt;della&lt;strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;risorsa&lt;/em&gt; della nostra tabella, al fine di mostrare nella &lt;strong&gt;Form&lt;/strong&gt; del record un'iconcina che consenta la duplicazione del record. &lt;/p&gt;</description></item><item><title>Come creare un applicativo web da zero in pochi minuti con il Package Editor</title><link>https://www.genropy.org/blog/come-creare-un-applicativo-web-da-zero-in-pochi-minuti-con-il-package-editor/</link><pubDate>Thu, 08 Oct 2020 14:45:23 +0000</pubDate><guid>https://www.genropy.org/blog/come-creare-un-applicativo-web-da-zero-in-pochi-minuti-con-il-package-editor/</guid><description>&lt;p&gt;Abbiamo visto in due precedenti Genropill come sia possibile in pochissimi minuti &lt;a rel="noreferrer noopener" href="https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/" target="_blank"&gt;creare un applicativo partendo da un database legacy&lt;/a&gt; o addirittura &lt;a rel="noreferrer noopener" href="https://www.genropy.org/blog/da-file-excel-al-web-app-in-meno-di-3-minuti/" target="_blank"&gt;partendo da un file Excel&lt;/a&gt; utilizzando uno strumento di Genropy appositamente creato, il &lt;strong&gt;Package Editor&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Il package editor ci permette di &lt;strong&gt;definire (o modificare) da interfaccia grafica un &lt;a rel="noreferrer noopener" href="https://docs.genropy.org/package/introduzione.html" target="_blank"&gt;package&lt;/a&gt;&lt;/strong&gt;, ovvero un insieme di tabelle che servono a implementare un'area funzionale dell'applicativo. Le tabelle sono i &lt;em&gt;modelli di dati &lt;/em&gt;(sotto forma di &lt;em&gt;file Python&lt;/em&gt;) su cui poi potremo generare e aggiornare il database. Le funzionalità che vogliamo attribuire all'applicativo avranno di conseguenza un package dedicato (es: "fatt", per tutta l'area funzionale legata alla fatturazione, o semplicemente "base" per le funzionalità di base).&lt;/p&gt;</description></item><item><title>Come raggruppare e filtrare i dati in tempo reale con la Grouped View</title><link>https://www.genropy.org/blog/come-raggruppare-e-filtrare-i-dati-in-tempo-reale/</link><pubDate>Thu, 24 Sep 2020 18:05:36 +0000</pubDate><guid>https://www.genropy.org/blog/come-raggruppare-e-filtrare-i-dati-in-tempo-reale/</guid><description>&lt;p&gt;Abbiamo già visto nella precedente Genropill &lt;a href="https://www.genropy.org/blog/come-creare-velocemente-report-su-dati-aggregati/" target="_blank" rel="noreferrer noopener"&gt;"Come creare velocemente report su dati aggregati"&lt;/a&gt; come Genropy ci metta a disposizione un semplice ed efficace strumento, il Group By, per aggregare dati sulla base di criteri di nostra scelta ed ottenere di fatto &lt;strong&gt;report immediati&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Da oggi però Genropy ci mette a disposizione un ulteriore strumento di analisi per definire criteri di raggruppamento e selezione dei dati in tempo reale, la &lt;strong&gt;Grouped View&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>https://www.genropy.org/privacy-policy/</link><pubDate>Mon, 07 Sep 2020 11:01:15 +0000</pubDate><guid>https://www.genropy.org/privacy-policy/</guid><description>&lt;h2 id="informativa-sul-trattamento-dei-dati-personali-sito-web-genropy"&gt;Informativa sul trattamento dei dati personali sito web Genropy&lt;/h2&gt;
&lt;p&gt;La presente informativa è resa in conformità al Regolamento (UE) n. 2016/679 (&amp;ldquo;GDPR&amp;rdquo;) e alle norme attualmente vigenti del d.lgs. 196/2003 (c.d. Codice Privacy) al fine di rendere edotto l&amp;rsquo;Utente-Interessato del sito &lt;a href="https://www.genropy.org/"&gt;https://www.genropy.org/&lt;/a&gt; (in seguito il &amp;ldquo;&lt;strong&gt;Sito&lt;/strong&gt;&amp;rdquo; o &amp;ldquo;&lt;strong&gt;Sito Web&lt;/strong&gt;&amp;rdquo;) dei trattamenti di dati personali che vengono effettuati nel corso della navigazione stessa.&lt;/p&gt;
&lt;p&gt;Questo documento potrà subire delle modifiche per eventuali variazioni delle finalità di trattamento oppure per modifiche della normativa sulla protezione dei dati e per evoluzioni tecnologiche eventualmente sopravvenute. In tal caso, alle versioni aggiornate verrà data pubblicità su questo Sito.&lt;/p&gt;</description></item><item><title>Come partizionare i dati e creare un applicativo multi-tenant</title><link>https://www.genropy.org/blog/come-partizionare-i-dati-e-creare-un-applicativo-multi-tenant/</link><pubDate>Thu, 23 Jul 2020 09:54:00 +0000</pubDate><guid>https://www.genropy.org/blog/come-partizionare-i-dati-e-creare-un-applicativo-multi-tenant/</guid><description>&lt;p&gt;Il partizionamento dei dati può rivelarsi molto utile quando l'applicativo è utilizzato da utenti che hanno necessità di accedere all'applicazione &lt;strong&gt;in modo limitato, visualizzando e modificando solo i record loro riservati&lt;/strong&gt; o da loro stessi inseriti, quando cioè ci troviamo di fronte a un &lt;strong&gt;applicativo multi-tenant&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Il partizionamento di per sé è un meccanismo che si può attivare in due semplici step:&lt;/p&gt;
&lt;p&gt;1. modificare il model della table come segue:&lt;/p&gt;</description></item><item><title>Video</title><link>https://www.genropy.org/video/</link><pubDate>Mon, 13 Jul 2020 14:34:52 +0000</pubDate><guid>https://www.genropy.org/video/</guid><description>&lt;p&gt;&lt;em&gt;Alcuni video sono ospitati su YouTube: nessun contenuto viene caricato da Google (e nessun cookie di terze parti viene installato) finché non premi play.&lt;/em&gt;&lt;/p&gt;
&lt;div class="gnr-tabs"&gt;
 &lt;ul class="gnr-tabs-nav" role="tablist"&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn is-active" data-tab="0" aria-selected="true"&gt;# GENROPILLS&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="1" aria-selected="false"&gt;# LEARNGENROPY&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="2" aria-selected="false"&gt;# TUTORIAL&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="3" aria-selected="false"&gt;# CORSO BASE&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="4" aria-selected="false"&gt;# EVENTI&lt;/button&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;div role="tabpanel" class="gnr-tab-panel is-active" data-tab="0"&gt;&lt;h3 id="-genropills"&gt;# GENROPILLS&lt;/h3&gt;
&lt;div class="gnr-video-row"&gt;
&lt;div class="gnr-video-row-player"&gt;&lt;div class="video-embed" style="position:relative;width:100%;padding-top:56.25%;"&gt;
 &lt;iframe src="https://video.softwell.it/source/vimeo/333065329/embed" title="1-Come personalizzare le viste tabella in un attimo"
 style="position:absolute;top:0;left:0;width:100%;height:100%;"
 frameborder="0" loading="lazy"
 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen"
 allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="gnr-video-row-text"&gt;&lt;h4 id="genropill-1-come-personalizzare-le-viste-su-una-tabella-in-un-attimo"&gt;Genropill 1: Come personalizzare le viste su una tabella in un attimo&lt;/h4&gt;
&lt;p&gt;A volte nella vista di una tabella, manca proprio la colonna di cui avevamo bisogno. Scopri come negli applicativi Genropy ogni griglia possa essere personalizzata in pochi secondi direttamente da interfaccia utente.&lt;/p&gt;</description></item><item><title>Gallery</title><link>https://www.genropy.org/gallery/</link><pubDate>Mon, 13 Jul 2020 11:12:30 +0000</pubDate><guid>https://www.genropy.org/gallery/</guid><description>&lt;iframe src="https://dev.genropy.org/gallery" title="Gallery Genropy"&gt;&lt;/iframe&gt;</description></item><item><title>Panoramica</title><link>https://www.genropy.org/overview/</link><pubDate>Mon, 13 Jul 2020 10:58:26 +0000</pubDate><guid>https://www.genropy.org/overview/</guid><description>&lt;div class="gnr-tabs"&gt;
 &lt;ul class="gnr-tabs-nav" role="tablist"&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn is-active" data-tab="0" aria-selected="true"&gt;# SINGLE PAGE APPLICATIONS&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="1" aria-selected="false"&gt;# LE CARATTERISTICHE DI GENROPY&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="2" aria-selected="false"&gt;# VANTAGGI&lt;/button&gt;&lt;/li&gt;
 &lt;li role="presentation"&gt;&lt;button type="button" role="tab" class="gnr-tab-btn" data-tab="3" aria-selected="false"&gt;# DA DOVE INCOMINCIARE?&lt;/button&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;div role="tabpanel" class="gnr-tab-panel is-active" data-tab="0"&gt;&lt;h3 id="-single-page-applications"&gt;# SINGLE PAGE APPLICATIONS&lt;/h3&gt;
&lt;p&gt;Da Wikipedia:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Con Single-page application (in italiano: applicazione su singola pagina) o in sigla SPA si intende una applicazione web o un sito web che può essere usato o consultato su una singola pagina web con l’obiettivo di fornire una esperienza utente più fluida e simile alle applicazioni Desktop dei sistemi operativi tradizionali. In un’applicazione su singola pagina tutto il codice necessario (HTML, JavScript e CSS) è recuperato in un singolo caricamento della pagina o le risorse appropriate sono caricate dinamicamente e aggiunte alla pagina quando necessario, di solito in risposta ad azioni dell’utente. La pagina non si ricarica in nessun punto del processo, né lascia il controllo in un’altra pagina, sebbene moderne tecnologie web (come la API pushState() di HTML5 può fornire la percezione e la navigabilità in pagine logiche separate nell’applicazione). L’interazione con una applicazione a singola pagina spesso coinvolge una comunicazione dinamica con il web server.&lt;/p&gt;</description></item><item><title>Documentazione</title><link>https://www.genropy.org/documentazione/</link><pubDate>Fri, 10 Jul 2020 15:23:25 +0000</pubDate><guid>https://www.genropy.org/documentazione/</guid><description>&lt;h3 class="text-center" id="-guida-allinstallazione"&gt;# GUIDA ALL’INSTALLAZIONE&lt;/h3&gt;
&lt;p class="text-center"&gt;Procedura guidata per installare e configurare Genropy come ambiente di sviluppo e in produzione su diversi sistemi operativi.&lt;/p&gt;
&lt;div class="gnr-btn-wrap"&gt;&lt;a class="btn gnr-btn" href="https://docs.genropy.org/installation_guide/index.html" target="_blank" rel="noopener" title="GUIDA ALL&amp;#39;INSTALLAZIONE"&gt;GUIDA ALL&amp;#39;INSTALLAZIONE &lt;i class="fas fa-book-open" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 class="text-center" id="-manuale-utente-genropy"&gt;# MANUALE UTENTE GENROPY&lt;/h3&gt;
&lt;p class="text-center"&gt;Questo manuale illustra il set delle più comuni funzionalità e caratteristiche di ogni applicativo realizzato con Genropy, in modo tale da costituire un primo strumento per l’apprendimento e l’utilizzo dello stesso.&lt;/p&gt;
&lt;div class="gnr-btn-wrap"&gt;&lt;a class="btn gnr-btn" href="https://docs.genropy.org/manuale_utente_genropy/index.html" target="_blank" rel="noopener" title="MANUALE UTENTE GENROPY"&gt;MANUALE UTENTE GENROPY &lt;i class="fas fa-book-open" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 class="text-center" id="-tutorial-creiamo-una-semplice-applicazione"&gt;# TUTORIAL: CREIAMO UNA SEMPLICE APPLICAZIONE&lt;/h3&gt;
&lt;p class="text-center"&gt;Con questo tutorial in 9 lezioni, composto da video, spiegazioni testuali e file sorgenti in download potrete realizzare una semplice applicazione di fatturazione.&lt;/p&gt;</description></item><item><title>Case History: ASP Enna - monitorare l'andamento del Covid-19 con Genropy</title><link>https://www.genropy.org/blog/case-history-asp-enna-monitorare-landamento-del-covid-19-con-genropy/</link><pubDate>Tue, 07 Jul 2020 09:53:00 +0000</pubDate><guid>https://www.genropy.org/blog/case-history-asp-enna-monitorare-landamento-del-covid-19-con-genropy/</guid><description>&lt;p&gt;Durante l&amp;rsquo;emergenza Covid-19 Luigi Renna, uno sviluppatore della community di Genropy, ha realizzato per la rilevazione dei casi di coronavirus nella provincia di Enna. È stato un lavoro &lt;strong&gt;messo su in pochi giorni&lt;/strong&gt; e che ha aiutato e tuttora aiuta a tenere sotto controllo i vari aspetti connessi alla gestione dell’emergenza, in modo da censire la popolazione, individuare malati e risultati dei vari test, catalogare i referti, ottenere dati statistici sull&amp;rsquo;andamento del contagio.&lt;/p&gt;</description></item><item><title>Come rappresentare i dati di un record in un blocco template</title><link>https://www.genropy.org/blog/come-rappresentare-i-dati-di-un-record-in-un-blocco-template/</link><pubDate>Wed, 17 Jun 2020 17:50:43 +0000</pubDate><guid>https://www.genropy.org/blog/come-rappresentare-i-dati-di-un-record-in-un-blocco-template/</guid><description>&lt;p&gt;Tipicamente nel nostro applicativo realizzato in Genropy i dati del singolo record vengono visualizzati nella &lt;strong&gt;Form&lt;/strong&gt;, interfaccia al contempo di visualizzazione e di modifica del record prodotta molto velocemente dal &lt;a href="https://docs.genropy.org/tablehandler/index.html" target="_blank" rel="noreferrer noopener"&gt;Tablehandler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In alcuni casi però potrebbe essere preferibile prevedere solo dei &amp;ldquo;blocchetti template&amp;rdquo; contenenti i dati di un record in sola lettura, quindi senza possibilità di modificarli, per esempio per mostrare nella pagina di una fattura un&amp;rsquo;&lt;strong&gt;area di&lt;/strong&gt; &lt;strong&gt;intestazione&lt;/strong&gt; che riporti i &lt;strong&gt;dati del cliente&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Case History: Condominiopuntozero - Calcolare l'efficienza energetica dei condomini con Genropy</title><link>https://www.genropy.org/blog/case-historycondominiopuntozero-calcolare-lefficienza-energetica-dei-condomini-con-genropy/</link><pubDate>Wed, 10 Jun 2020 18:25:32 +0000</pubDate><guid>https://www.genropy.org/blog/case-historycondominiopuntozero-calcolare-lefficienza-energetica-dei-condomini-con-genropy/</guid><description>&lt;p&gt;Abbiamo da pochi giorni messo online un software realizzato in pochissime settimane per &lt;a href="https://www.condominiopuntozero.it/" target="_blank" rel="noreferrer noopener"&gt;Condominiopuntozero&lt;/a&gt;, una startup operante nel campo dell'efficienza energetica.&lt;/p&gt;
&lt;p&gt;Condominiopuntozero si propone come facilitatore nel campo dell&amp;rsquo;efficientamento energetico dei condomini e della conseguente rivalutazione patrimoniale, utilizzando la grande opportunità del &lt;strong&gt;DPCM 2020&lt;/strong&gt;  che mette a disposizione dei condomini italiani 2,000 mio € di risorse a fondo perduto per finanziare &lt;strong&gt;progetti di riqualificazione energetica e di miglioramento antisismico&lt;/strong&gt; , permettendo di ricuperare il 110% delle spese.&lt;/p&gt;</description></item><item><title>Come definire le queryBySample</title><link>https://www.genropy.org/blog/come-definire-le-querybysample-per-impostare-criteri-di-ricerca-predefiniti/</link><pubDate>Wed, 06 May 2020 18:34:51 +0000</pubDate><guid>https://www.genropy.org/blog/come-definire-le-querybysample-per-impostare-criteri-di-ricerca-predefiniti/</guid><description>&lt;p&gt;In questo tutorial proseguiremo con il miglioramento dell'applicativo che abbiamo generato automaticamente nella &lt;a href="https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/" target="_blank" rel="noreferrer noopener"&gt;Genropill 4: "Dal database alla web app in meno di 2 minuti"&lt;/a&gt; e che abbiamo cominciato a modificare nel &lt;a href="https://www.genropy.org/blog/definire-classi-view-e-form-diverse-in-base-alle-necessita/" target="_blank" rel="noreferrer noopener"&gt;Tutorial: "Definire classi view e form diverse in base alle necessità"&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Nel caso precedente avevamo creato classi &lt;strong&gt;View&lt;/strong&gt; e &lt;strong&gt;Form&lt;/strong&gt; differenti in base a differenti scenari d'uso. Tra le personalizzazioni effettuate avevamo visto velocemente l'uso del metodo &lt;strong&gt;&lt;em&gt;th_queryBySample&lt;/em&gt;&lt;/strong&gt;, per definire nella pagina uno strumento di &lt;strong&gt;ricerca più immediato&lt;/strong&gt; e semplice per l'utente finale.&lt;/p&gt;</description></item><item><title>Da file excel al web app in meno di 3 minuti</title><link>https://www.genropy.org/blog/da-file-excel-al-web-app-in-meno-di-3-minuti/</link><pubDate>Wed, 22 Apr 2020 10:52:24 +0000</pubDate><guid>https://www.genropy.org/blog/da-file-excel-al-web-app-in-meno-di-3-minuti/</guid><description>&lt;p&gt;Come abbiamo visto al &lt;a href="https://www.genropy.org/blog/genropy-day-2019-il-racconto-della-giornata/" target="_blank" rel="noreferrer noopener"&gt;Genropy Day&lt;/a&gt; e nella nostra precedente &lt;a href="https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/" target="_blank" rel="noreferrer noopener"&gt;Genropill 4: "Dal database alla web app in meno di 2 minuti"&lt;/a&gt;, &lt;strong&gt;Genropy&lt;/strong&gt; mette a disposizione il &lt;strong&gt;Package Editor&lt;/strong&gt;, uno strumento per creare rapidamente &lt;em&gt;progetti&lt;/em&gt;, &lt;em&gt;istanze&lt;/em&gt; e &lt;em&gt;pacchetti&lt;/em&gt; direttamente da interfaccia grafica. Lo stesso strumento che abbiamo già utilizzato per costruire una web app a partire da un database sql può essere usato anche per &lt;strong&gt;costruire automaticamente un'applicazione completa&lt;/strong&gt; &lt;strong&gt;a partire da un file excel&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Definire classi view e form diverse in base alle necessità</title><link>https://www.genropy.org/blog/definire-classi-view-e-form-diverse-in-base-alle-necessita/</link><pubDate>Wed, 22 Apr 2020 10:49:54 +0000</pubDate><guid>https://www.genropy.org/blog/definire-classi-view-e-form-diverse-in-base-alle-necessita/</guid><description>&lt;p&gt;Un tipo di pagina molto usata in Genropy è la &lt;strong&gt;&lt;em&gt;thpage&lt;/em&gt;&lt;/strong&gt;, ovvero una pagina che è quasi interamente costituita da un &lt;em&gt;tableHandler &lt;/em&gt;con l'aggiunta di qualche strumento avanzato in più. Nella sua configurazione di default si tratta di uno &lt;em&gt;stackTableHandler&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Lo &lt;strong&gt;&lt;em&gt;stackTableHandler &lt;/em&gt;è un component Genropy che si basa sull'idea di due fogli sovrapposti (&lt;em&gt;stack&lt;/em&gt;).&lt;/strong&gt; Il primo foglio permette di visualizzare i dati di una table di database in una griglia, mentre il secondo contiene la form relativa ad un singolo record.&lt;/p&gt;</description></item><item><title>Come effettuare Dump e Restore del database di applicazione</title><link>https://www.genropy.org/blog/come-effettuare-dump-e-restore-del-database-di-applicazione/</link><pubDate>Thu, 02 Apr 2020 12:17:58 +0000</pubDate><guid>https://www.genropy.org/blog/come-effettuare-dump-e-restore-del-database-di-applicazione/</guid><description>&lt;p&gt;Quando si lavora alla realizzazione e manutenzione di una web application è spesso necessario&lt;strong&gt; migrare velocemente il database da un'installazione ad un'altra,&lt;/strong&gt; tipicamente dalla versione in produzione all'ambiente di sviluppo/test.&lt;/p&gt;
&lt;p&gt;Ci troviamo quindi di fronte ad operazioni di &lt;em&gt;dump&lt;/em&gt; e &lt;em&gt;restore&lt;/em&gt; di un database per le quali in Genropy mette a disposizione degli strumenti che rendendono la procedura più pratica e immediata. Questi strumenti sono ottimizzati per applicazioni con database &lt;strong&gt;PostgreSQL.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Come realizzare documentazione con Genropy</title><link>https://www.genropy.org/blog/come-realizzare-documentazione-con-genropy/</link><pubDate>Mon, 16 Mar 2020 14:25:23 +0000</pubDate><guid>https://www.genropy.org/blog/come-realizzare-documentazione-con-genropy/</guid><description>&lt;p&gt;Nel nostro lavoro ci può capitare di dover redigere una documentazione di tipo tecnico, come ad esempio un manuale utente relativo a un applicativo che abbiamo realizzato, oppure semplicemente un qualunque materiale informativo articolandone il contenuto in modo gerarchico, con link, immagini, frammenti di codice, video o documenti allegati.&lt;/p&gt;
&lt;p&gt;La soluzione tipica è la realizzazione di un manuale composto da file organizzati in directory su disco. Questa soluzione può però apparire limitata nella funzionalità e laboriosa da aggiornare e modificare. Genropy ed &lt;a href="https://www.erpy.it" target="_blank" rel="noreferrer noopener" aria-label=" (si apre in una nuova scheda)"&gt;Erpy&lt;/a&gt;, l'ERP italiano realizzato con Genropy, utilizzano invece l'approccio basato su una web application realizzata in Genropy in cui ogni voce è un record di una&lt;em&gt; table gerarchica &lt;/em&gt;contenuta su un database in cloud.&lt;/p&gt;</description></item><item><title>Trucchi utili per lavorare con Genropy</title><link>https://www.genropy.org/blog/risorse-utili-per-lavorare-con-genropy/</link><pubDate>Mon, 10 Feb 2020 15:09:44 +0000</pubDate><guid>https://www.genropy.org/blog/risorse-utili-per-lavorare-con-genropy/</guid><description>&lt;p&gt;Genropy &amp;ldquo;fresco&amp;rdquo; di installazione è già di per sé uno strumento estremamente potente, ma con alcuni accorgimenti possiamo renderci la vita ancora più facile e, perché no, anche più accattivante dal punto di vista grafico&amp;hellip;&lt;/p&gt;
&lt;p&gt;Il video ci mostra l&amp;rsquo;utilizzo di alcune risorse utili per lavorare con Genropy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tema grafico &amp;ldquo;mimi&amp;rdquo;&lt;/li&gt;
&lt;li&gt;configurare il sistema per postgreSQL&lt;/li&gt;
&lt;li&gt;risorse per la stampa in pdf&lt;/li&gt;
&lt;li&gt;plugin VSCode&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="height:21px" aria-hidden="true" class="wp-block-spacer"&gt;&lt;/div&gt;
&lt;div class="video-embed" style="position:relative;width:100%;padding-top:56.25%;"&gt;
 &lt;iframe src="https://video.softwell.it/source/vimeo/388011482/embed" title="vimeo-video"
 style="position:absolute;top:0;left:0;width:100%;height:100%;"
 frameborder="0" loading="lazy"
 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen"
 allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p class="has-text-align-left"&gt;&lt;em&gt;Per attivare i sottotitoli premere il bottone CC&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Genropy al PyConXI: Save the date!</title><link>https://www.genropy.org/blog/pycon-xi/</link><pubDate>Wed, 29 Jan 2020 14:26:49 +0000</pubDate><guid>https://www.genropy.org/blog/pycon-xi/</guid><description>&lt;h3 id="firenze-2---5-aprile-2020"&gt;Firenze, 2 - 5 Aprile 2020&lt;/h3&gt;
&lt;p&gt;Anche quest’anno saremo presenti al &lt;strong&gt;&lt;a rel="noreferrer noopener" aria-label="PyCon (si apre in una nuova scheda)" href="https://pycon.it/it/" target="_blank"&gt;PyCon&lt;/a&gt;&lt;/strong&gt;, la conferenza nazionale organizzata dall’&lt;a href="https://www.facebook.com/groups/python.it/" target="_blank" rel="noreferrer noopener" aria-label="associazione Python Italia (si apre in una nuova scheda)"&gt;associazione Python Italia&lt;/a&gt; che raccoglie professionisti, ricercatori e appassionati dell’universo Python, ormai giunta alla sua 11° edizione.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Siamo fieri di partecipare in qualità di &lt;strong&gt;sponsor Gold&lt;/strong&gt; a questa conferenza di crescente importanza, che è ormai diventata uno degli eventi più importanti del settore e più attesi dell’anno.&lt;/p&gt;</description></item><item><title>Genropy: video tutorial per l'installazione</title><link>https://www.genropy.org/blog/genropy-video-tutorial-per-linstallazione/</link><pubDate>Thu, 23 Jan 2020 18:38:36 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-video-tutorial-per-linstallazione/</guid><description>&lt;p&gt;L&amp;rsquo;installazione è ovviamente il primo passo per poter entrare nel mondo di Genropy e cominciare a costruire le proprie applicazioni web.&lt;/p&gt;
&lt;p&gt;L'installazione, per un utente che ha già installati i prerequisiti del framework è di norma molto semplice e richiede solo pochi minuti. D'altra parte ci rendiamo conto che per chi non è ancora abituato a lavorare con strumenti &lt;strong&gt;open source &lt;/strong&gt;può richiedere alcuni passaggi tecnici non banali. Per questo motivo, al fine di rendere Genropy il più possibile fruibile a tutti, abbiamo deciso di affiancare alla nostra &lt;a rel="noreferrer noopener" aria-label="Guida all'Installazione (si apre in una nuova scheda)" href="https://docs.genropy.org/installation_guide/framework_installation.html" target="_blank"&gt;Guida all'installazione&lt;/a&gt; anche due video tutorial: uno per l'installazione in ambiente Mac, l'altro in ambiente Windows. Nelle descrizioni dei video troverete un elenco dei passaggi richiesti.&lt;/p&gt;</description></item><item><title>Come creare rapidamente una stampa unione</title><link>https://www.genropy.org/blog/come-creare-una-stampa-unione/</link><pubDate>Tue, 24 Dec 2019 15:28:48 +0000</pubDate><guid>https://www.genropy.org/blog/come-creare-una-stampa-unione/</guid><description>&lt;p&gt;È Natale, e come ogni festività ci si appresta a mandare un messaggio personalizzato per i propri clienti, fornitori o ad altri soggetti presenti nel nostro database. La funzione che in ogni programma, da Microsoft Office Word a sistemi gestionali più complessi, consente di creare stampe che vengono personalizzate per ogni record, si chiama &lt;strong&gt;&amp;ldquo;Stampa Unione&amp;rdquo;&lt;/strong&gt; , e può essere definita su qualunque tipo di tabella, anche non anagrafica. Il risultato può poi essere stampato o inviato direttamente via e-mail.&lt;/p&gt;</description></item><item><title>Creare rapidamente una carta intestata</title><link>https://www.genropy.org/blog/creare-rapidamente-una-carta-intestata/</link><pubDate>Thu, 12 Dec 2019 12:00:02 +0000</pubDate><guid>https://www.genropy.org/blog/creare-rapidamente-una-carta-intestata/</guid><description>&lt;p&gt;Come abbiamo già detto nel precedente articolo, le stampe sono un aspetto ritenuto molto importante dai clienti e utenti di un applicativo gestionale. In questo ambito, è generalmente molto gradita la possibilità di creare modelli di carta intestata personalizzati, che contengano quindi il logo, l&amp;rsquo;indirizzo dell&amp;rsquo;azienda ed eventuali altri dati integrativi.&lt;/p&gt;
&lt;p&gt;Le applicazioni realizzate con &lt;strong&gt;Genropy&lt;/strong&gt; prevedono un apposito editor grafico per realizzare in pochi minuti delle carte intestata personalizzate da poter poi utilizzare in ogni tipo di stampa.&lt;/p&gt;</description></item><item><title>Case History: BauApp - Come aiutare i cani con Genropy</title><link>https://www.genropy.org/blog/case-history-bauapp-come-aiutare-i-cani-con-genropy/</link><pubDate>Mon, 09 Dec 2019 13:08:17 +0000</pubDate><guid>https://www.genropy.org/blog/case-history-bauapp-come-aiutare-i-cani-con-genropy/</guid><description>&lt;p&gt;Sin dalla sua prima edizione nel 2007, il team Genropy partecipa e sponsorizza&lt;strong&gt; &lt;/strong&gt;&lt;a href="https://pycon.it/it/"&gt;PyCon Italia&lt;/a&gt;, una dedicata al linguaggio Python, che si tiene ogni anno a Firenze. Questo è uno degli appuntamenti del settore più importante ed apprezzato in Europa e nel mondo.&lt;/p&gt;
&lt;p&gt;A maggio di quest&amp;rsquo;anno, durante &lt;strong&gt;Pycon X&lt;/strong&gt; , Francesco Porcari, uno dei core developer di Gernopy, ha avuto il piacere di presentare un&amp;rsquo; applicazione per un&amp;rsquo;associazione no-profit, da lui interamente realizzata come &lt;em&gt;pet-project&lt;/em&gt; nel suo tempo libero.&lt;/p&gt;</description></item><item><title>Come generare rapidamente delle stampe personalizzate</title><link>https://www.genropy.org/blog/come-generare-rapidamente-delle-stampe-personalizzate/</link><pubDate>Mon, 02 Dec 2019 12:02:52 +0000</pubDate><guid>https://www.genropy.org/blog/come-generare-rapidamente-delle-stampe-personalizzate/</guid><description>&lt;p&gt;Nell&amp;rsquo;utilizzo di un gestionale aziendale capita molto spesso di dover &lt;strong&gt;generare delle stampe dati&lt;/strong&gt; : le fatture del mese corrente o dell&amp;rsquo;anno in corso, gli ordini del giorno, gli appuntamenti settimanali di un agente, le anagrafiche dei clienti o dei fornitori&amp;hellip;&lt;/p&gt;
&lt;p&gt;Questo processo in Genropy può essere gestito agevolmente dal &lt;strong&gt;Print Editor&lt;/strong&gt;, uno strumento che permette di &lt;strong&gt;configurare e stampare&lt;/strong&gt; qualunque griglia di dati o tabella di dati direttamente &lt;strong&gt;a video &lt;/strong&gt;definendone i parametri principali, quali:&lt;/p&gt;</description></item><item><title>LearnGenropy: impariamo Genropy</title><link>https://www.genropy.org/blog/learngenropy-impariamo-genropy/</link><pubDate>Mon, 25 Nov 2019 15:00:37 +0000</pubDate><guid>https://www.genropy.org/blog/learngenropy-impariamo-genropy/</guid><description>&lt;p&gt;Durante il &lt;a href="https://www.genropy.org/blog/genropy-day-2019-il-racconto-della-giornata/" target="_blank" rel="noreferrer noopener"&gt;Genropy Day,&lt;/a&gt; dal confronto con i partecipanti, è emersa l’idea di &lt;strong&gt;scrivere un’applicazione tutti insieme&lt;/strong&gt; per capire meglio come procedere nell’analisi e come realizzare da zero un’applicazione. Restava solo da decidere cosa scrivere e abbiamo deciso che la cosa che più ci poteva servire era proprio un'applicazione destinata all'apprendimento di Genropy stesso. Insomma un &lt;strong&gt;corso di Genropy&lt;/strong&gt; scritto in Genropy.&lt;/p&gt;
&lt;p&gt;Descriviamo quindi brevemente cosa andremo a realizzare: partiremo dalla creazione di una &lt;strong&gt;tabella studente&lt;/strong&gt; e poi creeremo una tabella di unità didattiche ovvero &lt;strong&gt;piccole lezioni che possono essere svolte in autonomia&lt;/strong&gt; e che propongono alla fine delle domande per un&amp;rsquo;autovalutazione del livello di comprensione.&lt;/p&gt;</description></item><item><title>Dal database alla web app in meno di 2 minuti</title><link>https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/</link><pubDate>Thu, 21 Nov 2019 17:11:31 +0000</pubDate><guid>https://www.genropy.org/blog/dal-database-alla-web-app-in-meno-di-2-minuti/</guid><description>&lt;p&gt;Può capitare di voler &lt;strong&gt;trasformare delle vecchie &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;database application&lt;/strong&gt;,&lt;/em&gt; realizzate con tecnologie desktop in una più moderna applicazione web. Questo è un compito molto complesso e laborioso sul quale il nostro framework può fornire un potente aiuto.&lt;/p&gt;
&lt;p&gt;Come abbiamo visto al &lt;a href="https://www.genropy.org/blog/genropy-day-2019-il-racconto-della-giornata/" target="_blank" rel="noreferrer noopener"&gt;Genropy Day&lt;/a&gt; per casi del genere &lt;strong&gt;Genropy&lt;/strong&gt; mette a disposizione il &lt;strong&gt;Package Editor&lt;/strong&gt;, uno strumento per creare rapidamente &lt;em&gt;progetti&lt;/em&gt;, &lt;em&gt;istanze&lt;/em&gt; e &lt;em&gt;pacchetti&lt;/em&gt; direttamente da interfaccia grafica. Tra le sue funzionalità è offerta la possibilità di &lt;strong&gt;collegarsi ad un database esistente&lt;/strong&gt; (&lt;em&gt;posgreSQL, mySQL, MSSQL, SQLite&lt;/em&gt;) e partendo dalla sua struttura, &lt;strong&gt;costruire automaticamente un'applicazione completa&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Genropy Day 2019: il racconto della giornata</title><link>https://www.genropy.org/blog/genropy-day-2019-il-racconto-della-giornata/</link><pubDate>Tue, 19 Nov 2019 07:18:55 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-day-2019-il-racconto-della-giornata/</guid><description>&lt;p&gt;Si è da poco conclusa la seconda edizione del Genropy Day, una giornata che ha visto il nostro framework protagonista di molti importanti novità riguardanti il passaggio a Python 3 e alcune nuove funzionalità.&lt;/p&gt;
&lt;p&gt;Ma vediamo insieme queste novità&amp;hellip;&lt;/p&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img src="https://www.genropy.org/blog/genropy-day-2019-il-racconto-della-giornata/Genropy-Day-Programma-della-giornata.png" alt=""/&gt;&lt;figcaption&gt;Genropy Day: Il programma della giornata&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h3 id="genropy-ieri-oggi-e-domani"&gt;Genropy: ieri, oggi e domani&lt;/h3&gt;
&lt;p&gt;Nel discorso introduttivo il founder Giovanni Porcari ha illustrato perché &lt;strong&gt;Genropy&lt;/strong&gt; può essere una scelta strategica per gli sviluppatori gestionali. Infatti infatti &lt;strong&gt;Genropy&lt;/strong&gt; è nato e si è evoluto con lo scopo di rendere possibile e semplice la trasposizione in ambito web di applicativi legacy, realizzati in tecnologie desktop senza perdita di funzionalità. Inoltre Genropy è un &lt;strong&gt;progetto open source&lt;/strong&gt; , basato su tecnologie a loro volta open source: ulteriore elemento di garanzia per sviluppatori e clienti finali. &lt;strong&gt;Genropy&lt;/strong&gt; ha dunque una vocazione gestionale, aperta e &lt;strong&gt;collaborativa&lt;/strong&gt; : infatti ogni pacchetto realizzato da terze parti può essere integrato nel proprio progetto e personalizzato facilmente.&lt;/p&gt;</description></item><item><title>Genropy Day 2019: parliamo di Genropy</title><link>https://www.genropy.org/blog/genropy-day-2019/</link><pubDate>Fri, 25 Oct 2019 11:25:12 +0000</pubDate><guid>https://www.genropy.org/blog/genropy-day-2019/</guid><description>&lt;h4 class="has-text-align-center"&gt;Scopri il &lt;a href="https://www.genropy.org/blog/genropy-day-2019/#programma"&gt;Programma&lt;/a&gt; completo della giornata.&lt;/h4&gt;
&lt;hr&gt;
&lt;p&gt;A meno di un mese da &lt;a href="https://www.genropy.org/blog/dive-into-genropy/" target="_blank" rel="noreferrer noopener"&gt;Dive into Genropy&lt;/a&gt;, una giornata full immersion per chi si approcciava per la prima volta al framework, torniamo a incontrare sviluppatori, appassionati e curiosi in occasione della &lt;strong&gt;seconda edizione del Genropy Day.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vuoi sapere com'è andata a &lt;a href="https://www.genropy.org/blog/dive-into-genropy/" target="_blank" rel="noreferrer noopener"&gt;Dive into Genropy&lt;/a&gt;? Cliccando sul link trovi un'articolo che raccoglie risorse utili e un'analisi della giornata...&lt;/p&gt;
&lt;div style="height:30px" aria-hidden="true" class="wp-block-spacer"&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;h4 class="has-text-align-center"&gt;Il Genropy Day si terrà a Milano presso &lt;a rel="noreferrer noopener" href="https://www.mikamai.com/" target="_blank"&gt;Mikamai&lt;/a&gt; (via Venini 42, zona Stazione Centrale) &lt;strong&gt;sabato 9 novembre 2019 dalle ore 9.30 alle 16.30&lt;/strong&gt;.&lt;/h4&gt;
&lt;div style="height:30px" aria-hidden="true" class="wp-block-spacer"&gt;&lt;/div&gt;
&lt;p class="has-text-align-center"&gt;📍 &lt;a href="https://www.google.com/maps/search/?api=1&amp;query=Mikamai%2C%20Via%20Venini%2042%2C%20Milano" target="_blank" rel="noreferrer noopener"&gt;Visualizza la sede su Google Maps&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Dive into Genropy: il racconto della giornata</title><link>https://www.genropy.org/blog/dive-into-genropy/</link><pubDate>Fri, 25 Oct 2019 10:11:18 +0000</pubDate><guid>https://www.genropy.org/blog/dive-into-genropy/</guid><description>&lt;p&gt;La prima edizione dell&amp;rsquo;evento &lt;strong&gt;Dive into Genropy&lt;/strong&gt; si è da poco conclusa, lasciandoci carichi dell&amp;rsquo;entusiasmo manifestato dai partecipanti.&lt;/p&gt;
&lt;p&gt;Vogliamo con questo articolo ripercorrere la scaletta della giornata così da soddisfare la curiosità di chi non c'era, e permettere ai partecipanti un pro-memoria per approfondire ulteriormente gli argomenti affrontati in vista del &lt;strong&gt;&lt;a href="https://www.genropy.org/blog/genropy-day-2019/" target="_blank" rel="noreferrer noopener"&gt;Genropy Day&lt;/a&gt;&lt;/strong&gt;, il prossimo evento che organizzeremo il 9 Novembre a Milano.&lt;/p&gt;
&lt;p&gt;La giornata, organizzata in collaborazione con l'Associazione &lt;a rel="noreferrer noopener" aria-label="Python Milano (si apre in una nuova scheda)" href="http://milano.python.it" target="_blank"&gt;Python Milano&lt;/a&gt; presso &lt;a href="https://www.mikamai.com/"&gt;Mikamai&lt;/a&gt;, ha permesso ai core developer del progetto di presentare con un certo grado di approfondimento svariati aspetti del &lt;strong&gt;framework&lt;/strong&gt;. Particolare attenzione è stata rivolta all'aspetto didattico, al fine di rendere l'evento il più possibile fruibile ai partecipanti anche "non pythonisti".&lt;/p&gt;</description></item><item><title>Dive into Genropy: cosa dovrei sapere prima di tuffarmi</title><link>https://www.genropy.org/blog/dive-into-genropy-cosa-dovrei-sapere-prima-di-tuffarmi/</link><pubDate>Wed, 09 Oct 2019 16:30:18 +0000</pubDate><guid>https://www.genropy.org/blog/dive-into-genropy-cosa-dovrei-sapere-prima-di-tuffarmi/</guid><description>&lt;h4 id="perché-genropy"&gt;Perché Genropy?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Genropy&lt;/strong&gt; nasce nel 2004, dall’idea di un team di Sviluppatori di Software gestionali che, avendo intuito le enormi potenzialità del mercato &lt;em&gt;Web Application&lt;/em&gt; , ha deciso di portare in questo ambiente le proprie applicazioni.&lt;/p&gt;
&lt;p&gt;Grazie alla sempre maggiore affidabilità di strumenti&lt;em&gt; Open Source&lt;/em&gt; come &lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;PostgreSQL&lt;/strong&gt; e &lt;strong&gt;Javascript&lt;/strong&gt; erano già disponibili ottimi strumenti di base, ma non esisteva ancora nulla che consentisse di creare in modo semplice e rapido le applicazioni web complesse e con GUI paragonabili a quelle di un software &lt;em&gt;desktop&lt;/em&gt;.&lt;br&gt;La necessità era quindi quella di creare una nuova piattaforma per la creazione rapida di applicativi professionali su misura, che facilitasse l’approccio&lt;em&gt; full stack&lt;/em&gt; grazie alla totale integrazione che esiste tra la parte di sviluppo &lt;em&gt;back-end&lt;/em&gt; e quella &lt;em&gt;front-end&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Assaggi di Genropy</title><link>https://www.genropy.org/blog/assaggi-di-genropy/</link><pubDate>Thu, 01 Aug 2019 14:28:59 +0000</pubDate><guid>https://www.genropy.org/blog/assaggi-di-genropy/</guid><description>&lt;p&gt;Questo è il primo di una serie di post che avranno lo scopo di illustrare attraverso dei semplici esempi pratici alcuni concetti fondamentali dello sviluppo con Genropy. Tutti questi articoli includeranno codice sorgente e la parte di pagina viva corrispondente: puoi passare dalla visualizzazione del codice e della pagina usando gli appositi bottoni &lt;strong&gt;SOURCE&lt;/strong&gt; e &lt;strong&gt;DEMO&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In questo primo assaggio realizzerò la schermata iniziale di un ipotetico gioco in cui i giocatori dovranno inserire il proprio nome e scegliere il loro colore preferito. Con questo esempio voglio spiegare i seguenti concetti:&lt;/p&gt;</description></item><item><title>Come creare velocemente report su dati aggregati</title><link>https://www.genropy.org/blog/come-creare-velocemente-report-su-dati-aggregati/</link><pubDate>Wed, 10 Jul 2019 11:32:11 +0000</pubDate><guid>https://www.genropy.org/blog/come-creare-velocemente-report-su-dati-aggregati/</guid><description>&lt;p&gt;Quando si desidera effettuare un&amp;rsquo;&lt;strong&gt;analisi su dati aggregati&lt;/strong&gt; , l&amp;rsquo;operazione che l&amp;rsquo;utente finale di solito svolge è esportare le selezioni su un foglio elettronico per elaborarli in una seconda fase, effettuando così molti passaggi; oppure richiede allo sviluppatore di creare un report personalizzato in base alle sue necessità.&lt;/p&gt;
&lt;p&gt;Con &lt;strong&gt;Genropy&lt;/strong&gt;, invece, l’utente potrà creare &lt;strong&gt;viste di dati aggregati con diversi livelli di raggruppamento e totalizzazione degli importi numerici. &lt;/strong&gt;Lo strumento offre la possibilità di decidere quali siano le colonne di raggruppamento, semplicemente trascinandole dall'&lt;em&gt;editor della vista. &lt;/em&gt;&lt;br&gt;Lo strumento inoltre offre diverse &lt;strong&gt;modalità di visualizzazione&lt;/strong&gt;, ovvero:&lt;br&gt;&lt;/p&gt;</description></item><item><title>Come fare una query su una table in Genropy</title><link>https://www.genropy.org/blog/come-creare-e-salvare-una-query-in-un-attimo/</link><pubDate>Fri, 07 Jun 2019 12:32:51 +0000</pubDate><guid>https://www.genropy.org/blog/come-creare-e-salvare-una-query-in-un-attimo/</guid><description>&lt;p&gt;A volte capita di dover ricercare dei record da una tabella, utilizzando un criterio particolare che non era stato previsto dagli autori dell&amp;rsquo;applicativo.&lt;/p&gt;
&lt;p&gt;In&lt;strong&gt; Genropy&lt;/strong&gt; si può sempre offrire all'utente finale un modo &lt;strong&gt;semplice&lt;/strong&gt; e &lt;strong&gt;rapidissimo&lt;/strong&gt; per creare qualunque tipo di &lt;strong&gt;query&lt;/strong&gt; si desideri.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Entriamo nel dettaglio&lt;br&gt;&lt;/em&gt;&lt;br&gt;Normalmente le pagine che gestiscono tabelle di database, presentano strumenti di interrogazione piuttosto elementari e poco flessibili. Di solito è possibile porre semplici condizioni sui campi più significativi: ad esempio&lt;em&gt; &lt;/em&gt;la&lt;em&gt; ragione sociale&lt;/em&gt; per una&lt;em&gt; tabella anagrafica&lt;/em&gt;, oppure il campo &lt;em&gt;data&lt;/em&gt; per una&lt;em&gt; tabella di operazione &lt;/em&gt;o un &lt;em&gt;codice progressivo&lt;/em&gt; sulla &lt;em&gt;tabella prodotto&lt;/em&gt;. &lt;/p&gt;</description></item><item><title>OUT OF THE BOX</title><link>https://www.genropy.org/blog/out-of-the-box/</link><pubDate>Fri, 10 May 2019 17:09:28 +0000</pubDate><guid>https://www.genropy.org/blog/out-of-the-box/</guid><description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Quando nel 2006 abbiamo deciso di portare le nostre applicazioni in ambito web ci siamo resi conto che non esisteva nulla di idoneo a fornire nel browser la stessa esperienza d&amp;rsquo;uso e la stessa interattività cui erano abituati i nostri utenti nelle loro applicazioni desktop.&lt;/p&gt;
&lt;p&gt;Non trovando nulla di pronto abbiamo dovuto pensare a come ottenere un framework web che fosse facile da usare e in grado di produrre in tempi rapidi applicazioni complesse, manutenibili, personalizzabili e che dessero agli utenti la stessa esperienza d&amp;rsquo;uso cui erano abituati.&lt;/p&gt;</description></item><item><title>Come personalizzare le viste su una tabella in un attimo</title><link>https://www.genropy.org/blog/come-personalizzare-le-viste-su-una-tabella-in-un-attimo/</link><pubDate>Wed, 08 May 2019 09:00:09 +0000</pubDate><guid>https://www.genropy.org/blog/come-personalizzare-le-viste-su-una-tabella-in-un-attimo/</guid><description>&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Quante volte, nella vista di una tabella, manca proprio la colonna di cui avevamo bisogno?&lt;/p&gt;
&lt;p&gt;Grazie a &lt;strong&gt;&lt;em&gt;Genropy &lt;/em&gt;&lt;/strong&gt;ogni griglia può essere &lt;em&gt;personalizzata in pochi secondi &lt;/em&gt;direttamente da &lt;strong&gt;interfaccia utente&lt;/strong&gt;. Semplice a dirsi, ma vediamo come.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Supponiamo di dover esportare dalla&lt;em&gt; tabella Clienti &lt;/em&gt;un foglio di calcolo che riporti i seguiti campi:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ragione sociale, Provincia, Email, Tipo Cliente, Tipo Pagamento, Numero di Fatture, Totale fatturato. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Genropy ti permette di modificare le colonne di una griglia in pochi attimi. Basterà aprire&lt;strong&gt; il cassetto laterale di configurazione&lt;/strong&gt; per entrare in modalità modifica ed aggiungere colonne o rimuovere quelle che non ci servono. Infine si potrà salvare la nuova vista per utilizzi futuri.&lt;/p&gt;</description></item><item><title>Tutti al PyCon!</title><link>https://www.genropy.org/blog/tutti-al-pycon/</link><pubDate>Mon, 15 Apr 2019 16:11:45 +0000</pubDate><guid>https://www.genropy.org/blog/tutti-al-pycon/</guid><description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Anche quest'anno saremo presenti al&lt;strong&gt; PyCon Italia, &lt;/strong&gt; la conferenza nazionale che raccoglie professionisti, ricercatori e appassionati dell'universo Python.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Siamo orgogliosi di partecipare ed essere &lt;strong&gt;sponsor silver&lt;/strong&gt; della 10° edizione di uno degli eventi più importanti del nostro settore.&lt;/p&gt;
&lt;p&gt;Ci vediamo nella bellissima Firenze, dal 2 al 5 Maggio, per raccontarvi tutte le potenzialità e i vantaggi dell'utilizzo del nostro &lt;em&gt;framework &lt;strong&gt;Genropy&lt;/strong&gt;; v&lt;/em&gt;antaggi che offre sia a &lt;em&gt;sviluppatori &lt;/em&gt;che desiderino realizzare &lt;strong&gt;applicativi web&lt;/strong&gt;, programmando in&amp;nbsp;&lt;strong&gt;Python, &lt;/strong&gt;sia all'&lt;em&gt;utente finale&lt;/em&gt;. &lt;/p&gt;</description></item></channel></rss>