MAINT: Epochs increment

This PR adds logic to correctly increment epochs when using partial fit. This will allow learning rate schedulers and other epoch dependent functionality to correctly track the epochs.

Codecov Report

Merging #114 into master will decrease coverage by 2.80%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master     #114      +/-   ##
==========================================
- Coverage   99.48%   96.67%   -2.81%
==========================================
  Files           5        4       -1
  Lines         577      572       -5
==========================================
- Hits          574      553      -21
- Misses          3       19      +16

Impacted Files
Coverage Δ

scikeras/wrappers.py
95.70% <100.00%> (-3.38%)
:arrow_down:

scikeras/_utils.py
95.68% <0.00%> (-4.32%)
:arrow_down:

scikeras/utils/transformers.py
100.00% <0.00%> (ø)

scikeras/__init__.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2e6e74d...7f93d3a. Read the comment docs.


Terrier pipeline add performance measure

@skyfishjy The only thing that I changed is line 376-386 in the Jenkinsfile

LGTM


startup performance: 200ms is too slow

Converting the word-list to a map: 80ms
Creating the strings.Replacer: 125ms
The first part is solved by generating the map in advance.
The second part is more problematic.   It would be nice just serializing the internal structure of replacer and then unmarshalling.  This would involve copying https://golang.org/src/strings/replace.go and modifying it so it can marshaled   Lots of pointers but I don't think circular ... just a tree.
2016/08/25 04:40:12 map: 79.952131ms
2016/08/25 04:40:12 replacer: 125.917169ms

Down to around 150ms.
By making the map init smarter.  Also makes runtime faster.

It's improved.. closing for now.


Non-nullable i18n instance

🚀 Feature Proposal
Add the ability to initialize the i18n instance manually. So you can easily call any method from i18n in the getServerSideProps lifecycle method.
Motivation
I have a use case where I want to dynamically add resource bundles by calling i18n.addResourceBundle method. However, on the initial render, the i18n instance isn't defined yet.
The example below demonstrates the current limitation because i18n might be null
export const getServerSideProps = async context => {
  i18n?.addResourceBundle('en', 'extras', { key: 'value' });
  return {
    props: {
      ...(await serverSideTranslations('en', ['common', 'extras'])), // extras weren't loaded when i18 is null
    },
  };
};

From your code, I can see i18n gets defined twice. First by appWithTranslation and createClient/node.ts
Example
This is my workaround:
// getI18nClient.ts
import { UserConfig } from 'next-i18next';
import { createConfig } from 'next-i18next/dist/commonjs/config/createConfig';
import createClient from 'next-i18next/dist/commonjs/createClient';
import { i18n as singletonI18n } from 'next-i18next';
import nextI18NextConfig from '../next-i18next.config';

// helper function to get around the nullable i18n limitation
export const getI18nClient = async (
  lng: string,
  userConfig: UserConfig = nextI18NextConfig,
): Promise<typeof singletonI18n> => {
  if (singletonI18n) {
    return singletonI18n;
  } else {
    const config = createConfig({
      ...userConfig,
      lng,
    });
    const { i18n, initPromise } = createClient({ ...config, lng });
    await initPromise;
    return i18n;
  }
};

// pages/index.tsx
export const getServerSideProps = async context => {
  const i18n = await getI18nClient(context.locale);
  i18n.addResourceBundle('en', 'extras', { key: 'value' });
  return {
    props: {
      ...(await serverSideTranslations('en', ['common', 'extras'])),
    },
  };
};

Another possible solution might be creating a wrapper around next.config.js file. Such as https://github.com/aralroca/next-translate#add-next-translate-plugin.
I'm happy to hear what you think of it. Cheers

The problem is, the i18next instance is not always the same and the initialization is asynchronous... and serverSideTranslations makes sure the correct language and namespaces are loaded...
Maybe alternatively there is the possibility to inject the onPreInitI18next option? => https://github.com/i18next/next-i18next/blob/master/src/createClient/node.ts#L37
https://github.com/i18next/next-i18next#options
I don't know if it makes sense to have a helper function (like your workaround) to be exposed as official api...


Addon: Selected text does not respect line padding

Any way to apply the selection style to a part of the line, but not to the text itself?
Expected result:

Current result:

Native selection works, but it selects the whole line:

You can use markText to style pieces of text. That's all this library supports.


Allow users to mark tests as pending and document method.

Said tests should not run, but should be reported in the output as pending.

I would say this out of scope for shouldi. Shouldi builds on top of exunit and you can achieve similar functionality with exunit tags.

After looking at some other projects I was under the impression that with ExUnit tests would be skipped if annotated with @tag :pending, but this doesn't seem to be the case for the should macro. Perhaps I'm doing something wrong here- I don't quite get tags yet.

The should macro expands to the test macro so tags work for both.


feat: add firebase functions

Adds firebase functions to the project and adds event write trigger function to create newsfeed

Wrong branch


do some options disable hardware acceleration?

I'm trying some animations using top and left properties and getting very chunky animations.
just animating three divs positions on a page for a background animation.
is there some catch to not using certain property names?
I also tried using transformX and Y but get similar results.
code below
animateDiv = (el) ->
  size = Math.round Math.random()*300

  newq = makeNewPosition(el,size)
  oldq = $(el).offset()

  distance = Math.sqrt((oldq.top - newq.top) * (oldq.top - newq.top) + (oldq.left - newq.left) * (oldq.left - newq.left))
  distance = Math.round distance

  duration = distance*10
  color = rgb2hex makeNewColor()

  $(el).velocity(
    {
      top: newq.top
      left: newq.left
      # translateY: newq.top
      # translateX: newq.left
      # backgroundColor: color
      # height:size
      # width:size
    },
    duration: duration
    easing: "easeinout"
    complete: ->
      console.log("new anim")
      animateDiv(el);
  );

Sorry, @dcsan your questions are not issues of Velocity, but rather questions for StackOverflow. Please close all your issues here and open questions on SO with the #velocity.js tag.


AnsweredBy property in a call

A bot redirects incoming call to  a group. How it will  know  the user who answered it?
What is the meaning of AnsweredBy property in the Call and how/when it  will be implemented?

The Call has an AnsweredBy property, but it is not yet supported in the case of Redirect/Transfer.
I don't know what the timeline is for activating this property, and what the behaviour would look like.
@VinodRavichandran FYI

The Call has an AnsweredBy property, but it is not yet supported in the case of Redirect/Transfer.
I don't know what the timeline is for activating this property, and what the behaviour would look like.
@VinodRavichandran FYI

Once I redirect call to multiple targets I get answered by property. How can I decrypt this? Basically I want to know who answered the call and transfer to different call leg.
	"answeredBy": {
		"identity": {
<EMAIL_ADDRESS>"microsoft.graph.identitySet",
			"encrypted": {
				"id": "1f206yb6r2m5spxcggpvhpilkz9gdepoopn7ti3hrcwhv9rgiweibditgea1w4it3p14dyrsuteeejgkonhkhdq",
<EMAIL_ADDRESS>"microsoft.graph.identity",
				"tenantId": "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
			}
		},
		"endpointType": "default",
		"region": "au",
		"languageId": "en-US",
<EMAIL_ADDRESS>"microsoft.graph.participantInfo"
	}

@stefan2410 Just wondering whether you found a solution to find answered user?


Upgrade RuboCop and extension

Upgrades RuboCop and its extensions, except rubocop-graphql

rubocop1.40.1 => 1.41.1
rubocop-performance 1.14.0 => 1.15.2
rubocop-rails 2.17.3 => 2.17.4

Fixes new offenses
Updates RuboCop todo file

There is no manual test.

Coverage: 92.514% (-0.0003%) from 92.514% when pulling 2c5d6f9a91d288bef0429241726383b963b5b5a1 on jdc-rubocop-1_41_1 into 1448dc3f4b947b4106bc7ca48948f3697aa7f6f1 on master.

@nimmo: I did not update rubocop-graphql.
(I didn't know if it would break things, and thought it would take me too long to resolve any issues.)
We are at rubocop-graphql (0.14.3), and the latest release is 0.18.0.
So it might make sense for you to upgrade.

This is a relatively simple update; all changes are straightforward. Note the use of:

compact to remove nil entries from collections;
pick over pluck(…).first;
index_with over more complicated methods.

I'll probably merge this soon unless there are comments.

@JoeCohen I wonder, does upgrading rubocop-graphql actually throw a lot of errors?
I kind of doubt it will.
Please do try it if you have time. I have my hands pretty crudified with controllers...

i’ll have a look in the next few days
El El lun, dic. 26, 2022 a la(s) 15:15, andrew nimmo <
@.***> escribió:

@JoeCohen https://github.com/JoeCohen I wonder, does upgrading
rubocop-graphql actually throw a lot of errors?
I kind of doubt it will.
Please do try it if you have time. I have my hands pretty crudified with
controllers...
—
Reply to this email directly, view it on GitHub
https://github.com/MushroomObserver/mushroom-observer/pull/1251#issuecomment-1365443947,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAALDFCVXYNUV2565W7LEKDWPH4ETANCNFSM6AAAAAATJHWDHU
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Sent from Gmail Mobile


CORE-44971 change the setConsent API & config

Description

Change the consent API and config as described In the jira issue.
Related Issue
https://jira.corp.adobe.com/browse/CORE-44971

Motivation and Context
We are trying to avoid making breaking changes after GA.  This new API will allow easier integration of new consent standards.

Screenshots (if appropriate):
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Improvement (non-breaking change which does not add functionality)
[x] Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

[x] I have signed the Adobe Open Source CLA or I'm an Adobe employee.
[x] I have made any necessary test changes and all tests pass.
[x] I have run the Sandbox successfully.

Hey @jonsnyder, the E2E tests are failing as expected, but I would hold off on changing them until I merge my PR to save you from all the merge conflicts.


[Draft] fix(search): bump @docsearch/js to 3.3 & add appId in config

Algolia docsearch has moved to new version and let admins directly edit the config via their web interface. So we need to update the docsearch version we are using to the latest stable one as well.

@ydcjeff thanks for the PR !
Concerning failing linkcheck, I fixed the one with news_commentary. Do you think we can do anything with https://towardsdatascience.com ? Can we setup the checker to ignore them ?

check-ipynb-to-md is expected to fail since it is blocked by https://github.com/pytorch-ignite/examples/pull/83

@vfdev-5 the submodule failure is fixed in this PR and netlify failure is not updated in the check although the site is built successfully. https://deploy-preview-159--pytorch-ignite.netlify.app/

@ydcjeff can we merge this PR ?

@vfdev-5 yes, it's ready.


Automate the package release

We want to automate releases of our package to pub.dev and make sure that anyone can make a new release.
We should create a new workflow for Github Actions that would check and build the project and publish it to the pub.dev.
You may check https://dart.dev/tools/pub/automated-publishing for more info.

We should also include FlutterFlow version automation.


Added a lot of information about context variables in reports

Nice work! Is this ready to be merged?

It does not yet contain ALL information that I want to gather but I marked those sections as TODO, so to me it's ready to be merged!

Thanks, any further contributions to the documentation  would be greatly welcomed


276 path has additional hash on reload

#276

:tada: This PR is included in version 2.2.1 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Link broken in heading

The link: https://dotnet-presentations.github.io/home/ in your heading is broken, I believe it is meant to be
: https://dotnet-presentations.github.io/ ?

https://presentations.dotnetfoundation.org/ its still broken i think it should be  https://dotnet-presentations.github.io/


Sticky Tab bar / Render on its own?

Hi,
I'm wondering if it's possible to create a sticky tab bar. So when I scroll the tabs stick to the top.
Alternatively, is there a way to render the tabbar on it's own? Then I could use react-natives stickyHeaderIndices on the scrollview around it.
Thanks!

I need the same thing and I don't think is possible.
Same issue is detailed here, also with a gif of desired result https://github.com/skv-headless/react-native-scrollable-tab-view/issues/385

You can just build the tab bar on your own and implement your own tab bar to make it sticky.
Here's a stripped down version what I did to get you started
const SCREEN_WIDTH = Dimensions.get('window').width;
const ONE_THIRD = Math.floor(SCREEN_WIDTH / 3);

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      scrollX: new Animated.Value(0),
    };
    this.goToPage = this.goToPage.bind(this);
  }

  goToPage(i) {
    this.tabView.goToPage(i);
  }

  render() {
    const tabPosition = this.state.scrollX.interpolate({
      inputRange: [0, 1, 2],
      outputRange: [0, ONE_THIRD, ONE_THIRD * 2],
      extrapolate: 'clamp',
      useNativeDriver: true,
    });

    return (
      <View>
        {/* custom tab bar */}
        <View style={styles.tabs}>
          <TouchableOpacity style={styles.tab} onPress={() => this.goToPage(0)}>
            <Text>Tab 1</Text>
          </TouchableOpacity>
          <TouchableOpacity style={styles.tab} onPress={() => this.goToPage(1)}>
            <Text>Tab 2</Text>
          </TouchableOpacity>
          <TouchableOpacity style={styles.tab} onPress={() => this.goToPage(2)}>
            <Text>Tab 3</Text>
          </TouchableOpacity>
        </View>
        <Animated.View style={{
          height: 6,
          width: ONE_THIRD,
          backgroundColor: 'blue',
          transform: [{ translateX: tabPosition }] }}
        />
        {/* scrollable tab view */}
        <ScrollableTabView
          onScroll={val => this.state.scrollX.setValue(val)}
          ref={tabView => { this.tabView = tabView; }}
          // just render whatever here
          renderTabBar={() => <View />}
        >
          ...
        </ScrollableTabView>
      </View>
    );
  }
}

