Evgeny Shvarov · Jun 24, 2025 go to post

Just've published the shvarov-persistent package once installed by
USER>zpm "install shvarov-persistent"

will add shvarov.persistent.base class which can be used as an ancestor after %Persistent, like:

Class yourclass Extends (%Persistent, shvarov.persistent.base)

, which will add two properties:

Property CreatedAt As %TimeStamp [ InitialExpression = {$ZDT($H, 3)} ];

Property LastUpdate As %TimeStamp [ SqlComputeCode = {set {*}=$ZDATETIME($HOROLOG,3)}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ];
Evgeny Shvarov · Jun 24, 2025 go to post

Hi @Luis Petkovicz!

Consider to try csvgen also?

it will be:

USER>zpm "install csvgen"

to install the package, and here is the usage:

USER>do ##class(community.csvgen).Generate("/folder/filename.csv")

to generate class and import the data into it from an arbitrary csv.

 

Evgeny Shvarov · Jun 23, 2025 go to post

Also this could be a typical copy-paste for a REST API app created in a module.xml in a <module> section:

<CSPApplication 
        Url="/travel/api"
        PasswordAuthEnabled="0"
        UnauthenticatedEnabled="1"
        DispatchClass="shvarov.travel.disp"
        MatchRoles=":{$dbrole}"
        Recurse="1"
        UseCookies="2"
        CookiePath="/travel/api"
       />

where /travel/api is the app name, and shvarov.travel.disp - a generated class vs the swagger spec file and shvarov.travel.spec class.

Evgeny Shvarov · Jun 23, 2025 go to post

Another useful comment: while generating swagger spec ask GPT to provide meaningful OperationId for every endpoint, otherwise the generated impl class will come with generated names for implementation methods like that:

Evgeny Shvarov · Jun 23, 2025 go to post

I think it is a good use-case for embedded python. I asked gpt and it suggested the following python code:

from datetime import datetime
from zoneinfo import ZoneInfo

# Original string
input_str = "Thu Jul 03 08:20:00 CEST 2025"

# Strip the abbreviation since it's not useful for parsing
# Replace it with an IANA timezone
# Let's assume "CEST" corresponds to Europe/Paris
input_str_cleaned = input_str.replace("CEST", "").strip()

# Parse the datetime
dt_naive = datetime.strptime(input_str_cleaned, "%a %b %d %H:%M:%S %Y")

# Localize to the correct zone
dt_aware = dt_naive.replace(tzinfo=ZoneInfo("Europe/Paris"))

# Format in ISO format with UTC offset
print(dt_aware.isoformat())  # e.g., '2025-07-03T08:20:00+02:00'

Also it suggested to make a mapping for CEST/CET:

tz_abbreviation_map = {
    "CEST": "Europe/Paris",
    "CET": "Europe/Paris",
    "EDT": "America/New_York",
    "EST": "America/New_York",
    "PST": "America/Los_Angeles",
    # Add more mappings as needed
}
Evgeny Shvarov · Jun 20, 2025 go to post

Do we have any new options for collections in DDL? Something like:

CREATE TABLE Aricle (tags varchar50[])

?

Evgeny Shvarov · Jun 20, 2025 go to post

Hi @Phillip Wu !

Namespaces give flexibility and were introduced to make a lot of powerful things possible.

If you are confused with all this uncertainty and don't need flexibility for now you can create Namespace DEV that has only one database DEV for everything and you can think that you are working with database DEV only with no any confusion.

But you will sign in into Namespace DEV in your IRIS system as users log in into Namespaces in InterSystems IRIS.
 

Or, e.g., if you take any vanilla IRIS docker image and run it, it will have a USER namespace that provides access to the USER database, which is convenient to use for any dev experiments.

Evgeny Shvarov · Jun 20, 2025 go to post

Wow, I didn't know that! Is it working? Anyways, you first need to be logged into some IRIS Namespace.

Evgeny Shvarov · Jun 20, 2025 go to post

Ah, maybe VSCode-ObjectScript "thinks" that comments do not deserve to be recompiled? if you change anything in a "real code" space?

Evgeny Shvarov · Jun 8, 2025 go to post

Hi @Mark Charlton ! Yes, you can make other packages visible from your private registry so that packages from public registries can be available from a private one with white/black lists. Apologies for the late answer :)

Evgeny Shvarov · Jun 5, 2025 go to post

Thank you, @DC AI Bot  - but your answer is not super relevant to the situation. I really want to store the global name in a class parameter and don't see what is wrong here.

Evgeny Shvarov · Jun 4, 2025 go to post

It'd be great if we could alter the length of subscript per system. Sometimes the ability to momentarily get the value for a index of 1K+ values would be very benefitial

Evgeny Shvarov · May 18, 2025 go to post

Thank you, @Tani Frankel !

This is useful through years!

Just adding here the snippet to add role to a user:

ClassMethod AddRoleToUser(user = "CSPSystem", role = "DB_USER_Read") As %Status

{

// Change to the %SYS namespace.

new $NAMESPACE

set $NAMESPACE="%SYS"



set status=##class(Security.Users).Get(user, .MyUserProps)

set $p(MyUserProps("Roles"),",",*)=role

set status=##class(Security.Users).Modify(user,.MyUserProps)



// Announce success.

if $$$ISOK(status) {

write !, "Roles for the user "_user_" were successfully modified."

}

Quit status

}