@tibbus if I put the faltlist into the ScrollableTabView as child , its not work.


MouseWheel Event has a bug

Summary of your issue
MouseWheel event does not work.
Environment
Visual Studio 2017 WPF
What did you do when you faced the problem?
Other mouse events(ex. LButtonUp, RButtonUp) work, but MouseWheel Event does not work.
Example code:

I'm sorry for the late reply. I'm fixing this issue by #825. The MouseEvent enum have not been modified since the OpenCV 1.x.


PackageFilters support: limit visible packages for resolution process

Introduction of PackageFilters allows to limit set of packages that is considered (from APKINDEX) for the resolution process.
The natural use-case is integration with rules_apko & apko, such that only "hermetic" artifacts defining in .resolve.apko.json file participate in the 'version' computation.
This is a first step to address: https://github.com/chainguard-dev/rules_apko/issues/13
That need to be followed by change in apko, e.g. : https://github.com/chainguard-dev/apko/pull/979

I'm leaning toward https://github.com/chainguard-dev/go-apk/pull/172 as the solution to the use-case.


Migrate OpenEBS Slack to Kubernetes/CNCF Slack

CNCF requested that OpenEBS Slack instance should be migrated to the CNCF owned slack to keep it vendor-neutral.

Kubernetes slack also has a #openebs channel at slack.k8s.io

Some background here:

Both CNCF and Kubernetes slack have enterprise accounts which retain all message history.
CNCF won't cover the costs for new Slack enterprise given our contract with Slack, this is why we encourage folks to move to either the Kubernetes slack (like KEDA) or CNCF (most other projects).

This is a disruptive change for the existing users, but in the interest of neutral governance, we are embracing the change to move the conversations towards CNCF owned slack channels.
The cutover plan is to do the following:

[x] Update OpenEBS Documentation with Kubernetes and CNCF slack. (https://github.com/openebs/openebs-docs/pull/814)
[x] Update OpenEBS Website with new Slack channels. (https://github.com/openebs/website/pull/36)
[x] Update OpenEBS Github pages with new Slack channels. (https://github.com/openebs/openebs/pull/3055)
[x] Announce the cut-over as part of the Jun 15th release communication
[x] Make the OpenEBS Slack as read-only on June 22nd.

In the last couple of months, we have observed that the users are more active on the Kubernetes openebs slack channel, which can be attributed to the fact that OpenEBS users are also active in related Kubernetes projects/communities like Velero, Litmus, K8s-sig-storage, and other sig-storage workgroup channels.

In the interest of neutral governance, the OpenEBS community support via slack has moved from openebs-community slack (a free version of slack with limited support for message retention) to the following OpenEBS channels on Kubernetes Slack owned by CNCF.

#openebs channel for user discussions
#openebs-dev for contributor discussions


develop <- master

Merge PR to develop along with master branch push for article publication. Created by this action: https://github.com/falgon/roki-web-post/actions/runs/12544421645

Build log
Preview build with this PR (1b14b0a42e35952e634e0d8fac4078db02fc5c1e)

more info:cloud: Storage Free space   3.44 GiB    22.96%:open_file_folder: 319.93 MiB  CI_WORK/GitHubActions/roki-web

Build log
Preview build with this PR (013630f58c88f16010cc1b999171fb0e413c4cf6)

more info:cloud: Storage Free space   3.28 GiB    21.85%:open_file_folder: 319.93 MiB  CI_WORK/GitHubActions/roki-web


ListView Default Groups Collapsed Option

Category
[X] Enhancement
[ ] Bug
[ ] Question
Version
Please specify what version of the library you are using: [ "@pnp/spfx-controls-react": "1.17.0"  ]
Expected / Desired Behavior / Question
Provide an option in the IGrouping[] items or the list view attributes to default all groups to be collapsed. Currently all groups are expanded when the list is rendered with no simple way to collapse them on render.

I'm also having the same issue. do we have any solution to set collapsed by default?

I ran into this today and agree it would be a great option to add. I'd also like to be able to reset the collapsed/expanded state on events. I'm thinking something like IGrouping having a state for collapsed/expanded we could set. Maybe collapsed as boolean?

The chevron next to the column titles open/closes all the groups. So I just used
$(".ms-DetailsHeader-cell").click()
in componentDidMount.

Hi everyone,
I also think that it could be possible to enhance the control by adding a new prop to the IGrouping interface, then we could rely on the IGroup one used through the Fluent UI DetailsList (which is used behind the scene of the ListView control) that contains a prop called isCollapsed.


General progress bar of all the links that are being downloaded

Maybe we can use https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress

https://github.com/AngelGallegosE/Osiris/pull/22


ci: add coverage support

resolve #602
@ngaut @siddontang @c4pt0r PTAL

Changes Unknown when pulling 0256d2e07328f735b66031994d84a7c67216a925 on busyjay/add-ci-coverage-support into ** on master**.

Changes Unknown when pulling 0256d2e07328f735b66031994d84a7c67216a925 on busyjay/add-ci-coverage-support into ** on master**.

LGTM

LGTM


Style: add eslint

Added eslint as part of the project and run an automatic fix for all files.

:tada: This PR is included in version 3.1.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Fab button should shift up when Toast is visible at bottom

Ionic version:  (check one with "x")
[ ] 1.x (For Ionic 1.x issues, please use https://github.com/ionic-team/ionic-v1)
[ ] 2.x
[x ] 3.x
I'm submitting a ...  (check one with "x")
[ ] bug report
[ x] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or http://ionicworldwide.herokuapp.com/
Current behavior:
Currently if both the toast and Fab button at present at the bottom of the screen the Fab button gets covered by the toast. So lets, say a user saved something and wants to add a new item he has to wait for toast to go away.
Expected behavior:
Incase toast and fab button both are present at the bottom. Fab button should move up so that user can immediately click on button and move forward.

Please fill in your ionic info information.

I think you want the toast to push the content when presenting it, however, that is not the native behaviour of iOS nor Android. (it seems like an overlay)

I'm with @AmitMY on this. The toast is an overlay not an element (if that makes sense). You could move your toast to drop down from the top, or just raise your fabs up a bit from the bottom.

Guys you need to have a look at Gmail/Yahoo or any similar apps. Delete an email and you will see Fab button shifting up for the toast. Very logical UX flow.
@AmitMY How will my Ionic Info help here?!!

Inbox does definitely shift the fab up.. never noticed before. Guess he has a bit of an argument.

Hello everyone! Thanks for the feature request. I'm going to move this issue over to our internal list of feature requests for evaluation. We are continually prioritizing all requests that we receive with outstanding issues. We are extremely grateful for your feedback, but it may not always be our next priority. I'll copy the issue back to this repository when we have begun implementation. Thanks!

This issue was moved to ionic-team/ionic-feature-requests#260

@shyamal890 I stand corrected.
Your ionic info helps everywhere, as when this issue is revisited, we might see that your report is from an old version, or perhaps it will be fixed in 3.5.0 and there will be confusion on this issue's version.
From my experience with issues here, looking at an issue's version makes me understand if it is an old version, or there has been a regression, without comparing release dates.

According to the material design spec, the toast should push the fab up. Which is something the toast is not doing right now.

My ionic info

global packages:

    @ionic/cli-utils : 1.0.0-rc.2-alpha.f5850eb3
    Cordova CLI      : 6.5.0
    Ionic CLI        : 3.0.0-rc.2-alpha.f5850eb3

local packages:

    @ionic/app-scripts              : 1.3.12
    @ionic/cli-plugin-cordova       : 1.4.0-alpha.e838a5d7
    @ionic/cli-plugin-ionic-angular : 1.3.1-alpha.e838a5d7
    Cordova Platforms               : none
    Ionic Framework                 : ionic-angular 3.5.0

System:

    Node       : v6.9.5
    OS         : macOS Sierra
    Xcode      : Xcode 8.3.3 Build version 8E3004b
    ios-deploy : not installed
    ios-sim    : not installed

I guess this should be the first feature that they should implement in the next release. Hope they do so. If not, @jgw96 can you please share how to implement a tweak/hack for this?

Actually @shyamal890 I think this should be reopened as a bug report. @jgw96 what do you think?

I have implemented a temporary solution. It is an Angular / Ionic 3 directive that allows Ionic toasts to animate the fab buttons and other elements in the fixed-content div of a page accordingly.
All you have to do is to include the directive in your project and then add a corresponding element in your app component template:

Please check out the code here:
https://gist.github.com/maumchaves/d7270b54afd5c8ae120f34b41436a119


Change the total rows count

When calculating the total rows of per table, you use
rows = await runQuery(`SELECT count(*) as total FROM ${database.name}.${table}`);

It's not a good way for me, cause I have about 27 TB data per node, the SQL above will cause a performance problem.
You can use such SQL which will be better and faster:

SELECT
    database,
    table,
    sum(rows) AS total_rows
FROM system.parts
WHERE active = 1
GROUP BY
    database,
    table
ORDER BY total_rows DESC
LIMIT 10

┌─database──┬─table───────────┬──total_rows─┐
│ xxxxx     │ xxxxxxx         │<PHONE_NUMBER>8 │
│ xx   xxx  │ xxxxxxxxx       │<PHONE_NUMBER>1 │
│ xx       │ xxxxxxxx         │<PHONE_NUMBER>8 │
│ xxx       │ xxxxxxxxxx      │<PHONE_NUMBER>1 │

By the way, when configuring a new server, why can't I use copy and paste?

@jackpgao Thx a lot for this information!


Add "Pivot Key" RFC Draft

Title: Pivot Keys
Status: DRAFT

Description
        p1      p2      p3
┌───────┬───────┬───────┬───────┐
│       │       │       │       │
│ Left  │ Right │ Right │ Right │
│ Outer │       │       │       │
└───┬───┴───┬───┴───┬───┴───┬───┘
    │       │       │       │
    ▼       ▼       ▼       ▼

This RFC proposes a new identification for nodes within the B-epsilon tree. We
design it to be as uninstrusive as possible to the struture and current
implemenation of the tree to avoid undesired side effects later on. This
includes reducing the dependency on state as we show in the description here.
The basis of "PivotKey" are pivot elements already present in the tree. We use
an enum indicating the position of the node based on its parent.
type Pivot = CowBytes;

enum LocalPivotKey {
    LeftOuter(Pivot),
    Right(Pivot),
    Root,
}

The property we are piggy-backing on is that pivots are searchable and unique,
furthermore we can structurally define Pivot Key directions which keeps the
required memory space relatively low as only a single pivot key is required.
Finally, the pivot keys are more persistent than normal keys in the collection,
as they are only refreshed when the strcture of the tree changes. This might
happen on rebalancing. Although, when we consider this than any node based
algorithm needs to reconsider decisions anyway.
To make the pivot key ready to use over all datasets in a database (which can
have overlapping key sets) we require an additional information to direct the
pivot key to the correct dataset. This can be done by adding a DatasetId to
the key.
type Pivot = CowBytes;

enum PivotKey {
    LeftOuter(Pivot, DatasetId),
    Right(Pivot, DatasetId),
    Root(DatasetId),
}

Also, as the root node of a tree does not have a parent which could index the
node by it's pivot - we add another variant which simply denotes that the root
of a given dataset is to be chosen.
We propose that we internally use two kinds of pivot keys. First, the global
PivotKey, which is structured as shown above including the DatasetId.
Second, the scoped LocalPivotKey, which can offer of us some advantages when
designing interfaces for node operations, which do not have the knowledge in
which tree they are located in. This alleviates the need for passing around
DatasetIds to layers which are normally unaffected by it. The transformation
from LocalPivotKey to PivotKey is always possible, as all local keys which a
tree layer will encounter belong to the tree itself, the reverse direction is
not given to be valid and should therefore be excluded in the implementation.
Purpose
We can use the Pivot Key of a tree node to perform operations on specific nodes
which fulfill certain conditions such as access frequency or access probabilty.
This is helpful in a number of scenarios such as data prefetching or
disk-to-disk migrations.
Since pivots are stored in the internal nodes we are required to read a
substantial amount of data to retrieve knowledge about all exisiting pivot keys.
This limits the efficient usage to scenarios in which we retrieve pivot keys,
for example from messages emitted by the DMU, and record these as they are used
by the user. Previously a similar scheme has been done by the migration policies
which recorded disk offsets and set hints to the DMU to which tier a node is
advised to be written.
This limited hints to often accessed nodes which are likely to be migrated to
faster storage, as not often accessed nodes would not encounter the sent hints.
With Pivot Keys we could actively migrate them downwards, which is the main
advantage of Pivot Keys. This can be useful in scenarios with additional small
layers like NVRAM where we are then more flexible to migrate granular amounts of
data for better tier utilization.
Drawbacks
To be fully usable in multiple layers the Pivot Key is required to be stored in
each node taking up (at the moment) an arbitrary amout of extra space depending
on the pivot element. The DML can then extract Pivot Keys from each node it acts
on and report critical actions such as fetch, write and delete. This results in
more code in alot of places of the tree and data_management modules as these
will have to be adjusted to accomodate for the extra encoded member.
Alternatives
The search for alternatives is difficult as not many characteristics are present
which allow nodes to be identifiable and searchable. Something like Ids for
example could make nodes identifiable but from an Id we cannot search for the
node in the tree.
An alternative to the pivot method could be the path construction which relies
on the structural uniqueness of the tree, in which we construct a path from the
root by giving directions for each step downwards until the desired node is
located. It can look similar to this:
enum Path {
    Child(usize, Path),
    Terminate,
}

This method does not provide many advantages and carries the disadvantage of
having to maintain additional state when constructing keys about the just
traversed distance. Arguably, this is semantic-wise not complicated but many
methods will be affected by this change. Also, misidentification may become
possible as with reconstruction of subtrees paths may be shifted around. With
Pivot Keys these will result in a failed search indicating an outdated key.
Currently the only advantage this method would have to the Pivot Key method is
that the size can be expected to remain comparatively low, with 5 bytes for each
element in the search path. A restriction of key size as discussed in
Issue could solve this problem
and is already in discussion.

Yeah, the "What Problem does this solve" is a bit scatter over the text at the moment, mainly in the "Purpose" section. We can congregate this probably in a 4-5 sentence summary/motivation which explains why we open this RFC and what we do.
We can probably also change the "Purpose" section to something like "Integration" to explain how it complements or reworks other components of the stack.
So the structure would look something like this:

Title
Status

Summary/Motivation
Description
Integration (?)
Drawbacks
Alternatives


Odd display on embed

The EAC has embedded our lookup tool (http://www.eac.gov/voter_resources/contact_your_state.aspx?polling-location), and it's displaying very strangely.  The search box is too wide, and then all of the information returned has weird justification.  In addition, if you hit "enter" when searching for an address, the tool opens and then closes.  Try 1500 Fairbanks Ave, Norfolk, VA.
All of these could be issues with that particular embed, but I'd like to be able to give them specific feedback.
@alexkonrad

@acohen84 The width issue has to do with the container it's embedded in. I can set a restriction on the width and notify you when that's updated.
Looking into that open/close issue, I've never seen that before. I think there might be an event handler on the containing page causing a conflict in behavior.

Thinking through this a little bit, I think the open close issue is related to their embed - the state of Connecticut has something similar and I believe it's because somehow the embed is attached to a form on their website.
Once you let me know about the first part, I'll reach out to one of the Commissioners and let him know about the issues.  They've been moving the tool around a little bit on their page, so this may not be the final home, either.

That's similar to what I'm thinking too. There's an event handler on the page listening for certain keys like the enter key because it's a search page, so when you enter an address in the tool the page is interpreting it as a search query too, and navigating you to the their search results page. I've tried a couple different things so far but it's always a little tricky accounting for different possibilities in an embed.

@acohen84 The appearance of the tool on this page is now fixed: I added a width constraint to compensate for the type of container and made sure to "clean out" the tool container of any extra characters the website may automatically add in the process of embedding it. The autocomplete issue still remains. Please reopen if we should continue working for a solution on this.


Unexpected capital letters returned for certain capitalized misspellings

TLDR: see PR 38 and PR 39 that I've opened against nspell.
Subject of the issue
Note: I've changed the name of this issue from "Mysterious capital E returned for misspelled 5-letter nouns with a single capital T" to "Unexpected capital letters returned for certain capitalized misspellings," and I've edited this post slightly to reflect the broader scope.
Background

I had originally found this error for capitalized variants of 16 dictionary-en words: "tepee", "thane", "thole", "three", "throe", "tilde", "tinge", "tonne", "toque", "tribe", "trike", "trope", "trove", "truce", "tuque", and "twine".  To give one notable example, any misspelling matching this RegEx /^Thre[f-ln-racuvxyz]$/ is corrected to "ThreE" instead of "Three."
Edit The below algorithm produces misspellings of the original 16 dictionary words, but I have since found 190 additional 5 letter words that occasionally occur in retext-spell vfile messages with extraneous capital letters. I have saved these new words and the list of misspellings needed to generate them in a json file bundled with the gist for this issue.
Generating examples
The gist to reproduce this issue tests misspellings generated as such:

Capitalize any 5-letter dictionary-en word starting with "T" and ending in "e"
Ensure that the word has affix code /MS in index.dic
Ensure that the word is not Torte (due to the second "t")
Replace the final "e" with a single letter (except "t")
Optionally add the plural "s" or the possessive "'s"

If the misspellings do not match a different dictionary word more closely than the originally selected 5-letter word, then the first "expected" value in the vfile message emitted by retext-spell will be the originally selected 5-letter word with final "e" mistakenly capitalized as "E".
Edit Without getting into the details of nspell's keyboard groups, there is no easy way to generate the 190 newly discovered 5-letter words that do not match the misspellings generated with the above method.

Your environment

OS: MacOS Sierra 10.12.6
Packages: dictionary-en==3.0.1, retext==7.0.1, retext-spell==4.0.0
Env: node==15.3.0, npm==7.0.14

Steps to reproduce
I've created a gist.
Execute the following commands to download the gist and install dependencies:
git clone https://gist.github.com/a4e2ff11cd868a5b40a65b3c53c8574a.git
cd a4e2ff11cd868a5b40a65b3c53c8574a
npm install

Run one of the following commands to test with various suffixes:

npm run test "*" (for no suffix)
npm run test "*s" (for the plural)
npm run test "*'s" (for the possessive)

Side note In contrast to the examples that produce the bug defined in this issue, you can run npm run test "t", npm run test "ts", and npm run test "t's" to see the results of misspellings that fail to produce the bug due to the presence of a lowercase "t" in the misspelling.
Expected behavior
All the logged vfile message reasons should show suggested values without unusual capitalization. The hundreds of misspellings tested with npm run test "*", npm run test "*s", and npm run test "*'s" should generate suggested values with lowercase "e" characters. For example, the first tested misspelling Tepea should generate a top suggested value of "Tepee". The plural Tepeas should generate a top suggested value of "Tepees". The possessive Tepea's should generate a top suggested value of "Tepee's".
Actual behavior
The hundreds of misspellings tested with npm run test "*", npm run test "*s", and npm run test "*'s" all generate suggested values with uppercase "E" characters. For example, the first tested misspelling Tepea generates a top suggested value of "TepeE". The plural Tepeas generates a top suggested value of "TepeEs". The possessive Tepea's generates a top suggested value of "TepeE's".

Along a similar vein, these misspellings of Tinpot produce a mysteriously capitalized "O":
  1:1-1:6  warning  `Tinpb` is misspelt; did you mean `TinpOt` ... tinpb  retext-spell
  1:1-1:6  warning  `Tinpc` is misspelt; did you mean `TinpOt` ... tinpc  retext-spell
  1:1-1:6  warning  `Tinpd` is misspelt; did you mean `TinpOt` ... tinpd  retext-spell
  1:1-1:6  warning  `Tinpf` is misspelt; did you mean `TinpOt` ... tinpf  retext-spell
  1:1-1:6  warning  `Tinph` is misspelt; did you mean `TinpOt` ... tinph  retext-spell
  1:1-1:6  warning  `Tinpj` is misspelt; did you mean `TinpOt` ... tinpj  retext-spell
  1:1-1:6  warning  `Tinpl` is misspelt; did you mean `TinpOt` ... tinpl  retext-spell
  1:1-1:6  warning  `Tinpm` is misspelt; did you mean `TinpOt` ... tinpm  retext-spell
  1:1-1:6  warning  `Tinpq` is misspelt; did you mean `TinpOt` ... tinpq  retext-spell
  1:1-1:6  warning  `Tinpv` is misspelt; did you mean `TinpOt` ... tinpv  retext-spell
  1:1-1:6  warning  `Tinpx` is misspelt; did you mean `TinpOt` ... tinpx  retext-spell

On the other hand, these misspellings of Tinpot suggest the correct capitalization:
  1:1-1:6  warning  `Tinpo` is misspelt; did you mean `Tinpot`?  tinpo  retext-spell
  1:1-1:6  warning  `Tinpp` is misspelt; did you mean `Tinpot` ... tinpp  retext-spell
  1:1-1:6  warning  `Tinpu` is misspelt; did you mean `Tinpot` ... tinpu  retext-spell
  1:1-1:6  warning  `Tinpz` is misspelt; did you mean `Tinpot` ...  tinpz  retext-spell

Along a similar vein, these misspellings of Tinpot produce a mysteriously capitalized "O":
  1:1-1:6  warning  `Tinpb` is misspelt; did you mean `TinpOt` ... tinpb  retext-spell
  1:1-1:6  warning  `Tinpc` is misspelt; did you mean `TinpOt` ... tinpc  retext-spell
  1:1-1:6  warning  `Tinpd` is misspelt; did you mean `TinpOt` ... tinpd  retext-spell
  1:1-1:6  warning  `Tinpf` is misspelt; did you mean `TinpOt` ... tinpf  retext-spell
  1:1-1:6  warning  `Tinph` is misspelt; did you mean `TinpOt` ... tinph  retext-spell
  1:1-1:6  warning  `Tinpj` is misspelt; did you mean `TinpOt` ... tinpj  retext-spell
  1:1-1:6  warning  `Tinpl` is misspelt; did you mean `TinpOt` ... tinpl  retext-spell
  1:1-1:6  warning  `Tinpm` is misspelt; did you mean `TinpOt` ... tinpm  retext-spell
  1:1-1:6  warning  `Tinpq` is misspelt; did you mean `TinpOt` ... tinpq  retext-spell
  1:1-1:6  warning  `Tinpv` is misspelt; did you mean `TinpOt` ... tinpv  retext-spell
  1:1-1:6  warning  `Tinpx` is misspelt; did you mean `TinpOt` ... tinpx  retext-spell

On the other hand, these misspellings of Tinpot suggest the correct capitalization:
  1:1-1:6  warning  `Tinpo` is misspelt; did you mean `Tinpot`?  tinpo  retext-spell
  1:1-1:6  warning  `Tinpp` is misspelt; did you mean `Tinpot` ... tinpp  retext-spell
  1:1-1:6  warning  `Tinpu` is misspelt; did you mean `Tinpot` ... tinpu  retext-spell
  1:1-1:6  warning  `Tinpz` is misspelt; did you mean `Tinpot` ...  tinpz  retext-spell

Similarly, Turbt corrects to "Turbo" while anything matching the RegEx /^Turb[a-nu-zpqr]$/ mistakenly corrects to TurbO.

Similarly, Turbt corrects to "Turbo" while anything matching the RegEx /^Turb[a-nu-zpqr]$/ mistakenly corrects to TurbO.

See the corresponding nspell issue.

See the corresponding nspell issue.

Closing as the nspell PRs are released, and I’m assuming they fixed this!


Add deprecation annotation for ByteStreams#toByteArray method

Add deprecation annotation to remove ByteStreams#toByteArray in DW 3. Related to #4916

Oh I raised https://github.com/dropwizard/dropwizard/pull/4918 before seeing this. How hungry for deprecation are you? Just a nibble or a whole mouthful?

As you added further comments, I think your PR is more detailed. I'll then accept that one.

om nom nom said the code deletion pacman


Configure TLS settings

Sometimes there are errors downloading from Microsoft unless you have updated TLS settings. I think I should add [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 to the module.

Added this setting to the module in v4.17.0


Read the docs footer and menu/hamburger is not clickable

On mobile devices or small windows the menu menu/hamburger is not clickable. Also the footer "v:latest" is not expandable.
This seems to be related to the "sphinx_rtd_theme":
https://github.com/readthedocs/readthedocs.org/issues/4132
https://github.com/readthedocs/readthedocs.org/issues/3925
However, when I build Readthedocs locally (with same versions of sphinx_rtd_theme), I do not encounter this problem.
Could it be related to the optional keyword here ?
sphinx-rtd-theme = { version = "^1.1.1", optional = true }
nbsphinx = { version = "^0.8.10", optional = true }
sphinx-gallery = {version = "^0.11.1", optional = true }

the optional is just that a user does not need these packages. They should be installed on readthedocs. Older docs worked. stange

Hmm I have updated the readthedocs theme and sphinx and it still does not work. Apparently its a problem that "jQuery is not found" (in the javascript console F12). Sphinx 6 apparently removed jquery but rtd-theme is still discussing whether to remove it or not.

I finally found the solution, its now fixed 3f7d589


Render e-mails from string

https://www.pivotaltracker.com/story/show/83546778

:facepunch: @DRvanR

Done. @DRvanR

:+1:


Add optional delay to perform commands

I'd like the ability to have some performs (in the perform module) to wait a certain amount of time before executing. Mainly, I have some commands that need to be executed after channel joins, but perform executes before channels are joined. A wait period would help.

@DarthGandalf Is there an updated version of timed_perform module found anywhere ?

@ne0ark I'm not aware of any updated version of it.


Unable to read S3 parquet files using DuckDB as Database Connector

I was following the DuckDB setup as per this PR and was able to load the DB file and create charts.
As a next step I wanted to load S3 parquet files in to Superset using DuckDB in memory option duckdb:///:memory:
Before trying with Superset, I used below Python code to check the DuckDB S3 parquet loading and found it to be working:

Without duckdb-engine

import duckdb
cursor = duckdb.connect()
cursor.execute("INSTALL httpfs;")
cursor.execute("LOAD httpfs;")
cursor.execute("SET s3_region='******'")
cursor.execute("SET s3_access_key_id=''**************")
cursor.execute("SET s3_secret_access_key='*****************************'")
cursor.execute("PRAGMA enable_profiling;")
cursor.execute("SELECT count(*) FROM read_parquet('s3://<bucket>/prefix/*.parquet'")

With duckdb-engine

# pip install duckdb-engine
import sqlalchemy as sa

engine = sa.create_engine("duckdb:///:memory:")

with engine.connect() as conn:
    conn.execute(
        f"""
            INSTALL httpfs;

            LOAD httpfs;

            SET s3_region='ap-south-1';
            SET s3_access_key_id='****************';
            SET s3_secret_access_key='*****************************';
        """
    )
    r = conn.execute(
        """
           SELECT count(*) FROM read_parquet('s3://<bucket>/prefix/*.parquet');
        """
    ).fetchall()
    for row in r:
      print(dict(row))

When I tried to SET the S3 environment values in SQL Editor I was getting the below error on the UI:
Error:
DuckDB Error
duckdb error: Catalog Error: unrecognized configuration parameter "s3_region"

Did you mean: "TimeZone"

This may be triggered by:
Issue 1002 - The database returned an unexpected error.

See less

Full Trace:

superset_cache          | 1:M 14 Jul 2022 14:18:00.250 * Background saving terminated with success
superset_app            | <IP_ADDRESS> - - [14/Jul/2022:14:18:24 +0000] "GET /health HTTP/1.1" 200 2 "-" "curl/7.74.0"
superset_app            | <IP_ADDRESS> - - [14/Jul/2022:14:18:34 +0000] "GET /api/v1/me/ HTTP/1.1" 200 150 "http://localhost:8088/superset/sqllab/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36"
superset_app            | <IP_ADDRESS> - - [14/Jul/2022:14:18:34 +0000] "GET /api/v1/me/ HTTP/1.1" 200 150 "http://localhost:8088/superset/sqllab/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36"
superset_app            | Triggering query_id: 60
superset_app            | 2022-07-14 14:18:35,809:INFO:superset.sqllab.command:Triggering query_id: 60
superset_app            | Query 60: Executing 1 statement(s)
superset_app            | 2022-07-14 14:18:35,942:INFO:superset.sql_lab:Query 60: Executing 1 statement(s)
superset_app            | Query 60: Set query to 'running'
superset_app            | 2022-07-14 14:18:35,943:INFO:superset.sql_lab:Query 60: Set query to 'running'
superset_app            | Query 60: Running statement 1 out of 1
superset_app            | 2022-07-14 14:18:36,083:INFO:superset.sql_lab:Query 60: Running statement 1 out of 1
superset_app            | Query 60: <class 'RuntimeError'>
superset_app            | Traceback (most recent call last):
superset_app            |   File "/app/superset/sql_lab.py", line 272, in execute_sql_statement
superset_app            |     db_engine_spec.execute(cursor, sql, async_=True)
superset_app            |   File "/app/superset/db_engine_specs/base.py", line 1261, in execute
superset_app            |     raise cls.get_dbapi_mapped_exception(ex)
superset_app            |   File "/app/superset/db_engine_specs/base.py", line 1259, in execute
superset_app            |     cursor.execute(query)
superset_app            |   File "/usr/local/lib/python3.8/site-packages/duckdb_engine/__init__.py", line 97, in execute
superset_app            |     raise e
superset_app            |   File "/usr/local/lib/python3.8/site-packages/duckdb_engine/__init__.py", line 85, in execute
superset_app            |     self.c.execute(statement)
superset_app            | RuntimeError: Catalog Error: unrecognized configuration parameter "s3_region"
superset_app            |
superset_app            | Did you mean: "TimeZone"
superset_app            | 2022-07-14 14:18:36,157:ERROR:superset.sql_lab:Query 60: <class 'RuntimeError'>
superset_app            | Traceback (most recent call last):
superset_app            |   File "/app/superset/sql_lab.py", line 272, in execute_sql_statement
superset_app            |     db_engine_spec.execute(cursor, sql, async_=True)
superset_app            |   File "/app/superset/db_engine_specs/base.py", line 1261, in execute
superset_app            |     raise cls.get_dbapi_mapped_exception(ex)
superset_app            |   File "/app/superset/db_engine_specs/base.py", line 1259, in execute
superset_app            |     cursor.execute(query)
superset_app            |   File "/usr/local/lib/python3.8/site-packages/duckdb_engine/__init__.py", line 97, in execute
superset_app            |     raise e
superset_app            |   File "/usr/local/lib/python3.8/site-packages/duckdb_engine/__init__.py", line 85, in execute
superset_app            |     self.c.execute(statement)
superset_app            | RuntimeError: Catalog Error: unrecognized configuration parameter "s3_region"
superset_app            |
superset_app            | Did you mean: "TimeZone"
superset_app            | [SupersetError(message='duckdb error: Catalog Error: unrecognized configuration parameter "s3_region"\n\nDid you mean: "TimeZone"', error_type=<SupersetErrorType.GENERIC_DB_ENGINE_ERROR: 'GENERIC_DB_ENGINE_ERROR'>, level=<ErrorLevel.ERROR: 'error'>, extra={'engine_name': 'DuckDB', 'issue_codes': [{'code': 1002, 'message': 'Issue 1002 - The database returned an unexpected error.'}]})]
superset_app            | Traceback (most recent call last):
superset_app            |   File "/app/superset/views/base.py", line 207, in wraps
superset_app            |     return f(self, *args, **kwargs)
superset_app            |   File "/app/superset/utils/log.py", line 244, in wrapper
superset_app            |     value = f(*args, **kwargs)
superset_app            |   File "/app/superset/views/core.py", line 2412, in sql_json
superset_app            |     command_result: CommandResult = command.run()
superset_app            |   File "/app/superset/sqllab/command.py", line 114, in run
superset_app            |     raise ex
superset_app            |   File "/app/superset/sqllab/command.py", line 98, in run
superset_app            |     status = self._run_sql_json_exec_from_scratch()
superset_app            |   File "/app/superset/sqllab/command.py", line 151, in _run_sql_json_exec_from_scratch
superset_app            |     raise ex
superset_app            |   File "/app/superset/sqllab/command.py", line 146, in _run_sql_json_exec_from_scratch
superset_app            |     return self._sql_json_executor.execute(
superset_app            |   File "/app/superset/sqllab/sql_json_executer.py", line 111, in execute
superset_app            |     raise SupersetErrorsException(
superset_app            | superset.exceptions.SupersetErrorsException: [SupersetError(message='duckdb error: Catalog Error: unrecognized configuration parameter "s3_region"\n\nDid you mean: "TimeZone"', error_type=<SupersetErrorType.GENERIC_DB_ENGINE_ERROR: 'GENERIC_DB_ENGINE_ERROR'>, level=<ErrorLevel.ERROR: 'error'>, extra={'engine_name': 'DuckDB', 'issue_codes': [{'code': 1002, 'message': 'Issue 1002 - The database returned an unexpected error.'}]})]
superset_app            | 2022-07-14 14:18:36,229:WARNING:superset.views.base:[SupersetError(message='duckdb error: Catalog Error: unrecognized configuration parameter "s3_region"\n\nDid you mean: "TimeZone"', error_type=<SupersetErrorType.GENERIC_DB_ENGINE_ERROR: 'GENERIC_DB_ENGINE_ERROR'>, level=<ErrorLevel.ERROR: 'error'>, extra={'engine_name': 'DuckDB', 'issue_codes': [{'code': 1002, 'message': 'Issue 1002 - The database returned an unexpected error.'}]})]
superset_app            | Traceback (most recent call last):
superset_app            |   File "/app/superset/views/base.py", line 207, in wraps
superset_app            |     return f(self, *args, **kwargs)
superset_app            |   File "/app/superset/utils/log.py", line 244, in wrapper
superset_app            |     value = f(*args, **kwargs)
superset_app            |   File "/app/superset/views/core.py", line 2412, in sql_json
superset_app            |     command_result: CommandResult = command.run()
superset_app            |   File "/app/superset/sqllab/command.py", line 114, in run
superset_app            |     raise ex
superset_app            |   File "/app/superset/sqllab/command.py", line 98, in run
superset_app            |     status = self._run_sql_json_exec_from_scratch()
superset_app            |   File "/app/superset/sqllab/command.py", line 151, in _run_sql_json_exec_from_scratch
superset_app            |     raise ex
superset_app            |   File "/app/superset/sqllab/command.py", line 146, in _run_sql_json_exec_from_scratch
superset_app            |     return self._sql_json_executor.execute(
superset_app            |   File "/app/superset/sqllab/sql_json_executer.py", line 111, in execute
superset_app            |     raise SupersetErrorsException(
superset_app            | superset.exceptions.SupersetErrorsException: [SupersetError(message='duckdb error: Catalog Error: unrecognized configuration parameter "s3_region"\n\nDid you mean: "TimeZone"', error_type=<SupersetErrorType.GENERIC_DB_ENGINE_ERROR: 'GENERIC_DB_ENGINE_ERROR'>, level=<ErrorLevel.ERROR: 'error'>, extra={'engine_name': 'DuckDB', 'issue_codes': [{'code': 1002, 'message': 'Issue 1002 - The database returned an unexpected error.'}]})]

Update: By patching the conenct method of the DuckDB engine here @sachintyagi22 was able to read the parquet files.
Something like this:
    def connect(self, *args: Any, **kwargs: Any) -> ConnectionWrapper:
        cursor = duckdb.connect(*args, **kwargs)
        cursor.execute("INSTALL httpfs;")
        cursor.execute("LOAD httpfs;")
        cursor.execute("SET s3_region='******'")
        cursor.execute("SET s3_access_key_id=''**************")
        cursor.execute("SET s3_secret_access_key='*****************************'")
        return ConnectionWrapper(cursor)

Without this patch, the duckdb session is not abel to recognize the SET commands.

@Mause Could you please have look on this issue?

@Mageswaran1989 unfortunately I'm not a superset developer, and wouldn't know where to start investigating this

@Mageswaran1989 , @Mause
I tested with  minio,
/usr/local/opt/minio/bin/minio server --config-dir=/usr/local/etc/minio --address=:9900 /usr/local/var/minio

and it works,
install 'httpfs';
load 'httpfs';
SET s3_endpoint='<IP_ADDRESS>:9900';
SET s3_access_key_id='minioadmin';
SET s3_secret_access_key='minioadmin';
SET s3_url_style = 'path';
SET s3_use_ssl=false;
select count(*) from 's3://ontime/*.parquet';

you need check Allow DML

@alitrack Thanks for the response. I am abale to read data from S3 as you mentioned.
But for each query, I had to give S3 credentials.
Any option to set it once and use it across queries?

There is a dirty job,
appends a method at the bottom of db_engine_specs/duckdb.py
here is a example,
    @classmethod
    def execute(cls, cursor: Any, query: str, **kwargs: Any) -> None:
        sql = f"""
        install 'httpfs';
        load 'httpfs';
        SET s3_endpoint='<IP_ADDRESS>:9900';
        SET s3_access_key_id='minioadmin';
        SET s3_secret_access_key='minioadmin';
        SET s3_url_style = 'path';
        SET s3_use_ssl=false;
        """
        cursor.execute(sql)

        return super().execute(cursor, query, **kwargs)

it overrides the execute method of BaseEngineSpec.

If you can pass configuration to duckdb using superset (https://github.com/Mause/duckdb_engine/#configuration) I would recommend doing that instead

Superset supports ENGINE PARAMETERS, but DuckDB need install and load httpfs extension first,
then can pass s3 related configuration
from sqlalchemy import create_engine
connect_args = {'config': {'s3_endpoint': '<IP_ADDRESS>:9900', 's3_access_key_id': 'minioadmin', 's3_secret_access_key': 'minioadmin', 's3_url_style': 'path', 's3_use_ssl': 0}}
engine = create_engine("duckdb:///",connect_args=connect_args)

get the issue,
duckdb.InvalidInputException: Invalid Input Error: Unrecognized configuration property "s3_endpoint"

@alitrack for now, I've added experimental support to duckdb-engine (as of 0.6.0) for the preloading of extensions via engine parameters - https://github.com/Mause/duckdb_engine#preloading-extensions-experimental

@Mause
Does not work,  even in python code
connect_args={
        "preload_extensions": ["httpfs"],
        "config": {
          "s3_endpoint":"<IP_ADDRESS>:9900",
          "s3_access_key_id":"minioadmin",
          "s3_secret_access_key":"minioadmin",
          "s3_url_style":"path",
          "s3_use_ssl":False
  }
}
from curses import endwin
from sqlalchemy import create_engine

engine = create_engine("duckdb:///",connect_args=connect_args)

import pandas as pd

def test_s3():
    df = pd.read_sql("""

    select count(*) from 's3://ontime/*.parquet'

    """, engine)
    print(df)
try:
    test_s3()
except Exception as e:
    print(e)
    engine.execute("""
    SET s3_endpoint='<IP_ADDRESS>:9900';
    SET s3_access_key_id='minioadmin';
    SET s3_secret_access_key='minioadmin';
    SET s3_url_style = 'path';
    SET s3_use_ssl=0;
    """)

test_s3()

btw, you can try the Minio Play account (it is public)
SET s3_endpoint='play.min.io:9000';
SET s3_access_key_id='Q3AM3UQ867SPQQA43P2F';
SET s3_secret_access_key='zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG';
SET s3_url_style = 'path';
SET s3_use_ssl=true;
SET s3_region = 'us-east-1';

select * from 's3://sales5m/sales_5m_0.parquet' limit  3;

@alitrack what exception are you getting?

works now,
connect_args should be

connect_args={
        "preload_extensions": ["httpfs"],
        "config": {
          "s3_endpoint":"<IP_ADDRESS>:9900",
          "s3_access_key_id":"minioadmin",
          "s3_secret_access_key":"minioadmin",
          "s3_url_style":"path",
          "s3_use_ssl":"False"
  }
}

and  in superset, should be
{
    "connect_args": {
        "preload_extensions": [
            "httpfs"
        ],
        "config": {
            "s3_endpoint": "<IP_ADDRESS>:9900",
            "s3_access_key_id": "minioadmin",
            "s3_secret_access_key": "minioadmin",
            "s3_url_style": "path",
            "s3_use_ssl": "False"
        }
    }
}

works now,
connect_args should be

connect_args={
        "preload_extensions": ["httpfs"],
        "config": {
          "s3_endpoint":"<IP_ADDRESS>:9900",
          "s3_access_key_id":"minioadmin",
          "s3_secret_access_key":"minioadmin",
          "s3_url_style":"path",
          "s3_use_ssl":"False"
  }
}

and  in superset, should be
{
    "connect_args": {
        "preload_extensions": [
            "httpfs"
        ],
        "config": {
            "s3_endpoint": "<IP_ADDRESS>:9900",
            "s3_access_key_id": "minioadmin",
            "s3_secret_access_key": "minioadmin",
            "s3_url_style": "path",
            "s3_use_ssl": "False"
        }
    }
}

Yeah I realized the boolean bug after you posted, I'll push a patch release to fix that shortly

attention,
superset  config does not support boolean, must be string

attention, superset config does not support boolean, must be string

If it's JSON, it probably just needs to be false instead of False

attention, superset config does not support boolean, must be string

If it's JSON, it probably just needs to be false instead of False

you got,
with the last version of duckdb-engine, boolean false works too.

I believe this issue is resolved then?

Dear @Mause,
we have installed the superset with the current helm chart and also installed the DuckDB engine, it shows now in the Databases Connections dropdown. The superset version in the right menu is shown as "Version: 0.0.0-dev".
When we create a new DuckDB database without engine parameter but with "Allow DML" and call SQL-Lab we are able to use the connection settings when executing as DML statements and the data is delivered correctly:
install 'httpfs';
load 'httpfs';
SET s3_endpoint='argo-artifacts:9000';
SET s3_access_key_id='XXX';
SET s3_secret_access_key='XXX';
SET s3_url_style = 'path';
SET s3_use_ssl=false;
select count() from 's3://raw/.parquet';
However we don't want to provide the credentials in the SQL-Lab but would like to store them in the DuckDB Connector Advanced ENGINE PARAMETER dialog, we have tested the following parameter JSON strings but none of them seems to work:
Test1:
{ 	"engine_params": { 		 "connect_args":{ 				"preload_extensions": ["httpfs"], 				"config": { 				  "s3_endpoint": "argo-artifacts:9000", 				  "s3_access_key_id": "XXX", 				  "s3_secret_access_key": "XXX", 				  "s3_url_style": "path", 				  "s3_use_ssl": "False" 		  } 		} 	} }
Test2:
{ 	 "connect_args":{ 		"preload_extensions": ["httpfs"], 		"config": { 			  "s3_endpoint": "argo-artifacts:9000", 			  "s3_access_key_id": "XXX", 			  "s3_secret_access_key": "XXX", 			  "s3_url_style": "path", 			  "s3_use_ssl": "False" 		  } 	} }
We always get the same error:
An error occurred while fetching databases: "Connection failed, please check your connection settings"
In chrome debug we see:
PUT http://superset.mini.kube/api/v1/database/1 422 (UNPROCESSABLE ENTITY)
Response {type: 'basic', url: 'http://superset.mini.kube/api/v1/database/1'
When looking at the core.py line 394 - 405 it looks like that "engine_params" is searched first, then "connect_args"
https://github.com/apache/superset/blob/master/superset/models/core.py
    params = extra.get("engine_params", {})
    if nullpool:
        params["poolclass"] = NullPool

    connect_args = params.get("connect_args", {})
    if self.impersonate_user:
        self.db_engine_spec.update_impersonation_config(
            connect_args, str(sqlalchemy_url), effective_username
        )

    if connect_args:
        params["connect_args"] = connect_args

In Connector Advanced ENGINE PARAMETER dialog, what is the specific connection string which need to be passed ?
Are the any restrictions in usage of double " or single ' quotes in the JSON string ?
Thank you very much!

@sapcode if you have issues with duckdb-engine specifically, please raise them in the duckdb-engine repo. I cannot help with general superset issues, but would recommend that you create a new issue instead of piggy-backing on this one
@apache / @robdiciuccio I'd appreciate it if you closed and locked this issue

appends a method at the bottom of db_engine_specs/duckdb.py

This works well, but someone with SQL Lab access can read plaintext credentials with SELECT * FROM duckdb_settings();

If you can pass configuration to duckdb using superset (https://github.com/Mause/duckdb_engine/#configuration) I would recommend doing that instead

Using @Mause's suggestion: any admin with rights to edit the database connection can read the secrets in plain text.
Suggestion: override execute() for DuckDBEngineSpec in this manner:
    @classmethod
    def execute(cls, cursor: Any, query: str, **kwargs: Any) -> None:
        sql = f"""
        INSTALL aws;
        LOAD aws;
        INSTALL httpfs;
        LOAD httpfs;
        CALL load_aws_credentials();
        """

        if 's3://' in query and 'duckdb_settings()' not in query:
            cursor.execute(sql)
        return super().execute(cursor, query, **kwargs)

Note that CALL load_aws_credentials(); from aws extension of duckdb has a significant hit on query performance. The above approach allows us to:

Bypass loading credentials and extensions when not required
Not have to specify credentials in plain text and instead use AWS Default Credentials Provider Chain
Plug a security hole where credentials can be displayed in plain text

Hi all,
I almost there too. I am facing another problem but I've successfully connected to S3 via DuckDB to retrieve parquet files using the following setup.
Go to advanced Database connections / (DuckDB) / settings / security and just drop the connect_args without the s3_endpoint.
{
    "connect_args": {
        "preload_extensions": ["httpfs"],
        "config": {
            "s3_region": "eu-west-1",
            "s3_access_key_id": "FOO",
            "s3_secret_access_key": "BAR"
        }
    }
}

your query should be something like:
SELECT * FROM read_parquet('s3://bucket/reports/data/*');

My problem is that when I try to create a new dataset from this database, I get a weird Schema / Table list which does not represet anything (blank) from the parquet.
I've tried to create a temporary table but without effect too and I know it is reading correctly the file because the SELECT and DESCRIBE works just nice and I see the contents without issues. Perhaps there might be something when building the dataset which cannot find a "physical" table?!
Would love to get your tips!.
Cheers,
F

Hi all,
I almost there too. I am facing another problem but I've successfully connected to S3 via DuckDB to retrieve parquet files using the following setup.
Go to advanced Database connections / (DuckDB) / settings / security and just drop the connect_args without the s3_endpoint.
{
    "connect_args": {
        "preload_extensions": ["httpfs"],
        "config": {
            "s3_region": "eu-west-1",
            "s3_access_key_id": "FOO",
            "s3_secret_access_key": "BAR"
        }
    }
}

your query should be something like:
SELECT * FROM read_parquet('s3://bucket/reports/data/*');

My problem is that when I try to create a new dataset from this database, I get a weird Schema / Table list which does not represet anything (blank) from the parquet.
I've tried to create a temporary table but without effect too and I know it is reading correctly the file because the SELECT and DESCRIBE works just nice and I see the contents without issues. Perhaps there might be something when building the dataset which cannot find a "physical" table?!
Would love to get your tips!.
Cheers,
F

@include

your query should be something like:
SELECT * FROM read_parquet('s3://bucket/reports/data/*');

My problem is that when I try to create a new dataset from this database, I get a weird Schema / Table list which does not represet anything (blank) from the parquet.

I think you have not created a physical table on duckdb. You're only running a query that reads a s3 parquet dataset. Create a table: CREATE OR REPLACE TABLE main.table_name AS SELECT * FROM read_parquet('s3://...') or define the dataset as a view with query being SELECT * FROM read_parquet('s3://...')
Temporary tables do not survive beyond the life of the connection/cursor: https://duckdb.org/docs/sql/statements/create_table.html#temporary-tables

If I'm not mistaken, it sounds like all of the issues reported herein have been addressed, and this is safe to close. Thank you to all who participated in getting to the bottom of things! Let me know if this needs reopening for any reason, and we're happy to do so.


Arch AUR installation fails during testing

Installation log
$ yay -S labelle
AUR Explicit (1): labelle-1.3.1-1
:: PKGBUILD up to date, skipping download: labelle
  1 labelle                          (Build Files Exist)
==> Packages to cleanBuild?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==>
  1 labelle                          (Build Files Exist)
==> Diffs to show?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==>
==> Making package: labelle 1.3.1-1 (Sun Oct 13 17:54:16 2024)
==> Retrieving sources...
  -> Found labelle-1.3.1.tar.gz
  -> Found 91-dymo-labelmanager-pnp.rules
  -> Found dymo-labelmanager-pnp.conf
==> WARNING: Skipping verification of source file PGP signatures.
==> Validating source files with sha512sums...
    labelle-1.3.1.tar.gz ... Passed
    91-dymo-labelmanager-pnp.rules ... Passed
    dymo-labelmanager-pnp.conf ... Passed
:: (1/1) Parsing SRCINFO: labelle
==> Making package: labelle 1.3.1-1 (Sun Oct 13 17:54:16 2024)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Found labelle-1.3.1.tar.gz
  -> Found 91-dymo-labelmanager-pnp.rules
  -> Found dymo-labelmanager-pnp.conf
==> Validating source files with sha512sums...
    labelle-1.3.1.tar.gz ... Passed
    91-dymo-labelmanager-pnp.rules ... Passed
    dymo-labelmanager-pnp.conf ... Passed
==> Removing existing $srcdir/ directory...
==> Extracting sources...
  -> Extracting labelle-1.3.1.tar.gz with bsdtar
bsdtar: Failed to set default locale
==> Starting prepare()...
==> Sources are ready.
==> Making package: labelle 1.3.1-1 (Sun Oct 13 17:54:18 2024)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> WARNING: Using existing $srcdir/ tree
==> Removing existing $pkgdir/ directory...
==> Starting build()...
* Getting build dependencies for wheel...
* Building wheel...
Successfully built labelle-1.3.1-py3-none-any.whl
==> Starting check()...
Running unit tests
======================================================================= test session starts =======================================================================
platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0
PySide6 6.7.3 -- Qt runtime 6.7.3 -- Qt compiled 6.7.3
rootdir: /home/sakulflee/.cache/yay/labelle/src/labelle-1.3.1
configfile: pyproject.toml
plugins: typeguard-4.3.0, qt-4.4.0, image-diff-0.0.11
collected 49 items

src/labelle/gui/tests/test_gui.py dbus-daemon[40560]: [session uid=1000 pid=40560] Activating service name='org.freedesktop.portal.Desktop' requested by ':1.0' (uid=1000 pid=40580 comm="/usr/bin/python /usr/bin/pytest src")
dbus-daemon[40560]: [session uid=1000 pid=40560] Activating service name='org.freedesktop.portal.Documents' requested by ':1.1' (uid=1000 pid=40585 comm="/usr/lib/xdg-desktop-portal")
dbus-daemon[40560]: [session uid=1000 pid=40560] Activating service name='org.freedesktop.impl.portal.PermissionStore' requested by ':1.2' (uid=1000 pid=40591 comm="/usr/lib/xdg-document-portal")
dbus-daemon[40560]: [session uid=1000 pid=40560] Successfully activated service 'org.freedesktop.impl.portal.PermissionStore'
dbus-daemon[40560]: [session uid=1000 pid=40560] Successfully activated service 'org.freedesktop.portal.Documents'
fusermount3: failed to access mountpoint /run/user/1000/doc: Permission denied
error: fuse init failed: Can't mount path /run/user/1000/doc
dbus-daemon[40560]: [session uid=1000 pid=40560] Activating service name='org.freedesktop.impl.portal.desktop.kde' requested by ':1.1' (uid=1000 pid=40585 comm="/usr/lib/xdg-desktop-portal")
Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
Qt depends on a UTF-8 locale, and has switched to "C.UTF-8" instead.
If this causes problems, reconfigure your locale.  This is not required, but will ensure that the
        widget gets closed by the end of the test, so it is highly recommended.

        :param QWidget widget:
            Widget to keep track of.

        :kwparam before_close_func:
            A function that receives the widget as single parameter, which is called just before
            the ``.close()`` method gets called.

        .. note:: This method is also available as ``add_widget`` (pep-8 alias)
        """
        if not isinstance(widget, qt_api.QtWidgets.QWidget):
>           raise TypeError("Need to pass a QWidget to addWidget!")
E           TypeError: Need to pass a QWidget to addWidget!

/usr/lib/python3.12/site-packages/pytestqt/qtbot.py:188: TypeError
===================================================================== short test summary info =====================================================================
FAILED src/labelle/gui/tests/test_gui.py::test_main_window - TypeError: Need to pass a QWidget to addWidget!
================================================================== 1 failed, 48 passed in 1.21s ===================================================================
==> ERROR: A failure occurred in check().
    Aborting...
 -> error making: labelle-exit status 4
 -> Failed to install the following packages. Manual intervention is required:
labelle - exit status 4

Linux version
$ uname -a
Linux _ 6.6.56-1-lts #1 SMP PREEMPT_DYNAMIC Thu, 10 Oct 2024 12:04:53 +0000 x86_64 GNU/Linux

QT Version
$ qmake --version
QMake version 3.1
Using Qt version 5.15.15 in /usr/lib

$ qmake6 --version
QMake version 3.1
Using Qt version 6.7.3 in /usr/lib

Thanks @SakulFlee for the report! I don't actually know anything about ArchLinux or AUR. Would you be able to show me how to reproduce this issue in a Docker container? Or perhaps instead raise this issue on AUR?
Just based on the stack trace, I'm guessing that pytestqt might be using a different version of Qt than Labelle. When I debug locally, I get that qt_api.QtWidgets.QWidget is <class 'PyQt6.QtWidgets.QWidget'>. Correspondingly, type(widget).mro() is
[<class 'labelle.gui.gui.LabelleWindow'>, <class 'PyQt6.QtWidgets.QWidget'>, <class 'PyQt6.QtCore.QObject'>, <class 'PyQt6.sip.wrapper'>, <class 'PyQt6.QtGui.QPaintDevice'>, <class 'PyQt6.sip.simplewrapper'>, <class 'object'>]

so it's a match.

CC @claui

Oh my bad, I was assuming you are maintaining the AUR.
I just tried replicating it under Docker, but it worked there.
The only difference I can find is what the test session reports:
# Local:
platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0
PySide6 6.7.3 -- Qt runtime 6.7.3 -- Qt compiled 6.7.3
rootdir: /home/sakulflee/.cache/yay/labelle/src/labelle-1.3.1
configfile: pyproject.toml
plugins: qt-4.4.0, image-diff-0.0.11

# Docker:
platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0
PyQt6 6.7.1 -- Qt runtime 6.7.3 -- Qt compiled 6.7.3
rootdir: /home/build/.cache/yay/labelle/src/labelle-1.3.1
configfile: pyproject.toml
plugins: qt-4.4.0, image-diff-0.0.11

It seems to be PySide6 6.7.3 vs PyQt6 6.7.1 what's causing the issue.
I don't know enough about QT to know what this does or how to change it, but the issue is indeed local!
Thanks for your help anyways :)

Actually, looking closer into this just now: There seems to be some incompatibility with your test and PySide2.
It works fine on PyQT6 though...

@SakulFlee, I just released v1.3.2 which I think should fix the issue, once it propagates to AUR.

@maresb Published v1.3.2 on the AUR, thanks!
@SakulFlee Feel free to comment on the AUR page directly if you bump into any issues with the PKGBUILD.

Works fine now via AUR! Thank you :)


Configuration

For matt_accessor's that are settable, I am unable to set some of these in config.yml.
For example, silence_polling in development:
development:
  <<: *default
  silence_polling: true

I'm unable to find the exact problem but happy to put in a fix if someone can point me in the right direction.  Maybe here, but I don't see how is this line called?

Hey @allcentury, sorry for the confusion! All the settings in this section can be set in your config/application.rb file or in your environment specific file (such as development.rb), or in an initializer for Solid Queue alone. For example, in your application.rb file, you'd include something like:
config.solid_queue.silence_polling = true

Thanks @rosa!  Having some values settable in application.rb and others set in config.yaml is a confusing developer experience.  I would think they would have parity

Hey @allcentury, the configuration in solid_queue.yml is for specific workers and dispatchers, whereas the configuration options set via config.solid_queue are for the Solid Queue's engine. Having these separate is a common pattern in Rails. For example, Active Storage's engine configuration options vs. Active Storage's specific storage service configuration. I'll make this clearer in the README.


JAMES-3302 Fix a dead link

This was modified from https://james.staged.apache.org/james-project/3.6.0/servers/distributed.html
using the [edit this page] button <3

I can't wait to see one of the pending PR merged to master to see if the website is indeed automatically rebuilt and republished :)

I can't wait to see one of the pending PR merged to master to see if the website is indeed automatically rebuilt and republished :)

We have an automatic rebuild for the website now? I didn't know... Hope it works :)

We have an automatic rebuild for the website now? I didn't know... Hope it works :)

Jean did fight with the Jenkins :-)


Copying values from IntelliJ extension doesn't work anymore

Hello! In the past, I remember being able to cmd+c after selecting a value in Portal (Intellij Extension), and it copied the value selected to the clipboard, but it stopped working some time ago (I don't remember how much, but it has been a while).
To reproduce: Using the IntelliJ extension, try copying a value.
Expected: value goes to clipboard
Actual: clipboard contents don't change
But if I use the copy command from the command pallet, it does work, so it seems to be some problem capturing the keybinding there.

@wilkerlucio I looked into this a bit and have some findings:

cmd+c appears to be working in a normal browser
The actual underlying copy command portal.ui.commands/copy does work in the plugin, which can be invoked via the command palette.
The ctrl+c shortcut works when using Intellij using windows
The cmd keyboard events is being triggered, but the corresponding c  events is never being triggered in the embedded browser 🤔

Also cmd+v doesn't appear to be working.

It appears to be that on osx, the embedded browser isn't allowing the copy/cut/paste shortcuts through to the application js. Not sure if this is a bug on the Intellij side, or if some additional configuration is required on the plugin side. Not sure how to fix this.

@wilkerlucio I looked into this a bit and have some findings:

cmd+c appears to be working in a normal browser

The ctrl+c shortcut works when using Intellij using windows

The cmd keyboard events is being triggered, but the corresponding c  events is never being triggered in the embedded browser 🤔

Also cmd+v doesn't appear to be working.

It appears to be that on osx, the embedded browser isn't allowing the copy/cut/paste shortcuts through to the application js. Not sure if this is a bug on the Intellij side, or if some additional configuration is required on the plugin side. Not sure how to fix this.

The alternate vim keybinding - Y - does work in the Intellij plugin to copy. Nothing works for pasting.


Add missing tags to azure api management services.

Codecov Report
Base: 28.48% // Head: 28.47% // Decreases project coverage by -0.01% :warning:

Coverage data is based on head (a892403) compared to base (a33b56e).
Patch coverage: 0.00% of modified lines in pull request are covered.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #409      +/-   ##
===========================================
- Coverage    28.48%   28.47%   -0.02%
===========================================
  Files           54       54
  Lines         4911     4913       +2
===========================================
  Hits          1399     1399
- Misses        3381     3383       +2
  Partials       131      131

Flag
Coverage Δ

unittests
28.47% <0.00%> (-0.02%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

pkg/provider/pulumi/azure/apimanagement.go
0.00% <0.00%> (ø)

pkg/provider/pulumi/azure/azure.go
5.61% <0.00%> (-0.03%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Added Code Of Conduct

Description
Added the code of conduct
Fixes # (issue) #106
Type of change
Please delete options that are not relevant.

[x] This change requires a documentation update

Test Required (Yes / No): No Testing required

Summary by CodeRabbit

Documentation

Introduced a comprehensive Contributor Covenant Code of Conduct to ensure a harassment-free community.
Added a section in the README.md referencing the new Code of Conduct.

closes #108


Add support to update column with secondary lookup vindex

Proposal / Motivation
This proposal is to support updating a column that is used as a secondary lookup vindex.
Currently Vitess does not support updates to any columns that have a vindex.
Per the design document:

This is because such changes could effectively require us to migrate a row from one shard to another.

We propose relaxing this restriction to support updating the implicitly created row used to implement the lookup vindex even though it may require moving the row to a different shard.
Design
First, let's define some constraints on which kind of updates will be supported.
Constraints

It will only support updates to columns that are secondary vindexes, not the primary vindex. This will avoid the more complicated case of having to migrate both the vindex rows and the row with the actual content.
It will not support updating vindexes that are shared among different tables since this could leave orphan rows in those tables. Because of this:

You can't update columns with secondary vindexes that are not owned by the table being updated.
You can't update columns with secondary vindexes that are shared by different tables.

Strategy
Given a statement within the constraints exposed above, the following strategy is proposed:

Select for update the current vindex column value from the row being updated. In this way we can get the existent values for all the columns that might have vindexes. This is very similar to what is being done in the delete plan.
Insert into a secondary owned vindexes the row with the updated column values.
Execute update statement to change the actual column.
Delete the old vindex entry.

Insert and delete are done in two steps because the vindex could be sharded and then the updated column value could land in a different shard.
This strategy should keep the same level of isolation existent before introducing this feature.
Example
Given a table with the following schema and secondary vindex on name:
create table user(user_id bigint, name varchar(128), primary key(user_id));

and existent row:

user_id
name

1
jose

For the following statement:
update user set name='rafael' where user_id=1

The plan should look similar to this:
select name from user where user_id = 1 for update
insert into name_user_idx(name, user_id) values ('rafael', 1)
update user set name = 'rafael' where user_id in (1)
delete from name_user_idx where (name = 'jose' and user_id = 1)

Partial Failure
Similarly to existing insert for tables with a secondary vindex, these operations are done in a best-effort manner.
For example in the case that insert to the vindex succeeds, but then actual update of the row fails, it is possible to leave inconsistent data in the vindex lookup table. However, this will not yield incorrect results to the application.

This plan looks good. Some minor comments:

On the Constraints implementation: you could add an exclusive flag to a vindex to indicate that it's not shared, and you can compute it at the time of loading vschema.
Partial Failure: VTGate will rollback the entire transaction if it detects partial failure. So, there's no need to worry about this.


:sparkles: feat: Create colorful rain with html, css and js.

In this feature was create colorful rain effect with only HTML, CSS and JavaScript.

merge approved.


[zjobs] Make throughput test work on systems with 2-4 GiB of RAM

This fix makes  test "JobQueue throughput"  use less jobs in such systems.

Thanks for the PR!


Updated iOS BranchSDK. Added handlers for universal links on app cold…

Added handlers for universal link data when app is launched from clicking universal links while the app is not running at all.

:+1: Looks great - I will update the docs a bit.


Infinite loop failing when an element contains "display: none"

Swiper Version: Swiper 6.6.2
Platform/Target and Browser Versions:  macOS - CHROME

What You Did
I have a sandbox that can be found here (please hit the refresh icon to load the state)
The main callout is that for "Slide 4" I am setting "display:none;":

Slide 4

Expected Behavior
Ability to infinitely loop when an element has the display:none supplied
Actual Behavior
The loop logic breaks when clicking the right arrow and unable to go past page 5 in the example (please hit the refresh icon to load the state)

Slides with "display: none" is not what is supported and probably not going too. Add/remove slides instead

@nolimits4web thanks for the response. Adding/Removing slides is not a solution for my use-case and is actually performance intensive to update the DOM by adding/removing.
At a minimum would it be possible to update the documents to call out that display: none is not supported so that other developers are aware of the library limitations?


Feature/publish grades

Adds the ability to publish grades in student repositories

Pull Request Test Coverage Report for Build 255

0 of 0   changed or added relevant lines in 0 files are covered.
206 unchanged lines in 2 files lost coverage.
Overall coverage decreased (-3.3%) to 78.357%

Files with Coverage Reduction
New Missed Lines
%

src/controllers/GitHubActions.ts
28
88.25%

src/controllers/340/AssignmentController.ts
178
46.42%

Totals

Change from base Build 253:
-3.3%

Covered Lines:
2515

Relevant Lines:
3132

💛  - Coveralls


Connecting to BTP ABAP Environment

Hi ,
I am trying to connect to BTP ABAP environment using:

ABAP FS Create Connection -> Cloud Instance. Enter connection End Point ( https://api.cf.eu10.hana.ondemand.com ) -> User Name and Password -> Specify the existing Service Key SAP_ADT.
Post the previous step it successfully authenticates in a separate browser.
Asks for destination File: User or workspace.
Selecting any one option. Asks for Connection Name ->Save Credentials-> Pops for Language..
Any idea on this. Any specific config that is missing.

Thanks
Tirthankar

Hi @tcjgec2008
All looks good
You should now have the ABAP system in tour workspace

You can navigate to your object or search for it with command abapfs search

Hi @marcellourbani ,
Thanks for your reply.Searching ABAP Objects gives me an error as below:
"No ABAP File System mounted in Workspace".
Also, There is not any project created under the Explorer of the VS Code.
Any idea on this.
Thanks
Tirthankar

@tcjgec2008
Did you connect to the system?
The steps you listed above create a connection in your config files, but then you need to run the abapfs connect command to connect

Hi @marcellourbani ,
Super. Thats the step , it was missing for me. 👍 👍
1 quick info:
We raised with SAP and 1 basic error we are getting is connecting to Onpremise Gitlab Server from BTP ABAP.
SAP has confirmed that for utilising abapgit, Gitserver should be available over the internet.
Does Vscode based GIT overcomes this obstacle.
Any idea on this.
Anyways many thanks for that help for connecting to the vscode from ABAP BTP. 👍
Thanks
Tirthankar

Hi @tcjgec2008
The integrated abapgit is based on SAP's, so it won't work
You can probably work around it with localtunnel or ngrok, but your IT won't like it :)
You can access gitlab from your laptop on vscode but it's not the same

PS: better than localtunnel, you can create your own private mirror on github and sync it via laptop
But it's off topic


Dependency Injection Extensions has 2 AddCors methods with exact same signature

When using Cors there are multiple overloads available when calling services.AddCors() in Startup.cs.
Both are referenced from the exact same IServiceCollection extension for DependencyInjection.  Compilation cannot occur because the call becomes ambiguous.

Look at your package references, you very likely are referencing both rc1 and rc2 packages in the same application.

Yep, almost certainly what @rynowak said. Check that everything is all RC2 packages.

Or if you can't get it to work, please share your project.json file.

Sorry I didn't see these responses sooner.  I can certainly look into that.  Please hold off on any suggestions until I do so which should be later this evening.  And thank you both for responding so quick.

Ok, you both are on to something...
The ASP.Cors reference, mind you as advised by the .NET Documentation website which has been updated for RC2...
ASP.Cors I have referenced as "rc1", probably because I used intellisense and didn't see rc2 is available or it is and I missed it.
I will close this issue and thanks again.

@vandensd glad you got it working!

Hi. I'm having the identical issue, except it's after creating a 1.0.0 .net Core app. I've added no other dependencies besides "Microsoft.AspNet.Cors": "6.0.0-rc1-final" as indicated in this  resource. Can anyone point out to me where I'm going wrong?

If you look at the page you provided the link to you will see: This page documents version 1.0.0-rc1 and has not yet been updated for version 1.0.0
You can't mix package versions. Try using 1.0.0 of the Cors package: https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/

@moozzyk, much appreciated. Awesome, that fixes it.


Fallback to pointer events if client doesn't support tablet protocol

See https://github.com/swaywm/wlroots/pull/960

I think it would actually be nicer to fallback to touch (which then falls back to pointer) here.
Provided we do want that feature. I'm not quite sure we ended up saying we do. It would be mostly weird hacks either way.

Why would falling back to touch be better?

Because I feel like the expected result of dragging (wrt scrolling/selection) would be closer to touch.
Then again, we'd have troubles mapping buttons in. So it's probably better do fallback to pointer to get slightly more sane fallback behaviour

Yeah, I'd prefer to fallback to pointer for both tablet and touch. I feel like the tablet → touch → pointer fallback is going to be pretty wonky.


Add auth links

NOTE that this PR updates the generated OpenAPI sources.
Preview of docs link:

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#441  👈
#437
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @eberle1080 and the rest of your teammates on  Graphite

@eberle1080 can you please add screenshots to show what this looks like? Then request Dion and me for review.

@eberle1080 You might want to just make a new PR rather than fix these merge conflicts.

@eberle1080 ping on this, please re-request review when this is revised.


'undefined' is not a function (evaluating 'factoryGuy.make.bind(factoryGuy)')

Hey I'm trying to use factory guy:
// app/models/user.js
import Ember from 'ember';
import Model from 'ember-data/model';
import attr from 'ember-data/attr';

const { computed } = Ember;

export default Model.extend({
  email: attr('string'),
  userName: attr('string'),
  firstName: attr('string'),
  lastName: attr('string'),
  gender: attr('string'),

  fullName: computed('firstName', 'lastName', function() {
    return `${this.get('firstName')} ${this.get('lastName')}`;
  }),
});

// tests/factories/user.js
import FactoryGuy from 'ember-data-factory-guy';

FactoryGuy.define('user', {
  default: {
    email<EMAIL_ADDRESS>    userName: 'johnconnor',
    firstName: 'John',
    lastName: 'Connor',
    gender: 'male',
  },
});

// tests/unit/models/user-test.js
import { moduleForModel, test } from 'ember-qunit';
import { make, manualSetup } from 'ember-data-factory-guy';

moduleForModel('user', 'Unit | Model | user', {
  needs: ['model:user'],

  beforeEach() {
    manualSetup(this.container);
  },
});

test('it works', function(assert) {
  const user = make('user');

  assert.equal(user.get('firstName'), 'John');
});

and I'm getting following error:
        actual: >
            null
        stack: >
            TypeError: 'undefined' is not a function (evaluating 'factoryGuy.make.bind(factoryGuy)')
        message: >
            Died on test #1     at test (http://localhost:7357/assets/test-support.js:3276)
                at http://localhost:7357/assets/test-support.js:6470
                at http://localhost:7357/assets/test-loader.js:69
                at http://localhost:7357/assets/test-loader.js:58
                at http://localhost:7357/assets/test-loader.js:89
                at http://localhost:7357/assets/test-support.js:6477: 'undefined' is not a function (evaluating 'factoryGuy.make.bind(factoryGuy)')
        Log: |

your running this test in phantom right?
to see it work run the test in localhost:your-port/tests
looks like you need to install phantom 2.0
are you on mac ? windows? linux?

@danielspaniel I'm usin mac and phantom, thats right!
thanks for quick reply!

your phantom version is 1.9 .. right?

can you upgrade that to 2.0

upgraded to 2.1.1, now everything works, thanks ! :)

np


⚠ Jenkins Plugins Artifactory has degraded performance

In f9dff28, Jenkins Plugins Artifactory (https://get.jenkins.io/plugins/artifactory/) experienced degraded performance:

HTTP code: 200
Response time: 1288 ms

Resolved: Jenkins Plugins Artifactory performance has improved in dd033a3 after 19 minutes.


!!! Bugfix, Migrations, Composer dependencies

A combination of https://github.com/daniellienert/metadata-extractor/tree/compatibility-3.0 and https://github.com/daniellienert/metadata-extractor/pull/1.
Furthermore I applied a few other migrations (only "Neos.Flow-20170127183102" produced changes).
Finally declared all dependencies in composer.json.
Please merge https://github.com/neos/metadata/pull/5 and release 2.0.0 or require dev-master as 2.0.x-dev in your root composer.json for now (since the master branch has no alias defined).
This should go into master after #3 goes into new branch 1.0.

Hey @ComiR,
sorry after all that changes the original code migration PR could not be merged and so not yours.
I tried to cherry pick some of your changes, which was not easy as most of the commits contain automatic style fixes together with the changes mentioned in the comments.
Would be great if you check the missing changes and do them in a new PR.
Thanks.


Firefox and Discover opens when switching to desktop mode.

Describe the bug
Anytime I switch from game mode to desktop mode, the Discover store and Firefox open up full screen automatically. I check the start up options in the settings app, but it's empty.
What did you expect to happen?
When switching from game mode to desktop mode, I expected to get to the desktop and no apps to automatically run.
Output of rpm-ostree status
gcdm@bazzite:~$ rpm-ostree status
State: idle
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-ally:stable
                   Digest: sha256:df6dfe0093e8d14255a87cae26dcafc059547a0b3b0c65a6f579530f6423ba31
                  Version: 40.20240828.0 (2024-08-29T00:23:19Z)

  ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-ally:stable
                   Digest: sha256:ac5a75caadca6ce2ab93012e772ad3254f74280efdbf46a01cf6bcc762746900
                  Version: 40.20240821.0 (2024-08-22T05:49:51Z)

Hardware
ROG Ally Extreme
Extra information or context
No response

Two things to check if you haven't already:

Settings > Startup & Shutdown > Desktop Session > On login > Restore previous session should be disabled
Check the contents of ~/.config/autostart or /etc/xdg/autostart

Let us know if either of those are helpful!


Vertical swipe for slick in verical mode

Is it possible?
It there an implementation?

I'd like to know this as well. When I switch on vertical mode, the swipe is left/right; generally speaking, how tricky would it be to make the swipe up/down? Anyone out there make this work?

https://github.com/kenwheeler/slick/issues/1001
:)

#1001
:)

Doh! Thanks! :+1:


Splitting of street and house number if a suite number is included

Describe the bug
Shopware doesn't have a separate field for house number and/or a suite number. A customer could enter it like this:
106-19 Dallas Road
The Adyen plugin splits it by looking for digits, but here a "-" is included, which causes the RegEx to fail, and no house number is sent to Adyen. This leads to a payment error, because address can't be checked.
Versions
Shopware version: all
Plugin version: all
To Reproduce
Just enter "106-19 Dallas Road" or something similar in the street field.
Expected behavior
The house number should be split from the street even if it includes a "-".

Seems Adyen developers are not interested in fixing problems.
This RegEx's in getSplitStreetAddressHouseNumber would fix the problem:
    $streetFirstRegex = '/(?<streetName>[\w\W]+)\s+(?<houseNumber>\d{1,10}((\s)?\w{1,3})?)$/m';
    $numberFirstRegex = '/^(?<houseNumber>\d{1,10}((\s)?\w{1,3})?)\s+(?<streetName>[\w\W]+)/m';

Hi @edip123! Thanks for opening this issue.
We're working on increasing our capacity to respond quicker to issues, but we also welcome and highly appreciate contributions via PRs. It would speed things up if you could kindly open a PR with your proposed solution so that we can review and test the changes.
Thanks!

Hi @peterojo
i created PR 3 weeks ago, but it needs to be reviewed and merged by you...


React Native 0.54 remove batchbridge

Is this a bug report?
Yes

Have you read the Installation Instructions?
Yes
Environment
react-native: 0.54.0
react: 16.3.0-alpha.1
react-native-maps: 0.20.1

Steps to Reproduce

upgrade react native to 0.54

Expected Behavior
react-native-maps works

(Write what you thought would happen.)
Actual Behavior
red screen failed, require faild,

(Write what happened. Add screenshots!)
Reproducible Demo

(Paste the link to an example project and exact instructions to reproduce the issue.)
https://github.com/taojoe/react-native-maps-rn54-break

That's your environment. Follow what the red screen says.

@taojoe try with the git version please and let us know.

Sure, is it duplicate of #2053 ?

@rborn
git version works.
now the map is not loaded well,  I don't know what the problem is.  I'm in China, so the default map of ios is "GAODE"?

@alvelig , yes it's duplicate

@taojoe same issue on android, i rerun "react-native run-android" and it working, you try rerun "react-native run-ios"

@taojoe @longpq18 if the map renders the logo is usually an api key issue.