Add an onChange hook to field-level configs

Description
I want an onChange event at the field-level - however this isn't supported so I'm instead using parse - but running into an issue when trying to do something on list-type fields like blocks, list, and group-list, digging into the code I can see there's no parse supplied at this level.
I understand that parse doesn't make any sense for my needs here, I'm proposing that we add an onChange, which is a "fire-and-forget" side effect whenever the field's value changes, whether that be a text input or a list.
Steps to reproduce
Build any form and supply a parse prop to an iteratable field type:
const formOptions = {
  fields: [
    {
      label: 'Authors List',
      name: 'rawJson.authors',
      component: 'group-list',
      description: 'Authors List',
      parse: () => {console.log("I will never be called")}
      fields: [
        {
          label: 'Name',
          name: 'name',
          component: 'text',
          parse: () => {console.log("I will be called when the text value changes")}
        },
      ],
    },
    //...
  ],
}

Expected result
parse runs for iterable fields when the order is changed or when an item is added/removed. I consider this a bug since the Typescript types indicate this is supported.
Actual result
parse never runs, format runs too often for my needs.

@jeffsee55 in my experience, parse runs when the data is being sent to the field component. format runs when the data is being serialized back into the form.

@chrisdmacrae Yeah that's my experience too, so parse should be the solution here.. but the issue is that it doesn't trigger for any of our list fields.

Dug into this with @chrisdmacrae on Friday, we'd expect an event from final form's mutator functions:
For example the block insert doesn't send an event when this happpens:
<EMAIL_ADDRESS>And it seems like it might be an issue with final form, not sure if it's suppposed to send an event here
https://github.com/final-form/final-form-arrays/issues/53

I've got a workaround for now, but it's pretty messy

@jeffsee55 https://github.com/tinacms/tina-graphql-gateway seems to be a private repository :( Any chance of making it public?

Sorry @zenflow but I'm not able to make that one public, it basically pulls the final-form array mutators apart and puts them back together with the addition of a callback that I need. Like I said, very messy - we'll work on getting something like this back into core with less junk
Here's one of the mutators we use as an example https://github.com/final-form/final-form-arrays/blob/master/src/move.js.
the gist is here:
import finalFormArrays from "final-form-arrays";
import { getIn, setIn } from "final-form";
import type { Form } from "tinacms";

export const fixMutators = (args: {
  callback: () => void;
  form: Form // Tina form instance
}) => {
  const { form, callback } = args;

  const changeValue = (state, name, mutate) => {
    const before = getIn(state.formState.values, name);
    const after = mutate(before);
    state.formState.values = setIn(state.formState.values, name, after) || {};
  };

 export const fixMutators = (args: {
  callback: () => void;
  form: Form // Tina form instance
}) => {
  const { form, callback } = args;

  const changeValue = (state, name, mutate) => {
    const before = getIn(state.formState.values, name);
    const after = mutate(before);
    state.formState.values = setIn(state.formState.values, name, after) || {};
  };

  const { move: moveCopy, remove: removeCopy, insert: insertCopy } = {
    ...form.finalForm.mutators,
  };
  form.finalForm.mutators.move = (name, from, to) => {
    // Grab the value that's being moved
    const dataValue = getIn(form.values[name], name);
    let state = {
      formState: { values: { fakeValue: dataValue } },
    };
    try {
      // @ts-ignore state is expecting the full final-form state, but we don't need it so we fake it for simplicity
      finalFormArrays.move(["fakeValue", from, to], state, { changeValue });
      // FIXME: this throws an error, probably because of "state" being faked but the mutation works :shrug:
    } catch (e) {
      // This is what you need
      callback(dataValue);
    }

    // Return the copy like nothing ever happened
    return moveCopy(name, from, to);
  };

Premise
I stumbled upon this issue and, in the interest of learning more about TinaCMS and Final-Form, decided to take a stab at introducing an onChange() hook at the form and field config levels.
Implementation

react-final-form has an optional package: React-Final-Form-Listeners that provides additional components for things like: OnFocus, OnBlur, and OnChange
I decided to embed the <OnChange /> component here (@tinacms/form-builder/fields-builder.js), just above the <FinalField /> component as that seemed the ideal spot to catch every field that the form would be responsible for.

Pros

Initial results were very promising: Most TinaCMS fields (text, number, image, color, toggle, markdown, tags, etc) triggered OnChange events as expected and provided field details, the current value, and the previous value.

Examples

Modifying a text field

[OnChange] Emitted by frontmatter.name (text): {"value":"Author","previous":""}

Changing an image field via MediaStore

[OnChange] Emitted by frontmatter.image (image): {"value":"/public/images/iceland-thumb.jpg","previous":"/images/davisco-5E5N49RWtbA-unsplash.jpg"}

Adding a tag to a tags field

[OnChange] Emitted by tags (tags): {"value":["blocks","123","i-am-pretty-long-tag"],"previous":["123","i-am-pretty-long-tag"]}

Changing a color field

[OnChange] Emitted by frontmatter.color (color): {"value":"#4A90E2","previous":"#A23232"}

Cons

Unfortunately, more complex TinaCMS fields (list, group, group-list, blocks, etc) resulted in an unusual and (at times) unexpected behavior.

List Examples

Inserting an item to an empty list

[OnChange] Emitted by frontmatter.lunch (list): {"value":["turkey"],"previous":[]}

Modifying an item in a list

[OnChange] Emitted by frontmatter.lunch (list): {"value":["hotdogs","turkey"],"previous":["","turkey"]}
[OnChange] Emitted by frontmatter.lunch.0 (text): {"value":"hotdogs","previous":""}

Inserting an item into an existing list

[OnChange] Emitted by frontmatter.lunch (list): {"value":["pizza","hotdogs","turkey"],"previous":["hotdogs","turkey"]}
[OnChange] Emitted by frontmatter.lunch.0 (text): {"value":"pizza","previous":"hotdogs"}
[OnChange] Emitted by frontmatter.lunch.1 (text): {"value":"hotdogs","previous":"turkey"}

Reordering items in a list

[OnChange] Emitted by frontmatter.lunch (list): {"value":["hotdogs","turkey","pizza"],"previous":["pizza","hotdogs","turkey"]}
[OnChange] Emitted by frontmatter.lunch.0 (text): {"value":"hotdogs","previous":"pizza"}
[OnChange] Emitted by frontmatter.lunch.1 (text): {"value":"turkey","previous":"hotdogs"}
[OnChange] Emitted by frontmatter.lunch.2 (text): {"value":"pizza","previous":"turkey"}

Group and Group-List Examples

Modifying a text field on a group

[OnChange] Emitted by photographer (group): {"value":{"name":"Author"},"previous":""}
[OnChange] Emitted by photographer.name (text): {"value":"Author","previous":""}

Inserting an item into an empty group-list

[OnChange] Emitted by photographer (group): {"value":{"name":"Author","social":[{}]},"previous":{"name":"Author"}}
[OnChange] Emitted by photographer.social (group-list): {"value":[{}],"previous":""}

Modifying a text field on an item in a group-list within a group

[OnChange] Emitted by photographer (group): {"value":{"name":"Author","social":[{"platformName":"LinkedIn"}]},"previous":{"name":"Author","social":[{"platformName":""}]}}
[OnChange] Emitted by photographer.social (group-list): {"value":[{"platformName":"LinkedIn"}],"previous":[{"platformName":""}]}
[OnChange] Emitted by photographer.social.0.platformName (text): {"value":"LinkedIn","previous":""}

Inserting an item into an existing group-list

[OnChange] Emitted by photographer (group): {"value":{"name":"Author","social":[{},{"platformName":"LinkedIn","account":"Author"}]},"previous":{"name":"Author","social":[{"platformName":"LinkedIn","account":"Author"}]}}
[OnChange] Emitted by photographer.social (group-list): {"value":[{},{"platformName":"LinkedIn","account":"Author"}],"previous":[{"platformName":"LinkedIn","account":"Author"}]}

Reordering items in a group-list

[OnChange] Emitted by photographer (group): {"value":{"name":"Author","social":[{"platformName":"LinkedIn","account":"Author"},{}]},"previous":{"name":"Author","social":[{},{"platformName":"LinkedIn","account":"Author"}]}}
[OnChange] Emitted by photographer.social (group-list): {"value":[{"platformName":"LinkedIn","account":"Author"},{}],"previous":[{},{"platformName":"LinkedIn","account":"Author"}]}

Outcome
After a handful of team-wide discussions, we've decided to stop this approach to OnChange due to two reasons:

Inconsistent behavior with lists and group-lists that might actually need to be addressed first

A general lack of clarity on what exactly is expected, especially when dealing with lists and groups.

For the second bullet, we bounced back and forth between wanting the entire, updated Array[] or Object{} and ignoring the individual item events and wanting to ignoring Array[] or Object{} and only emitting for string and number values.
In the ideal scenario, we would want better insight to how the onChange was triggered:

An item in a list was moved: Only emit the updated Array[], suppress any indivdual item events.
An item's value was modified: Only emit the individual item event, suppress the updated Array[].

At this point, react-final-form-listeners does not provide enough granularity to prevent propogation.
Additionally, when discussing group and group-lists, there is performance concerns when dealing with a group within a group within a group which Tina allows.  Such situations could result in a massive number of events triggering that might just become noise (and grind Tina to a halt).

This will be resolved with the useGraphQLForms refactor https://github.com/tinacms/tinacms/issues/2417


[Enhancement] - Refactor image upload button onto profile picture

Describe the Current Behavior/Feature:
Refactor the CHOOSE IMG button to appear only when hovering over the profile picture itself.
Rationale:
The profile is becoming quite visually crowded, with multiple input options all over the card. By limiting this input's visibility we can make it less "noisy".

Proposed Changes:
Refactor the upload function onto the profile picture, while adding CHOOSE IMG and a grayed-out background when hovering. It could look something like this:

@andycwilliams hi, assign this to me please

Just checking in to see if there are any updates @faddah

Checking in again for news


validator for disabled VR rooms

Is your feature request related to a problem? Please describe.
A lot of VR tables have hard-coded VR-ness and it is usually off:
const VR_Room = 0 ' usually some explanation

or
const VRRoom = 0 ' usually some explanation

It would be great if these could be detected and flagged.  Users can edit the script with something like this:
Dim VR_Room
If RenderingMode = 2 Then
    VR_Room = 1
Else
    VR_Room = 0
End If

and that will make it switch the VR_Room on if in VR mode.

another example:

https://vpuniverse.com/files/file/7311-magic-stern-1979/

dim VRRoom
VRRoom  = 0 ' 0 - VR Room off, 1 - Minimal VR Room

Fixed with 3.10


Missing coefficient for value loss in PPO implementation

Hi,
Is there a reason why you have chosen not to implement a coefficient like vf_coef for weighting the loss of the value function in PPO? As far as I know this is commonly available and can be a useful hyperparameter to tune.  Would you be open for a PR adding this?

Hi @dierkes-j , absolutely feel free to open up a PR and add the coefficient!

Closing due to inactivity. FWIW, I ran a sweep with the value loss coef. and didn't find improvement for a PPO trained quadruped joystick policy


List of symbols; Correct Time

Great work, but two issues:

Apparently time starts each day at 00:00:00 and hours are not taken from the filename but just incremeted. This does not work properly for example for german shares since they are not traded 24 hours. It would be better if the hour would be taken from the file name.
Pip value is different for different symbols, therefore a kind of configuration is needed. it can be for example in csv file. There is are actual symbols:

symbol, description, group, start available tick data, pip value
UNANLEUR,Unilever NV,Netherlands,18.11.2016,0.01
RANDNLEUR,Randstad Holding NV,Netherlands,02.03.2017,0.01
RDSANLEUR,Royal Dutch Shell PLC,Netherlands,18.11.2016,0.01
PHIANLEUR,Koninklijke Philips NV,Netherlands,02.03.2017,0.01
ASMLNLEUR,ASML Holding NV,Netherlands,02.03.2017,0.01
VPKNLEUR,Koninklijke Vopak NV,Netherlands,18.11.2016,0.01
WKLNLEUR,Wolters Kluwer NV,Netherlands,18.11.2016,0.01
KPNNLEUR,Koninklijke KPN NV,Netherlands,02.01.2017,0.01
INGANLEUR,ING Groep NV,Netherlands,28.11.2016,0.01
AKZANLEUR,Akzo Nobel NV,Netherlands,02.03.2017,0.01
RENNLEUR,RELX NV,Netherlands,18.11.2016,0.01
HEIANLEUR,Heineken NV,Netherlands,02.03.2017,0.01
MTNLEUR,ArcelorMittal,Netherlands,18.11.2016,0.01
AGNNLEUR,Aegon NV,Netherlands,02.03.2017,0.01
DSMNLEUR,Koninklijke DSM NV,Netherlands,30.12.2016,0.01
GTONLEUR,Gemalto NV,Netherlands,02.03.2017,0.01
AHNLEUR,Koninklijke Ahold Delhaize NV,Netherlands,19.12.2016,0.01
ULNLEUR,Unibail-Rodamco SE,Netherlands,18.11.2016,0.01
SANFREUR,Sanofi,France,05.08.2016,0.01
EIFREUR,Essilor International SA,France,08.11.2016,0.01
CAFREUR,Carrefour SA,France,08.11.2016,0.01
BNPFREUR,BNP Paribas SA,France,30.09.2016,0.01
SUFREUR,Schneider Electric SA,France,05.08.2016,0.01
LIFREUR,Klepierre,France,05.08.2016,0.01
ACAFREUR,Credit Agricole SA,France,30.09.2016,0.01
PUBFREUR,Publicis Groupe SA,France,05.08.2016,0.01
GLEFREUR,Societe Generale SA,France,08.11.2016,0.01
ACFREUR,Accor SA,France,11.08.2016,0.01
AIFREUR,Air Liquide SA,France,30.09.2016,0.01
LRFREUR,Legrand SA,France,12.08.2016,0.01
CSFREUR,AXA SA,France,07.11.2016,0.01
KERFREUR,Kering,France,08.11.2016,0.01
ORAFREUR,Orange SA,France,05.08.2016,0.01
SAFFREUR,Safran SA,France,05.08.2016,0.01
FPFREUR,Total SA,France,08.11.2016,0.01
AIRFREUR,Airbus Group SE,France,30.09.2016,0.01
ALOFREUR,Alstom SA,France,27.09.2016,0.01
UGFREUR,Peugeot SA,France,05.08.2016,0.01
CAPFREUR,Cap Gemini SA,France,08.11.2016,0.01
RNOFREUR,Renault SA,France,05.08.2016,0.01
FRFREUR,Valeo SA,France,08.11.2016,0.01
RIFREUR,Pernod-Ricard SA,France,05.08.2016,0.01
ENGIFREUR,Engie,France,07.11.2016,0.01
ORFREUR,L'Oreal SA,France,05.08.2016,0.01
VKFREUR,Vallourec SA,France,05.08.2016,0.01
AFFREUR,Air France-KLM,France,27.09.2016,0.01
BNFREUR,Danone SA,France,30.09.2016,0.01
EDFFREUR,Electricite de France SA,France,11.10.2016,0.01
MCFREUR,LVMH Moet Hennessy Louis Vuitton SA,France,05.08.2016,0.01
VIEFREUR,Veolia Environnement SA,France,05.08.2016,0.01
VIVFREUR,Vivendi SA,France,05.08.2016,0.01
ENFREUR,Bouygues SA,France,08.11.2016,0.01
SGOFREUR,Cie de St-Gobain,France,08.11.2016,0.01
DGFREUR,Vinci SA,France,07.11.2016,0.01
GFSGBGBX,G4S PLC,UK,07.07.2016,0.01
RBSGBGBX,Royal Bank of Scotland Group PLC,UK,08.07.2016,0.01
RELGBGBX,Reed Elsevier PLC,UK,08.07.2016,0.01
CNAGBGBX,Centrica PLC,UK,07.07.2016,0.01
KGFGBGBX,Kingfisher PLC,UK,07.07.2016,0.01
BNZLGBGBX,Bunzl PLC,UK,06.07.2016,0.01
FRESGBGBX,Fresnillo PLC,UK,07.07.2016,0.01
ABFGBGBX,Associated British Foods PLC,UK,30.06.2016,0.01
RBGBGBX,Reckitt Benckiser Group PLC,UK,06.07.2016,0.01
ITVGBGBX,ITV PLC,UK,07.07.2016,0.01
HMSOGBGBX,Hammerson PLC,UK,07.07.2016,0.01
CPIGBGBX,Capita PLC,UK,07.07.2016,0.01
MRWGBGBX,WM Morrison Supermarkets PLC,UK,07.07.2016,0.01
DGEGBGBX,Diageo PLC,UK,06.07.2016,0.01
SHPGBGBX,Shire PLC,UK,06.07.2016,0.01
RSAGBGBX,RSA Insurance Group PLC,UK,07.07.2016,0.01
BRBYGBGBX,Burberry Group PLC,UK,08.07.2016,0.01
HSBAGBGBX,HSBC Holdings PLC,UK,07.07.2016,0.01
LLOYGBGBX,Lloyds Banking Group PLC,UK,08.07.2016,0.01
GSKGBGBX,GlaxoSmithKline PLC,UK,06.07.2016,0.01
CRDAGBGBX,Croda International PLC,UK,01.11.2016,0.01
EXPNGBGBX,Experian PLC,UK,08.07.2016,0.01
AHTGBGBX,Ashtead Group PLC,UK,08.07.2016,0.01
ISATGBGBX,Inmarsat PLC,UK,08.07.2016,0.01
BPGBGBX,BP PLC,UK,07.07.2016,0.01
LSEGBGBX,London Stock Exchange Group PLC,UK,06.07.2016,0.01
IHGGBGBX,InterContinental Hotels Group PLC,UK,01.11.2016,0.01
ADMGBGBX,Admiral Group PLC,UK,14.07.2016,0.01
SKYGBGBX,Sky Plc,UK,07.07.2016,0.01
BATSGBGBX,British American Tobacco PLC,UK,06.07.2016,0.01
IAGGBGBX,International Consolidated Airlines Grou,UK,08.11.2016,0.01
CRHGBGBX,CRH PLC,UK,06.07.2016,0.01
SNGBGBX,Smith & Nephew PLC,UK,08.07.2016,0.01
ADNGBGBX,Aberdeen Asset Management PLC,UK,25.10.2016,0.01
AZNGBGBX,AstraZeneca PLC,UK,08.07.2016,0.01
RIOGBGBX,Rio Tinto PLC,UK,06.07.2016,0.01
BABGBGBX,Babcock International Group PLC,UK,07.07.2016,0.01
ITRKGBGBX,Intertek Group PLC,UK,06.07.2016,0.01
SGEGBGBX,Sage Group PLC/The,UK,08.07.2016,0.01
CPGGBGBX,Compass Group PLC,UK,08.07.2016,0.01
AALGBGBX,Anglo American PLC,UK,30.06.2016,0.01
RRSGBGBX,Randgold Resources Ltd,UK,06.07.2016,0.01
EZJGBGBX,easyJet PLC,UK,08.07.2016,0.01
ANTOGBGBX,Antofagasta PLC,UK,07.07.2016,0.01
BLNDGBGBX,British Land Co PLC,UK,08.07.2016,0.01
SLGBGBX,Standard Life PLC,UK,07.07.2016,0.01
RDSBGBGBX,Royal Dutch Shell PLC,UK,01.11.2016,0.01
IMTGBGBX,Imperial Brands Plc,UK,06.07.2016,0.01
CCLGBGBX,Carnival PLC,UK,06.07.2016,0.01
BTGBGBX,BT Group PLC,UK,07.07.2016,0.01
MNDIGBGBX,Mondi PLC,UK,08.07.2016,0.01
LGENGBGBX,Legal & General Group PLC,UK,07.07.2016,0.01
SBRYGBGBX,J Sainsbury PLC,UK,07.07.2016,0.01
PSNGBGBX,Persimmon PLC,UK,08.07.2016,0.01
RMGGBGBX,Royal Mail PLC,UK,07.07.2016,0.01
RRGBGBX,Rolls-Royce Holdings PLC,UK,08.07.2016,0.01
PSONGBGBX,Pearson PLC,UK,07.07.2016,0.01
NXTGBGBX,Next PLC,UK,06.07.2016,0.01
BARCGBGBX,Barclays PLC,UK,08.07.2016,0.01
AGKGBGBX,Aggreko PLC,UK,14.07.2016,0.01
GLENGBGBX,Glencore PLC,UK,07.07.2016,0.01
LANDGBGBX,Land Securities Group PLC,UK,07.07.2016,0.01
SMINGBGBX,Smiths Group PLC,UK,08.07.2016,0.01
BAGBGBX,BAE Systems PLC,UK,08.07.2016,0.01
GKNGBGBX,GKN PLC,UK,07.07.2016,0.01
NGGBGBX,National Grid PLC,UK,07.07.2016,0.01
OMLGBGBX,Old Mutual PLC,UK,07.07.2016,0.01
PFCGBGBX,Petrofac Ltd,UK,08.07.2016,0.01
BLTGBGBX,BHP Billiton PLC,UK,06.07.2016,0.01
AVGBGBX,Aviva PLC,UK,07.07.2016,0.01
PRUGBGBX,Prudential PLC,UK,07.07.2016,0.01
MKSGBGBX,Marks & Spencer Group PLC,UK,07.07.2016,0.01
AMZNUSUSD,AMAZON.COM INC,US,28.02.2017,0.01
GILDUSUSD,GILEAD SCIENCES INC,US,01.03.2017,0.01
EWJUSUSD,iShares MSCI Japan ETF,US,01.03.2017,0.01
XLIUSUSD,Industrial Select Sector SPDR Fund,US,01.03.2017,0.01
IWMUSUSD,iShares Russell 2000 ETF,US,01.03.2017,0.01
BACUSUSD,BANK OF AMERICA CORP,US,01.03.2017,0.01
XIVUSUSD,VelocityShares Daily Inverse VIX Short Term ETN,US,01.03.2017,0.01
XLPUSUSD,Consumer Staples Select Sector SPDR Fund,US,01.03.2017,0.01
USOUSUSD,United States Oil,US,01.03.2017,0.01
AVGOUSUSD,Broadcom Limited,US,01.03.2017,0.01
CMCSAUSUSD,COMCAST CORP-CLASS A,US,01.03.2017,0.01
NFLXUSUSD,NETFLIX INC,US,01.03.2017,0.01
EFAUSUSD,iShares MSCI EAFE ETF,US,01.03.2017,0.01
IYRUSUSD,iShares U.S. Real Estate ETF,US,01.03.2017,0.01
JNJUSUSD,JOHNSON & JOHNSON,US,01.03.2017,0.01
GSUSUSD,GOLDMAN SACHS GROUP INC,US,01.03.2017,0.01
AMGNUSUSD,AMGEN INC,US,01.03.2017,0.01
EWZUSUSD,iShares MSCI Brazil Capped,US,01.03.2017,0.01
IBMUSUSD,INTL BUSINESS MACHINES CORP,US,01.03.2017,0.01
WFCUSUSD,WELLS FARGO & CO,US,01.03.2017,0.01
TSLAUSUSD,TESLA MOTORS INC,US,01.03.2017,0.01
JNKUSUSD,SPDR Barclays Capital High Yield Bond ETF,US,01.03.2017,0.01
QQQUSUSD,PowerShares QQQ ETF,US,01.03.2017,0.01
XOPUSUSD,SPDR S&P Oil & Gas Explor & Prodtn ETF,US,01.03.2017,0.01
CSCOUSUSD,CISCO SYSTEMS INC,US,01.03.2017,0.01
KOUSUSD,COCA-COLA CO/THE,US,01.03.2017,0.01
ABEVUSUSD,Ambev S.A.,US,01.03.2017,0.01
SPYUSUSD,SPDR S&P 500 ETF,US,16.02.2017,0.01
GOOGUSUSD,ALPHABET INC-CL C,US,01.03.2017,0.01
XOMUSUSD,EXXON MOBIL CORP,US,01.03.2017,0.01
GOOGLUSUSD,ALPHABET INC-CL A,US,01.03.2017,0.01
PFEUSUSD,PFIZER INC,US,01.03.2017,0.01
PGUSUSD,PROCTER & GAMBLE CO/THE,US,01.03.2017,0.01
INTCUSUSD,INTEL CORP,US,01.03.2017,0.01
GDXUSUSD,VanEck Vectors Gold Miners ETF,US,01.03.2017,0.01
NVDAUSUSD,NVIDIA CORP,US,01.03.2017,0.01
BABAUSUSD,ALIBABA GROUP HOLDING-SP ADR,US,01.03.2017,0.01
PCLNUSUSD,PRICELINE GROUP INC/THE,US,01.03.2017,0.01
EEMUSUSD,iShares MSCI Emerging Markets ETF,US,01.03.2017,0.01
AZNUSUSD,AstraZeneca PLC,US,01.03.2017,0.01
MSFTUSUSD,MICROSOFT CORP,US,01.03.2017,0.01
VALEUSUSD,Vale S.A.,US,01.03.2017,0.01
DISUSUSD,WALT DISNEY CO/THE,US,01.03.2017,0.01
BAUSUSD,Boeing Co,US,28.02.2017,0.01
AAPLUSUSD,APPLE INC,US,28.02.2017,0.01
HDUSUSD,HOME DEPOT INC,US,01.03.2017,0.01
BBDUSUSD,Banco Bradesco S.A.,US,01.03.2017,0.01
VUSUSD,VISA INC-CLASS A SHARES,US,01.03.2017,0.01
CUSUSD,CITIGROUP INC,US,01.03.2017,0.01
TUSUSD,AT&T INC,US,01.03.2017,0.01
PBRUSUSD,Petroleo Brasileiro S.A.,US,01.03.2017,0.01
CVXUSUSD,CHEVRON CORP,US,01.03.2017,0.01
VXXUSUSD,iPath S&P 500 VIX ST Futures ETN,US,01.03.2017,0.01
ITUBUSUSD,Itau Unibanco Holding S.A.,US,01.03.2017,0.01
LVSUSUSD,Las Vegas Sands Corp.,US,01.03.2017,0.01
CSUSUSD,Credit Suisse Group AG,US,01.03.2017,0.01
FBUSUSD,FACEBOOK INC-A,US,01.03.2017,0.01
FXIUSUSD,iShares China Large-Cap ETF,US,01.03.2017,0.01
ALXNUSUSD,ALEXION PHARMACEUTICALS INC,US,01.03.2017,0.01
GEUSUSD,GENERAL ELECTRIC CO,US,01.03.2017,0.01
GLDUSUSD,SPDR Gold Shares ETF,US,01.03.2017,0.01
JPMUSUSD,JPMORGAN CHASE & CO,US,01.03.2017,0.01
TLTUSUSD,iShares 20+ Year Treasury Bond ETF,US,01.03.2017,0.01
XLFUSUSD,Financial Select Sector SPDR Fund,US,01.03.2017,0.01
GDXJUSUSD,VanEck Vectors Junior Gold Miners ETF,US,01.03.2017,0.01
GIVNCHCHF,Givaudan SA,Switzerland,30.05.2016,0.01
NESNCHCHF,Nestle SA,Switzerland,30.05.2016,0.01
SLHNCHCHF,Swiss Life Holding AG,Switzerland,30.05.2016,0.01
ZURNCHCHF,Zurich Insurance Group AG,Switzerland,21.08.2015,0.01
ABBNCHCHF,ABB Ltd,Switzerland,30.05.2016,0.01
LHNCHCHF,Lafarge Holcim Ltd,Switzerland,30.05.2016,0.01
ROGCHCHF,Roche Holding AG,Switzerland,30.05.2016,0.01
BAERCHCHF,Julius Baer Group Ltd,Switzerland,30.05.2016,0.01
LONNCHCHF,Lonza Group AG,Switzerland,30.05.2016,0.01
SCMNCHCHF,Swisscom AG,Switzerland,30.05.2016,0.01
ADENCHCHF,Adecco SA,Switzerland,30.05.2016,0.01
CSGNCHCHF,Credit Suisse Group AG,Switzerland,30.05.2016,0.01
GALNCHCHF,Galenica AG,Switzerland,30.05.2016,0.01
KNINCHCHF,Kuehne + Nagel International AG,Switzerland,30.05.2016,0.01
SOONCHCHF,Sonova Holding AG,Switzerland,30.05.2016,0.01
SRENCHCHF,Swiss Re AG,Switzerland,30.05.2016,0.01
NOVNCHCHF,Novartis AG,Switzerland,30.05.2016,0.01
UHRCHCHF,Swatch Group AG/The,Switzerland,30.05.2016,0.01
ATLNCHCHF,Actelion Ltd,Switzerland,30.05.2016,0.01
SGSNCHCHF,SGS SA,Switzerland,30.05.2016,0.01
SYNNCHCHF,Syngenta AG,Switzerland,02.11.2015,0.01
UBSGCHCHF,UBS Group AG,Switzerland,05.02.2016,0.01
SIKCHCHF,Sika AG,Switzerland,30.05.2016,0.01
CLNCHCHF,Clariant AG,Switzerland,30.05.2016,0.01
SECUBSESEK,Securitas AB,Sweden,07.11.2016,0.01
SKFBSESEK,SKF AB,Sweden,07.11.2016,0.01
ERICBSESEK,Telefonaktiebolaget LM Ericsson,Sweden,14.11.2016,0.01
ALFASESEK,Alfa Laval AB,Sweden,07.11.2016,0.01
NDASESEK,Nordea Bank AB,Sweden,07.11.2016,0.01
HMBSESEK,Hennes & Mauritz AB,Sweden,07.11.2016,0.01
TLSNSESEK,Telia Company AB,Sweden,14.11.2016,0.01
ELUXBSESEK,Electrolux AB,Sweden,07.11.2016,0.01
ABBSESEK,ABB Ltd,Sweden,14.11.2016,0.01
SCABSESEK,Svenska Cellulosa AB,Sweden,07.11.2016,0.01
SWEDASESEK,Swedbank AB,Sweden,07.11.2016,0.01
SKABSESEK,Skanska AB,Sweden,07.11.2016,0.01
SWMASESEK,Swedish Match AB,Sweden,07.11.2016,0.01
GETIBSESEK,Getinge AB,Sweden,07.11.2016,0.01
TEL2BSESEK,Tele2 AB,Sweden,07.11.2016,0.01
VOLVBSESEK,Volvo AB,Sweden,07.11.2016,0.01
ATCOASESEK,Atlas Copco AB,Sweden,14.11.2016,0.01
INVEBSESEK,Investor AB,Sweden,14.11.2016,0.01
AZNSESEK,AstraZeneca PLC,Sweden,14.11.2016,0.01
SEBASESEK,Skandinaviska Enskilda Banken AB,Sweden,14.11.2016,0.01
SANDSESEK,Sandvik AB,Sweden,07.11.2016,0.01
LINDEEUR,Linde AG,Germany,21.04.2015,0.01
BASDEEUR,BASF SE,Germany,22.04.2015,0.01
DTEDEEUR,Deutsche Telekom AG,Germany,31.03.2015,0.01
SDFDEEUR,K+S AG,Germany,15.04.2015,0.01
EOANDEEUR,E.ON SE,Germany,20.04.2015,0.01
LHADEEUR,Deutsche Lufthansa AG,Germany,21.04.2015,0.01
IFXDEEUR,Infineon Technologies AG,Germany,13.04.2015,0.01
DAIDEEUR,Daimler AG,Germany,27.03.2015,0.01
FREDEEUR,Fresenius SE & Co KGaA,Germany,10.04.2015,0.01
DB1DEEUR,Deutsche Boerse AG,Germany,25.01.2016,0.01
BEIDEEUR,Beiersdorf AG,Germany,08.04.2015,0.01
BMWDEEUR,Bayerische Motoren Werke AG,Germany,24.03.2015,0.01
BOSSDEEUR,HUGO BOSS AG,Germany,09.04.2015,0.01
TUI1DEEUR,TUI AG,Germany,15.04.2015,0.01
FMEDEEUR,Fresenius Medical Care AG & Co KGaA,Germany,01.04.2015,0.01
ADSDEEUR,Adidas AG,Germany,13.03.2015,0.01
PSMDEEUR,ProSiebenSat.1 Media AG,Germany,20.04.2015,0.01
CONDEEUR,Continental AG,Germany,08.04.2015,0.01
LXSDEEUR,Lanxess AG,Germany,21.04.2015,0.01
VNADEEUR,Vonovia SE,Germany,14.04.2015,0.01
BAYNDEEUR,Bayer AG,Germany,20.03.2015,0.01
TKADEEUR,ThyssenKrupp AG,Germany,14.04.2015,0.01
HEN3DEEUR,Henkel AG & Co KGaA,Germany,21.04.2015,0.01
SIEDEEUR,Siemens AG,Germany,20.04.2015,0.01
HEIDEEUR,HeidelbergCement AG,Germany,02.04.2015,0.01
DBKDEEUR,Deutsche Bank AG,Germany,25.03.2015,0.01
MRKDEEUR,Merck KGaA,Germany,24.03.2015,0.01
MUV2DEEUR,Muenchener Rueckversicherungs AG,Germany,21.04.2015,0.01
RWEDEEUR,RWE AG,Germany,16.04.2015,0.01
ALVDEEUR,Allianz SE,Germany,09.04.2015,0.01
CBKDEEUR,Commerzbank AG,Germany,26.03.2015,0.01
DPWDEEUR,Deutsche Post AG,Germany,31.03.2015,0.01
SAPDEEUR,SAP AG,Germany,16.04.2015,0.01
VOW3DEEUR,Volkswagen AG,Germany,14.04.2015,0.01
PAH3DEEUR,Porsche Automobil Holding SE,Germany,21.04.2015,0.01
USA30IDXUSD,USA 30 Index,IDX_AMERICA,04.04.2012,0.01
USA500IDXUSD,USA 500 Index,IDX_AMERICA,14.06.2012,0.01
USATECHIDXUSD,USA 100 Technical Index,IDX_AMERICA,14.06.2012,0.01
NES1VFIEUR,Neste OYJ,Finland,02.03.2017,0.01
OTE1VFIEUR,Outotec OYJ,Finland,21.11.2016,0.01
TLS1VFIEUR,Telia Company AB,Finland,09.11.2016,0.01
STERVFIEUR,Stora Enso OYJ,Finland,08.11.2016,0.01
OUT1VFIEUR,Outokumpu OYJ,Finland,03.11.2016,0.01
NRE1VFIEUR,Nokian Renkaat OYJ,Finland,03.11.2016,0.01
ELI1VFIEUR,Elisa OYJ,Finland,03.11.2016,0.01
IBEESEUR,Iberdrola SA,Spain,17.11.2016,0.01
CABKESEUR,CaixaBank,Spain,17.11.2016,0.01
AENAESEUR,Aena SA,Spain,14.11.2016,0.01
POPESEUR,Banco Popular Espanol SA,Spain,17.11.2016,0.01
GAMESEUR,Gamesa Corporacion Tecnologica SA,Spain,17.11.2016,0.01
ACXESEUR,Acerinox SA,Spain,14.11.2016,0.01
ELEESEUR,Endesa SA,Spain,17.11.2016,0.01
GASESEUR,Gas Natural SDG SA,Spain,17.11.2016,0.01
REPESEUR,Repsol SA,Spain,17.11.2016,0.01
ITXESEUR,Inditex SA,Spain,17.11.2016,0.01
SANESEUR,Banco Santander SA,Spain,17.11.2016,0.01
ABEESEUR,Abertis Infraestructuras SA,Spain,17.11.2016,0.01
ACSESEUR,ACS Actividades de Construccion y Servicios SA,Spain,14.11.2016,0.01
BBVAESEUR,Banco Bilbao Vizcaya Argentaria SA,Spain,17.11.2016,0.01
DIAESEUR,Distribuidora Internacional de Alimentacion SA,Spain,17.11.2016,0.01
ENGESEUR,Enagas SA,Spain,17.11.2016,0.01
REEESEUR,Red Electrica Corp SA,Spain,17.11.2016,0.01
MAPESEUR,Mapfre SA,Spain,17.11.2016,0.01
AMSESEUR,Amadeus IT Holding SA,Spain,17.11.2016,0.01
FERESEUR,Ferrovial SA,Spain,17.11.2016,0.01
SABESEUR,Banco de Sabadell SA,Spain,17.11.2016,0.01
TEFESEUR,Telefonica SA,Spain,17.11.2016,0.01
EURSGD,Euro vs Singapore Dollar,FX_CROSSES,09.02.2012,0.0001
USDMXN,US Dollar vs Mexican Peso,FX_CROSSES,04.10.2010,0.0001
AUDCHF,Australian Dollar vs Swiss Franc,FX_CROSSES,09.02.2012,0.0001
GBPCAD,Pound Sterling vs Canadian Dollar,FX_CROSSES,09.02.2012,0.0001
GBPCHF,Pound Sterling vs Swiss Franc,FX_CROSSES,09.02.2012,0.0001
USDNOK,US Dollar vs Norwegian Krone,FX_CROSSES,09.02.2012,0.0001
EURHKD,Euro vs Hong Kong Dollar,FX_CROSSES,09.02.2012,0.0001
AUDJPY,Australian Dollar vs Japanese Yen,FX_CROSSES,09.02.2012,0.01
CADJPY,Canadian Dollar vs Japanese Yen,FX_CROSSES,09.02.2012,0.01
CHFJPY,Swiss Franc vs Japanese Yen,FX_CROSSES,09.02.2012,0.01
USDDKK,US Dollar vs Danish Krone,FX_CROSSES,09.02.2012,0.0001
EURJPY,Euro vs Japanese Yen,FX_CROSSES,01.04.2007,0.01
NZDCAD,New Zealand Dollar vs Canadian Dollar,FX_CROSSES,09.02.2012,0.0001
USDSEK,US Dollar vs Swedish Krona,FX_CROSSES,09.02.2012,0.0001
EURNZD,Euro vs New Zealand Dollar,FX_CROSSES,09.02.2012,0.0001
AUDSGD,Australian Dollar vs Singapore Dollar,FX_CROSSES,09.02.2012,0.0001
CHFSGD,Swiss Franc vs Singapore Dollar,FX_CROSSES,09.02.2012,0.0001
SGDJPY,Singapore Dollar vs Japanese Yen,FX_CROSSES,15.02.2012,0.01
EURPLN,Euro vs Polish Zloty,FX_CROSSES,09.02.2012,0.0001
EURAUD,Euro vs Australian Dollar,FX_CROSSES,09.02.2012,0.0001
TRYJPY,Turkish Lira vs Japanese Yen,FX_CROSSES,09.05.2010,0.01
GBPAUD,Pound Sterling vs Australian Dollar,FX_CROSSES,09.02.2012,0.0001
EURNOK,Euro vs Norwegian Krone,FX_CROSSES,09.02.2012,0.0001
USDPLN,US Dollar vs Polish Zloty,FX_CROSSES,09.02.2012,0.0001
USDHKD,US Dollar vs Hong Kong Dollar,FX_CROSSES,09.02.2012,0.0001
CHFPLN,Swiss Franc vs Polish Zloty,FX_CROSSES,09.02.2012,0.0001
EURDKK,Euro vs Danish Krone,FX_CROSSES,09.02.2012,0.0001
USDTRY,US Dollar vs Turkish Lira,FX_CROSSES,09.02.2012,0.0001
GBPNZD,Pound Sterling vs New Zealand Dollar,FX_CROSSES,09.02.2012,0.0001
USDCNH,US Dollar vs Offshore Chinese Renminbi,FX_CROSSES,22.04.2014,0.0001
CADCHF,Canadian Dollar vs Swiss Franc,FX_CROSSES,09.02.2012,0.0001
USDRUB,US Dollar vs Russian Ruble,FX_CROSSES,09.02.2012,0.0001
EURRUB,Euro vs Russian Rouble,FX_CROSSES,15.02.2012,0.0001
AUDCAD,Australian Dollar vs Canadian Dollar,FX_CROSSES,15.02.2012,0.0001
EURSEK,Euro vs Swedish Krona,FX_CROSSES,09.02.2012,0.0001
EURTRY,Euro vs Turkish Lira,FX_CROSSES,09.02.2012,0.0001
NZDCHF,New Zealand Dollar vs Swiss Franc,FX_CROSSES,09.02.2012,0.0001
AUDNZD,Australian Dollar vs New Zealand Dollar,FX_CROSSES,09.02.2012,0.0001
USDSGD,US Dollar vs Singapore Dollar,FX_CROSSES,09.02.2012,0.0001
GBPJPY,Pound Sterling vs Japanese Yen,FX_CROSSES,09.02.2012,0.01
HKDKPY,Hong Kong Dollar vs Japanese Yen,FX_CROSSES,01.10.2010,0.0001
EURGBP,Euro vs Pound Sterling,FX_CROSSES,09.02.2012,0.0001
CADHKD,Canadian Dollar vs Hong Kong Dollar,FX_CROSSES,09.02.2012,0.0001
ZARJPY,South African Rand vs Japanese Yen,FX_CROSSES,02.08.2012,0.01
NZDJPY,New Zealand Dollar vs Japanese Yen,FX_CROSSES,22.03.2012,0.01
USDZAR,US Dollar vs South African Rand,FX_CROSSES,09.02.2012,0.0001
EURCAD,Euro vs Canadian Dollar,FX_CROSSES,09.02.2012,0.0001
EURCHF,Euro vs Swiss Franc,FX_CROSSES,09.02.2012,0.0001
YARNONOK,Yara International ASA,Norway,15.11.2016,0.01
TELNONOK,Telenor ASA,Norway,14.11.2016,0.01
NHYNONOK,Norsk Hydro ASA,Norway,09.02.2017,0.01
STLNONOK,Statoil ASA,Norway,14.11.2016,0.01
DNBNONOK,DNB ASA,Norway,14.11.2016,0.01
MHGNONOK,Marine Harvest ASA,Norway,14.11.2016,0.01
ORKNONOK,Orkla ASA,Norway,14.11.2016,0.01
COLOBDKDKK,Coloplast A/S,Denmark,07.11.2016,0.01
NOVOBDKDKK,Novo Nordisk A/S,Denmark,08.11.2016,0.01
NZYMBDKDKK,Novozymes A/S,Denmark,08.11.2016,0.01
DANSKEDKDKK,Danske Bank A/S,Denmark,08.11.2016,0.01
PNDORADKDKK,Pandora A/S,Denmark,08.11.2016,0.01
MAERSKBDKDKK,AP Moeller - Maersk A/S,Denmark,08.11.2016,0.01
VWSDKDKK,Vestas Wind Systems A/S,Denmark,08.11.2016,0.01
CARLBDKDKK,Carlsberg A/S,Denmark,07.11.2016,0.01
TSCOGBGBX,Tesco PLC,Others,08.07.2016,0.01
UUGBGBX,United Utilities Group PLC,Others,08.07.2016,0.01
WEIRGBGBX,Weir Group PLC/The,Others,08.07.2016,0.01
TLWGBGBX,Tullow Oil PLC,Others,07.07.2016,0.01
WOSGBGBX,Wolseley PLC,Others,06.07.2016,0.01
SSEGBGBX,SSE PLC,Others,08.07.2016,0.01
TATEGBGBX,Tate & Lyle PLC,Others,08.07.2016,0.01
TPKGBGBX,Travis Perkins PLC,Others,08.07.2016,0.01
WPPGBGBX,WPP PLC,Others,08.07.2016,0.01
VODGBGBX,Vodafone Group PLC,Others,07.07.2016,0.01
ULVRGBGBX,Unilever PLC,Others,06.07.2016,0.01
WTBGBGBX,Whitbread PLC,Others,06.07.2016,0.01
SVTGBGBX,Severn Trent PLC,Others,06.07.2016,0.01
STANGBGBX,Standard Chartered PLC,Others,07.07.2016,0.01
BRENTCMDUSD,US Brent Crude Oil,CMD_ENERGY,02.12.2010,0.01
GASCMDUSD,Natural Gas,CMD_ENERGY,25.06.2012,0.001
LIGHTCMDUSD,US Light Crude Oil,CMD_ENERGY,01.01.2013,0.01
KBCBEEUR,KBC Groep NV,Belgium,07.11.2016,0.01
SOLBBEEUR,Solvay SA,Belgium,07.11.2016,0.01
AGSBEEUR,Ageas,Belgium,09.01.2017,0.01
UCBBEEUR,UCB SA,Belgium,07.11.2016,0.01
UMIBEEUR,Umicore SA,Belgium,07.11.2016,0.01
BELGBEEUR,Proximus,Belgium,07.11.2016,0.01
ABIBEEUR,Anheuser-Busch InBev NV,Belgium,23.12.2016,0.01
EURUSD,Euro vs US Dollar,FX_MAJORS,01.01.2007,0.0001
USDCAD,US Dollar vs Canadian Dollar,FX_MAJORS,09.02.2012,0.0001
NZDUSD,New Zealand Dollar vs US Dollar,FX_MAJORS,27.03.2007,0.0001
AUDUSD,Australian Dollar vs US Dollar,FX_MAJORS,04.08.2003,0.0001
USDJPY,US Dollar vs Japanese Yen,FX_MAJORS,27.03.2007,0.01
GBPUSD,Pound Sterling vs US Dollar,FX_MAJORS,09.02.2012,0.0001
USDCHF,US Dollar vs Swiss Franc,FX_MAJORS,09.02.2012,0.0001
VOEATEUR,Voestalpine AG,Austria,04.11.2016,0.01
RBIATEUR,Raiffeisen Bank International AG,Austria,02.11.2016,0.01
EBSATEUR,Erste Group Bank AG,Austria,04.11.2016,0.01
ESPIDXEUR,Spain 35 Index,IDX_EUROPE,02.01.2012,0.01
EUSIDXEUR,Europe 50 Index,IDX_EUROPE,27.08.2012,0.01
GBRIDXGBP,UK 100 Index,IDX_EUROPE,14.06.2012,0.01
CHEIDXCHF,Switzerland 20 Index,IDX_EUROPE,14.06.2012,0.01
DEUIDXEUR,Germany 30 Index,IDX_EUROPE,14.06.2012,0.01
FRAIDXEUR,France 40 Index,IDX_EUROPE,14.06.2012,0.01
HKGIDXHKD,Hong Kong 40 Index,IDX_ASIA,03.06.2013,0.01
AUSIDXAUD,Australia 200 Index,IDX_ASIA,02.01.2013,0.01
JPNIDXJPY,Japan 225,IDX_ASIA,14.06.2012,0.01
COPPERCMDUSD,High Grade Copper,CMD_METALS,01.03.2012,0.001
XAGUSD,Spot silver,FX_METALS,25.07.2014,0.01
XAUUSD,Spot gold,FX_METALS,05.05.2003,0.01
EDPPTEUR,EDP - Energias de Portugal SA,Portugal,17.11.2016,0.01
GALPPTEUR,Galp Energia SGPS SA,Portugal,17.11.2016,0.01
EURHUF,EURHUF,Exotic,15.03.2007,0.0001
EURMXN,EURMXN,Exotic,14.03.2007,0.0001
EURZAR,EURZAR,Exotic,14.03.2007,0.0001
HKDJPY,HKDJPY,Exotic,14.03.2007,0.01
MXNJPY,MXNJPY,Exotic,05.06.2007,0.01
NZDSGD,NZDSGD,Exotic,14.03.2007,0.0001
USDBRL,USDBRL,Exotic,14.03.2007,0.0001
USDHUF,USDHUF,Exotic,14.03.2007,0.0001
WTICMDUSD,WTI Light Crude Oil,Commodities,20.09.2011,0.01
CUCMDUSD,Copper,Commodities,19.09.2011,0.01
AUCMDUSD,Gold,Commodities,26.02.2013,0.01
E_SI,Silver,Commodities,26.02.2013,0.01
PDCMDUSD,Palladium,Commodities,19.09.2011,0.01
PTCMDUSD,Platinum,Commodities,19.09.2011,0.01
USAMJRIDXUSD,USA Major Index,Indexes,19.09.2011,0.1
BRAIDXBRL,Brasil Index,Indexes,08.10.2013,0.0001
USACOMIDXUSD,USA Composite Index,Indexes,19.09.2011,0.1
NLDIDXEUR,Netherlands 25 Index,Indexes,26.02.2013,0.01
ITAIDXEUR,Italy 40 Index,Indexes,26.02.2013,0.01

Hello everyone. This library is really helpful.
I have a problem to download stock data, one week ago, the library work with the symbols mentioned in this post but right now it does not work anymore, . I will apreciate any help.
Thanks in advance

Thank you! Been searching for FTSE100 code for ages. Amazing! How did you get this list?


dplyr drops col_ attributes when applied to xmap_df

When testing reset_xmap_df():
This works:
    ## alternative weights
    w2 <- df |>
      dplyr::mutate(w2 = c(1, 1, 1, 0.4, 0.6)) |>
      as_xmap.data.frame(f1, t1, w2)
    w2_reset <- df |>
      dplyr::mutate(w2 = c(1, 1, 1, 0.4, 0.6)) |>
      as_xmap.data.frame(f1, t1, w1) |>
      reset_xmap_df(new_weights = "w2")
    testthat::expect_identical(w2, w2_reset)

But not if the mutate comes after as_xmap:
    w2_reset <- df |>
      as_xmap.data.frame(f1, t1, w1) |>
      dplyr::mutate(w2 = c(1, 1, 1, 0.4, 0.6)) |>
      reset_xmap_df(new_weights = "w2")

This is because dplyr seems to modify the xmap_df object, but annoyingly retains the class attributes:
df |>
    as_xmap.data.frame(f1, t1, w1) |>
   dplyr::mutate(w2 = c(1, 1, 1, 0.4, 0.6)) |> attributes()
#> $names
#> [1] "f1" "t1" "w1" "w2"
#>
#> $row.names
#> [1] 1 2 3 4 5
#>
#> $class
#> [1] "xmap_df"    "xmap"       "data.frame"

This is not really a bug. In fact in light of #94 it's actually a good feature

I take that back -- it is annoying when implementing #95 because I can't just check that the xmap argument is of class xmap -- since it's possible that the weights have been modified -- i.e. need to revalidate the crossmap


Figure out how to integrate Pro Filters with Mapping resources

Please describe your use case / problem.
It would be good to integrate the A/Pro FilterPolicy resource type with the A/OSS Mapping resource type.
An A/Pro FilterPolicy looks like:
---
apiVersion: getambassador.io/v1beta2
kind: FilterPolicy
metadata:
  name: httpbin-policy
spec:
  rules:
    - host: "*"
      path: /httpbin/
      filters:
        - name: auth_filter # this refers to an instance of a `Filter` resource
          arguments:
            scopes:
            - "scope1"
            - "scope2"

An A/OSS Mapping looks like:
---
apiVersion: getambassador.io/v1
kind:  Mapping
metadata:
  name:  httpbin-mapping
spec:
  prefix: /httpbin/
  service: http://httpbin

You end up having to specify the same routes twice all the time, once for OSS and once for Pro.
Describe the solution you'd like
It would make a lot of sense, from a user-perspective, to just add a Pro-only filters field to the Mapping resource type.
Figuring out a good implementation strategy for that is less obvious.

One solution would be to have OSS accept but ignore the filters field, and have Pro also watch Mappings.  However, it would be good for OSS to be able to display a warning if you try to use filters but aren't running Pro.

notstale

notstale

notstale


[IBM] update ibm docs for openshift

Update kubeflow installtion docs for ibm openshift
reorganize kfctl installation and deployment process to a separate file to remove duplication
move uninstall-kubeflow instruction from installation steps to remove redundancy
change link that pointed to uninstalling step on kubeflow install step to point to uninstall-kubeflow page
fix a markdown formatting issue in ibm/create-cluster.md file

/lgtm

/assign @animeshsingh

/lgtm
/approve


Create FUNDING.ymls

Thank you for the attention, but the github.com/golang/protobuf module is frozen except for essential bug fixes and regressions from one of the more recent versions.


Fixing #246: update signature and fiddle properties in project/Paradox.scala

Fix issue #246

The Paradox.scala props have been updated to pekko value.
The scalafiddle.js has been reverted to org.akka-js. Akka.js is distributed under Scala LICENSE

I'm not sure how to proceed with this.
I've never used Scala Fiddle. https://scalafiddle.io/ seems to be broken. It's possible that we might be better off removing the scalafiddle stuff in the pekko docs and just presenting the sample code as something that the user needs to work out how to run.

I'm not sure how to proceed with this.
I've never used Scala Fiddle. https://scalafiddle.io/ seems to be broken. It's possible that we might be better off removing the scalafiddle stuff in the pekko docs and just presenting the sample code as something that the user needs to work out how to run.

Yes, Scalafiddle seems unresponsive (see https://github.com/scala/scala-lang/issues/1295) I can proceed by removing the snippet entirely.

Also, regarding the @@signature placeholder:

The only place it is used is in the mergePrioritizedN.md file
The mergePrioritizedN.md Signature subheading is broken and pointing to the wrong Source path

I think this might be replaced with the @apidoc similar to the mergePrioritized.md#Signature

Thanks @samueleresca - seems like getting rid of the fiddle and signature stuff is best


Dialog: add destroyOnClose attribute

Please make sure these boxes are checked before submitting your PR, thank you!

[ ] Make sure you follow Element's contributing guide (中文 | English | Español | Français).
[ ] Make sure you are merging your commits to dev branch.
[ ] Add some descriptions and refer relative issues for you PR.

Closes #15949

对于需要过渡效果的元素，key 的位置不能随便加。参见 demo https://codepen.io/ziyoung/pen/oraaBL


Onlne Demo is broken

@diashenrique, could you please update the GCP key in order to fixes did By @SergeyMi37 work? Thanks!


Strange error in job

I used the sample dockercompose.yml file to deploy，but there is no data after the test request
I checked the log and found a lot of exceptions in the job. This error seems to be caused by the elasticsearch version below 7.0, but the elasticsearch I deployed is 7.10.0, and the nest used by the job is also above 7.0. I am confused how to solve this problem
[08:20:20 ERR] Job run CloseInactiveSessionsJob failed: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Int64' because the type requires a JSON primitive value (e.g. string, number, boolean, null) to deserialize correctly. To fix this error either change the JSON to a JSON primitive value (e.g. string, number, boolean, null) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'hits.total.value', line 1, position 113. Elasticsearch.Net.UnexpectedElasticsearchClientException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Int64' because the type requires a JSON primitive value (e.g. string, number, boolean, null) to deserialize correctly. To fix this error either change the JSON to a JSON primitive value (e.g. string, number, boolean, null) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'hits.total.value', line 1, position 113. ---> Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Int64' because the type requires a JSON primitive value (e.g. string, number, boolean, null) to deserialize correctly. To fix this error either change the JSON to a JSON primitive value (e.g. string, number, boolean, null) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'hits.total.value', line 1, position 113.    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)    at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)    at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader)    at Nest.JsonNetSerializer.Deserialize[T](Stream stream)    at Nest.JsonNetSerializer.DeserializeAsync[T](Stream stream, CancellationToken cancellationToken)    at Elasticsearch.Net.ResponseBuilder1.SetBodyAsync(ElasticsearchResponse1 response, Stream stream)    at Elasticsearch.Net.ResponseBuilder1.ToResponseAsync()
at Elasticsearch.Net.HttpConnection.RequestAsync[TReturn](RequestData requestData, CancellationToken cancellationToken)
at Elasticsearch.Net.RequestPipeline.CallElasticsearchAsync[TReturn](RequestData requestData, CancellationToken cancellationToken)
at Elasticsearch.Net.Transport1.RequestAsync[TReturn](HttpMethod method, String path, CancellationToken cancellationToken, PostData1 data, IRequestParameters requestParameters)
--- End of inner exception stack trace ---`
{"type": "server", "timestamp": "2021-01-06T08:17:10,940Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "b4c284a548d6", "message": "version[7.10.0], pid[8], build[default/docker/51e9d6f22758d0374a0f3f5c6e8f3a7997850f96/2020-11-09T21:30:33.964949Z], OS[Linux/3.10.0-1062.el7.x86_64/amd64], JVM[AdoptOpenJDK/OpenJDK 64-Bit Server VM/15.0.1/15.0.1+9]" }

How many stacks are in this stacks and recent event indexes? I'm also curious what is the largest size of the stacks and event index?

How many stacks are in this stacks and recent event indexes? I'm also curious what is the largest size of the stacks and event index?


Added non-root user to dockerfile

Docker file added multistage build to add non-root user running under user ID:20001 for image.
Reduces attack surface by not running image as root user

Coverage remained the same at 61.744% when pulling 4250066ad619ab446513fbdff3dcbc45afb2fbed on JanisOrlovs:master into 6d2cae6fa8a36869d121c8128d06cd118239cd4a on wrouesnel:master.


Fog::Compute::AWS::Error: AuthFailure

chef exec gem install  knife-ec2
==========================
Fetching: fog-1.29.0.gem (100%)
Successfully installed fog-1.29.0
Fetching: knife-ec2-0.12.0.gem (100%)
Successfully installed knife-ec2-0.12.0
2 gems installed

chef exec knife ec2 server list | wc -l
=================================
WARNING: No region was specified in knife.rb or as an argument. The default region, us-east-1, will be used:
ERROR: Fog::Compute::AWS::Error: AuthFailure => AWS was not able to validate the provided access credentials

Correct credential are used in below setting
knife[:aws_access_key_id] = "Your AWS Access Key ID"
knife[:aws_secret_access_key] = "Your AWS Secret Access Key"
or
knife[:aws_credential_file] = "/path/to/credentials/file"
But still Fog authFailure is occuring.
Please suggest some solution or Is there any dependency issue persist related to fog?

@mgdevstack , we are looking into this.

@mgdevstack , aws_credential_file option was working for us.
Please check the credential file format below:
AWSAccessKeyId=YourAWSAccessKeyID
AWSSecretKey=YourAWSSecretAccessKey

OR
[default]
aws_access_key_id = You AWSAccessKeyID
aws_secret_access_key = YourAWSSecretAccessKey

Make sure that [default] is added in case of 2nd format.

@Vasu1105 . in knife-ec2-0.8.0 it is working but on upgrading plugin to 0.12.0.. It is showing Fog Error.

@mgdevstack , we checked with knife-ec2 0.12.0 also but didn't face this issue. We have tried the with chef exec knife ec2 server list and knife-ec2 server list.

@mgdevstack, can you show us all the gems you have installed via gem list? Also, when you run the knife command, can you specify the -c parameter and point it at your knife.rb?
Last, can you run knife rehash to make sure we're picking up the latest commands?
To me, what you're seeing is symptomatic of possibly looking at the wrong config file. Some lookups for config may have changed between knife-ec2 versions and hence the error.

@adamedx I'm getting the same error.
My ~/.chef/config.rb:
# knife-ec2 settings
knife[:region] = 'us-west-2'
knife[:aws_credential_file] = File.join(ENV['HOME'], "/.aws/credentials")
knife[:aws_profile] = 'my-custom-profile'

My ~/.aws/credentials:
[my-custom-profile]
aws_access_key_id=<MY_VALID_KEY>
aws_secret_access_key=<my_secret_access_key>
aws_session_token="my-session-token"
aws_security_token="my-session-token"

Stacktrace
➜  ~  knife ec2 server create -f t2.micro -I ami-22b9a343 --ssh-key chef_team_test --identity-file ~/.ssh/chef_team_test --ssh-user ubuntu --subnet subnet-1234abcd -g sg-123f4567 -VV
INFO: Using configuration from /Users/doug/.chef/config.rb
DEBUG: Looking for key use_iam_profile and found value false
DEBUG: Looking for key region and found value us-west-2
DEBUG: Looking for key use_iam_profile and found value false
DEBUG: Looking for key aws_access_key_id and found value <MY_VALID_KEY>
DEBUG: Looking for key aws_secret_access_key and found value <my_secret_access_key>
DEBUG: Looking for key aws_session_token and found value
DEBUG: Looking for key image and found value ami-22b9a343
/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/expects.rb:6:in `response_call': AuthFailure => AWS was not able to validate the provided access credentials (Fog::Compute::AWS::Error)
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/response_parser.rb:8:in `response_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:372:in `response'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:236:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/idempotent.rb:26:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/base.rb:10:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/base.rb:10:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:256:in `rescue in request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:204:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/idempotent.rb:26:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/base.rb:10:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/base.rb:10:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:256:in `rescue in request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:204:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/idempotent.rb:26:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/base.rb:10:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/middlewares/base.rb:10:in `error_call'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:256:in `rescue in request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/excon-0.45.4/lib/excon/connection.rb:204:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-xml-0.1.2/lib/fog/xml/sax_parser_connection.rb:35:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-xml-0.1.2/lib/fog/xml/connection.rb:7:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-aws-0.7.6/lib/fog/aws/compute.rb:525:in `_request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-aws-0.7.6/lib/fog/aws/compute.rb:520:in `request'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-aws-0.7.6/lib/fog/aws/requests/compute/describe_images.rb:49:in `describe_images'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-aws-0.7.6/lib/fog/aws/models/compute/images.rb:46:in `all'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/fog-aws-0.7.6/lib/fog/aws/models/compute/images.rb:52:in `get'
	from /Users/doug/.chefdk/gem/ruby/2.1.0/gems/knife-ec2-0.12.0/lib/chef/knife/ec2_server_create.rb:732:in `ami'
	from /Users/doug/.chefdk/gem/ruby/2.1.0/gems/knife-ec2-0.12.0/lib/chef/knife/ec2_server_create.rb:744:in `validate!'
	from /Users/doug/.chefdk/gem/ruby/2.1.0/gems/knife-ec2-0.12.0/lib/chef/knife/ec2_server_create.rb:399:in `run'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife.rb:405:in `block in run_with_pretty_exceptions'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/local_mode.rb:44:in `with_server_connectivity'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife.rb:404:in `run_with_pretty_exceptions'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/knife.rb:203:in `run'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/lib/chef/application/knife.rb:142:in `run'
	from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.5.1/bin/knife:25:in `<top (required)>'
	from /usr/local/bin/knife:54:in `load'
	from /usr/local/bin/knife:54:in `<main>'

@dougireton We able to reproduce issue with aws_sessions_token. When we pass this option through configuration file i.e. knife.rb in you case it is ~/.chef/config.rb, the option is not getting set up. We will merge #393.
@mgdevstack  If you are passing aws_session_token option through credentials file which is required in case of temporary security credentials then the issue you are facing is valid and we will be fixing that after merging #393. But if you are not working with temporary security credentials and using only aws_access_key and aws_secret_access_key the error should not come. And we tried both the cases and confirmed that there is only issue with aws_session_token option if passed through credentials file using knife.rb

https://github.com/chef/knife-ec2/pull/393 is now merged in master branch

@dougireton and @mgdevstack Since #393 is merged; can you please close this issue?

I'm going to close this as it should be fixed in knife-ec2 v0.13.0. Let us know if you still have any problems.


fix(chat): remove conversation not found screen while deleting all conversations (Issue #1187)

Description:
Remove conversation not found screen while deleting all conversations
Issues:

#1187

Checklist:

[x] the pull request name complies with Conventional Commits
[x] the pull request name starts with fix(<scope>):, feat(<scope>):, feature(<scope>):, chore(<scope>):, hotfix(<scope>): or e2e(<scope>):. If contains breaking changes then the pull request name must start with fix(<scope>)!:, feat(<scope>)!:, feature(<scope>)!:, chore(<scope>)!:, hotfix(<scope>)!: or e2e(<scope>)!: where <scope> is name of affected project: chat, chat-e2e, overlay, shared, sandbox-overlay, etc.
[x] the pull request name ends with (Issue #<TICKET_ID>) (comma-separated list of issues)
[x] I confirm that do not share any confidential information like API keys or any other secrets and private URLs

/deploy-review


Godot have problem with some characters in Windows username while exporting

My Windows username is "Rafał". While exporting to Android Godot can't find template APK, but I can find this file in filesystem. Godot don't see "ł" character

This seems to be a long-standing problem with non-ascii characters in paths.

i fixed issues regarding to this many times, do they still persist?
how do you reproduce it?
On Thu, Jul 16, 2015 at 5:11 AM, Bojidar Marinov<EMAIL_ADDRESS>wrote:

This seems to be a long-standing problem with non-ascii characters in
paths.
—
Reply to this email directly or view it on GitHub
https://github.com/okamstudio/godot/issues/2254#issuecomment-121872526.

@reduz ~ If you are asking me, I haven't seen it from a long time, but I just remember the many bug reports...

Bug confirmed by #4423.

Testing on Linux to export a game to /home/akien/tmp/Rafał, it worked fine even though the "ł" was not displayed in the FileDialog, likely because I haven't configured a custom font with better UTF-8 support. So it's likely an issue with the file access on Windows.

I believe this bug was fixed by 1c541a2. It was actually not a Windows issue but Android-specific, as the latter uses zip_io for exporting.
We'll soon have a 2.0.4 release which will among other things contain this fix, it would be great if you could test and confirm that the bug is fixed.


twindle-cli image not appearing

Example
node . -i<PHONE_NUMBER>731849728 -o dan1
@twindle-co/developer

Fixed now.


xone - No way to initiate paring on Surface Book 2 with integrated receiver

Hello,
Surface books come with an integrated wireless xbox receiver but no hardware pairing button. This means on the current surface images there is no way to initiate paring. Would it be possible to integrate the patch in the following pull request? medusalix/xone#45
Thanks!

This have to merged into our fork and will be available next update


Rendering failure when data record has a field called "results"

I have a record that has a field called "results" in it.
This results in an error in DatatablesRenderer object of type 'int' has no len().
Here is an example of the data that causes the problem going through the renderer:
GET /api/optimizers/198/
HTTP 200 OK
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"rundatetime": "2020-04-02T18:08:44.574532-04:00",
"startdate": "2005-01-03",
"enddate": "2020-04-01",
"optrange": "(5,250) (5,250)",
"results": 60025,
"runtime": 2130,
"optimizeresults": [
{
the problem is that this field is triggering a reference using the same name in the code (stating line 22 in renderers.py):
    if 'recordsTotal' not in data:
        # pagination was not used, let's fix the data dict
        if 'results' in data:
            results = data['results']
            try:
                **count = data['count'] if 'count' in data else len(results)**
            except:
                count = results
        else:
            results = data
            count = len(results)
        new_data['data'] = results

the logic is picking up the record "results" reference and causes the exception.  Here is a local variable capture of with an assert just before line 25 when the exception occurs:
new_data 	{}
renderer_context 	{'args': (),
'kwargs': {'pk': '198'},
'request': <rest_framework.request.Request object at 0x7f31d6b09048>,
'response': <Response status_code=200, "application/json">,
'view': <portfolio.views.optimize.OptimizeViewSet object at 0x7f31d6b01f28>}
request 	<rest_framework.request.Request object at 0x7f31d6b09048>
results 	60025
self 	<rest_framework_datatables_editor.renderers.DatatablesRenderer object at 0x7f31d6b09438>
view 	<portfolio.views.optimize.OptimizeViewSet object at 0x7f31d6b01f28>
The results variable at this point is the record field "results" (integer value 60025) not the expected record list in the code.
There needs to be a context check that the "results" data entry retrieved is not part of the data record being transferred.

Ignore this.  The data structure I setup is not suitable for this usage (was trying to nest the table data and then reference the nested data in the table.)


[release-1.6] Support k8s version <= 1.15

Manual cherrypick required.
#24228 failed to apply on top of branch "release-1.6":
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
M	pilot/pkg/serviceregistry/kube/controller/controller.go
Falling back to patching base and 3-way merge...
Auto-merging pilot/pkg/serviceregistry/kube/controller/controller.go
CONFLICT (content): Merge conflict in pilot/pkg/serviceregistry/kube/controller/controller.go
Patch failed at 0001 Support k8s version less than 1.15

@hzxuzhonghu please see the K8s support matrix approved by T&R and TOC.
Cheers
-steve

This can be closed, as 1.14 is not supported


Improve installation verification

This aims to fix Cannot destructure property jiraHost of 'undefined' or 'null'.
The installation flow for an Jira Cloud app (like this codebase) has two steps:

Install. Atlassian makes an unauthenticated request to us, providing a shared secret. We store the secret in the database. The secret can't be used until step two.
Enable. Atlassian makes an authenticated request using the shared secret. We then make an authenticated request to their API. If we are successful, we mark the installation as enabled.

We have more than 30 installations that have repository subscriptions but aren't enabled. We don't know for certain what causes this. My current hypothesis is that a race condition causes our verification in step two to never happen.
We send the request status before adding the finish callback:
https://github.com/integrations/jira/blob/c903c49eed1a7bfce5e5e2ffece71158b1736f22/lib/jira/enable.js#L7-L8
Solution

Fix the (potential) bug. This removes the possible race condition by adding the callback before sending a response.

Add endpoint to fix bad installations. This adds POST /api/jira/<id>/verify, accessible to GitHub staff only, to trigger verification for a given Jira installation ID. This should allow us to fix installations that are still valid and clean up those that aren't.

@scepticulous Just saw your comment about tests. I have not added tests for this yet. I spent more time that I'd like to admit trying to get tests for the existing installation endpoint. I got stuck trying to figure out how to ensure my assertions ran after the response "finish" callbacks. Ultimately, I decided to get this out ahead of the tests to plug the errors.
I have the tests stashed and plan to come back to them later this week.


VM scrolling locks up

Describe the issue
When scrolling quickly (flick on a Trackpad) or near the ends (top/bottom) of a page, the UI locks up for 5+ seconds.  Most noticeable in vscode-insiders, but also happens in Google Chrome.
Update 1: Scrolling with a mouse (Logitech MX Master 2S) works without issues or lock ups.
Configuration

UTM Version: 4.1.0[^1]
macOS Version: 13 (Ventura)
Mac Chip (Intel, M1, ...): M1

[^1]: Issue also occurs in 4.0.7, 4.0.8 and 4.0.9, but not as noticeably.  When it does happen in these versions, the lock up is not as easily triggered and does not last as long.
Upload VM
config.plist.zip

This is likely an Apple issue and would be difficult to debug on our end.

I think this is being caused by this commit: https://github.com/utmapp/UTM/commit/6d6661247ff09e6638765ac3c223f2fef84f836d
I have macOS 13.1 with a macOS 13.1 guest running on an M2 MacBook Air.  I don't see any problems before release 4.0.6 and if I rebuild the latest code without this change, I no longer see the issue.

FWIW, I am using a bluetooth connected Magic Trackpad.  However, it does also happen to me when I'm using the built-in trackpad on my 2021 MBP 16".

Tried again and I was wrong.  It does still happen with the built in trackpad.  I reverted to UTM v3.2.4 as it has no problems for me.
@osy, any chance the trackpad config can be made optional?  macOS VMs on arm Macs are unusable for me with this issue.

I'm not sure what the added trackpad feature was in v4.  I don't have the Trackpad settings option in my System Settings.

Installed the latest beta (4.2.0) and the scrolling issues have been resolved for me.  Doesn't feel like scrolling in the host OS, but it's not locking up anymore.  However, I'm having the right-click issues described by #4645.  Going on memory...I think UTM v3 had the click issues, but they were resolved for me in v4.0.x and v4.1.x.
Sometimes when I right-click, the following sequence occurs:

nothing happens, I right-click again
nothing happens, I right-click again
context menu appears
context menu disappears when I move my cursor onto it to select from the menu
I right-click again
context menu appears
I can now select from the menu

Doesn't happen all the time, but it reliably happens every time I type, stop typing, right-click without first moving the cursor.  I'll try to find a 100% reproducible pattern.

@jtran19 how is your right click configured? Is this on a trackpad or mouse or Magic Mouse?

Okay, I think I was able to reproduce it and this new commit seems to fix it. Let me know after the next update.

@jtran19 how is your right click configured? Is this on a trackpad or mouse or Magic Mouse?

In my host OS, I have
Secondary Click = "Click with Two Fingers"
Tap to click = disabled
In my VM, I only have mouse settings (no trackpad):

This happens on trackpad (Magic Trackpad and built-in MacBook Pro trackpad).  No scrolling/clicking issues when I use my Logitech MX Master 2S.
Also, is there supposed to be some kind of "trackpad config" in the VM settings?  This is the only thing I see related to input devices:

I can confirm v4.2.1 fixes the click issue for me (#4645) but breaks scrolling on trackpad.

@jtran19 so if I understand correctly, scrolling issue fixed -> click issue and click issue fixed -> scrolling issue? Basically there’s no way to fix them both at once?

@osy I've seen the same thing playing with the code.  VZMacTrackpadConfiguration will fix the click issue, but it causes the scroll issue.

I have not looked at the code, but if it's a single change for both issues, then I don't see how they could both be fixed at once.  Perhaps a current limitation in the Apple visualization library?

Ok, looking at what you did in commit https://github.com/utmapp/UTM/commit/ae8cce8b3881e320cc78c4c1c7edbddf264c36f8 and some quick Googling on VZMacTrackpadConfiguration, I don't think the 2 issues can be fixed at the same time if they're both related to the pointing device that the VM is configured with.

Okay would you agree that fixing click issue is higher priority than fixing scrolling issue? I’ll file a feedback with apple in the meantime.

You can work around the click issue by holding down control while clicking.  When it locks up scrolling you're stuck until it comes back.

While there might be a workaround for the click issue, I'd prefer to have the click issue fixed over the scroll issue.  I can use a mouse to avoid the scroll issue, but the click issue results in selecting unwanted options from the context menu.

Filed FB12073793 with Apple

Can confirm 4.2.2 (78) no longer locks up. Scrolling is subtly different from the native one, but finally usable (4.1.6 was locking up like every minute for 20s). Thanks a lot 🙇

Minor annoyance: if you use the VM in a window, the scrolling might \appear\ to be locked up because it seems that the VM doesn't capture scroll events when defocused, unlike other apps where I can hover and scroll without activating the window.
But if you click first, everything works.
Don't remember if this was the case with 4.1.6.

Reply from apple:

Thank you for your message. Upon further review, we require additional files to help us investigate your feedback. Please reproduce the issue, provide a screenshot/screen recording, capture a sysdiagnose, and use Feedback Assistant to gather the requested file.

Can someone provide this?

Any update ? Can't barely use macOS 13 VM on M2

I've been having the same issue for months, running MacOS 13.5 in UTM 4.4.4 on M2. Scrolling within the VM freezes the VM for 10+ seconds, particularly scrolling in certain apps like VSCode. Is this simply the expected behavior at this point, or is there a workaround I can use?

I'm also experiencing the scroll issue on 4.5.4 using the Apple Magic Mouse.


Mirror https://github.com/dart-lang/webdev to dart.googlesource.com

The test package will soon require the frontend_server_client dependency which is a part of this repo.

cc @whesse

This is completed, forgot to close issue.


west/commands/sign: Use CONFIG_MCUBOOT_SIGNATURE_KEY_FILE when provided

The commit adds change to signt.py that will pick signing key
from CONFIG_MCUBOOT_SIGNATURE_KEY_FILE, if such option is provided;
if the --key command line option is provided to imgtool, then the
command line will override the .config selection.
Signed-off-by: Dominik Ermel<EMAIL_ADDRESS>

Why this PR? The point of the kconfig option is to allow the build system to automatically call west sign from cmake/mcuboot.cmake. If the user is using west sign manually, they should be able to use whatever keys they want and not get a warning IMO.
Is this causing problems for someone? Can you explain the motivation a bit more than is already done in the PR description?

Why this PR? The point of the kconfig option is to allow the build system to automatically call west sign from cmake/mcuboot.cmake. If the user is using west sign manually, they should be able to use whatever keys they want and not get a warning IMO.

The warning will only appear if the key in .config is provided and when it is different than the one that is given to the command line. It happened to me some time ago that I have been trying to sign with different key then the one I should use, causing app to not boot. The warning is just for those who provide --key, to the tool, that they have been previously using different key, to let them know.

Is this causing problems for someone? Can you explain the motivation a bit more than is already done in the PR description?

Not really a problem, inconvenience rather: when I have started with Zephyr my first app to build was smp_svr and I have found the option and tried to use it to sign the software but it did not work; so I have started using --key option and have used it since.
But the option is there and it is available in Zephyr when invoking mkconfig on any app that works with mcuboot. We can either block it from being visible or use it; I have decided to use it.
Now you may provide key in overaly or set it via -D or set/override it with --key.

Actually the documentation here: https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_MCUBOOT_SIGNATURE_KEY_FILE.html#cmdoption-arg-CONFIG_MCUBOOT_SIGNATURE_KEY_FILE says that this is how does west sign supposed to behave (except for the warning).
Seems that this PR becomes bugfix.

OK seems that I have missed the point of the option. I do agree there is no reason for the change.


Update the layout and content within the root scripts directory

Update the README.md and remove the outdated downstream port guide command(s). Instead, reference the google doc that outlines the current process as we iterate on a more concrete process that will eventually live downstream. This is mainly a stop gap to avoid the OCP release cadence where we can't update something like the scripts/README.md during periods inside of feature/code freeze without a valid bug.
Remove the unused bash scripts. This mainly includes the helper scripts that attempted to automate the deliverance of upstream commits to the staging repositories as the presence of these scripts were generating confusion on the process. Remove the nested scripts/olm directory as those also appear to be unused.
Update the scripts/*.patch.yaml YQ patch files that are used to update the rendered staging OLM helm charts to make the requisite downstream-specific modifications to their own directory. Those patch files now live in scripts/patches and the manifest generation script has been updated to point to that new location.

cc @kevinrizza - IIRC, we had talked about removing the pull/push remote scripts that were causing confusion during the last team retro and updating the README.md to simply point to the google doc that's currently housing the downstream guide.

/retest

/retest

/test unit-olm


feat: default to non-interactive if stdout is not a terminal

Summary
Default to non-interactive output if stdout is not a terminal.
How did you test this change?
I've happen to have 1.2.0 installed and at the moment the latest version is 1.3.1.
; rm ~/.config/lacework/version_check
; lacework configure show account > /tmp/account.txt
; cat /tmp/account.txt
qan.qan.corp

A newer version of the Lacework CLI is available! The latest version is v1.3.1,
to update execute the following command:

  brew upgrade lacework-cli
; rm ~/.config/lacework/version_check
; go run cli/main.go configure show account > /tmp/account.txt
; cat /tmp/account.txt
qan.qan.corp

After thinking about it a bit it's not the daily version check that's the problem, it's that we shouldn't assume we're interactive if stdout isn't a terminal.
Issue
https://lacework.atlassian.net/browse/RAIN-45976

Thanks @afiune .


Add new parent Territory for Statements and Territory in detail box

@jancimertel could you please add another entity into entities in IResponseDetail model - data.territory.parent.id in case of class === Territory and data.territory.id in case of class === Statement?


asreview lab: returns blank browser screen

Describe the bug
A clear and concise description of what the bug is.
What happened? And what did you expect to happen?
To Reproduce
Steps to reproduce the problem:
After setting up asreview, I ran
asreview lab on the terminal and it brings up:
Screenshots

If applicable, add screenshots to help explain your problem.
Version information

OS: Linux 18.04
ASReview version [e.g. 0.6.2]

Additional context
Add any other context about the problem here.
asreview/asreview_venv/lib/python3.7/site-packages/Flask-1.1.2-py3.7.egg/flask/templating.py", line 89, in _get_source_fast     raise TemplateNotFound(template) jinja2.exceptions.TemplateNotFound: index.html ERROR:root:index.html
any pointers @daob @behrica @emielvdveen @leonardovida @MathieuRietman

@tobimichigan thanks for reporting and sorry for the inconvenience.
@terrymyc or @Sasafrass can you reproduce this on your Linux systems? I haven't seen this before.

Hmm, runs for me on Ubuntu 18.04 with the latest ASReview release. Appears as if there's just no index.html in the install, so maybe it's an older version of ASReview or a faulty installation?

@J535D165 @Sasafrass @daob @behrica
I tried it both locally and on Google Colab.
asreview version: 0.16+5.g0c6c79e

There has to be an explanation as to why this is occurring. The error log is pointing to flask.

Hi @tobimichigan,
We recommend you to use pip to install asreview as it is the most straightforward method:
pip install asreview
# Once installed, start the application with the following command (in CMD.exe or Terminal):
asreview lab

The official documentation guides you through the recommended installation steps (you can find it here) and offers other possibilities (e.g. an install using Docker or on a server).
In your case, you cloned the repository and are trying to start asreview LAB using something like python asreview lab without first having compiled the react components of the webapp (via npm). As previously said, this is not the recommended way to install it, but if you want to have it working without using pip you should do the following:
# From the root folder of the repository, compile assets:
python setup.py compile_assets
# Now that the assets are compiled, you can start the flask app with:
python asreview lab

@leonardovida @J535D165 @Sasafrass @daob        Pls take a look:

As per python setup.py compile_assets, this was the output:

I hope you now see this is a real bug...pls suggest better ideas.

@leonardovida @J535D165 @Sasafrass @daob
The only thing that ran successfullly is the sphinx with help of make in the asreview dir that helped to generate the help files for asreview:..besides which nothing is displayed both in colab and my local machine.

@tobimichigan If you install using pip install asreview to run asreview LAB you should only use asreview lab
If you want to build using setup.py
python setup.py install
#
python setup.py compile_assets

@leonardovida
The first solution returned an error

The second pathway worked (which involved using DockerCE, which you didn't list as a solution). Below is the product of Docker pull:

its now obvious only your Docker pull is working. You guys will need to look at the other alternative of installation as there seems to be a bug there.

Hi @tobimichigan, it makes sense to add npm install to the build file. https://github.com/asreview/asreview/blob/0c6c79e98f867e977d5b5cda5a2d56e0aec66dac/asreview/webapp/compile_assets.sh. @tobimichigan can you test and do a PR?
Our implementation was inspired by airflow.

https://github.com/apache/airflow/blob/649335c043a9312ef272fa77f2bb830d52cde056/airflow/www/compile_assets.sh.
https://github.com/apache/airflow/blob/649335c043a9312ef272fa77f2bb830d52cde056/setup.py#L89-L106

The equivalent of yarn install --frozen-lockfile in npm is https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable.

I installed asreview via pipenv on Ubuntu 23.04 and python 3.11. Basically, cloned the repo, entered and:
pipenv install -e .
pipenv run asreview lab

Got the same problem as previous users, the web interface only displays this:
{
  "message": "index.html"
}

And in the terminal:
ERROR:asreview.webapp.start_flask:Exception on / [GET]
Traceback (most recent call last):
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/app.py", line 1486, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
                                                ^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/repos/asreview/asreview/webapp/start_flask.py", line 373, in index
    return render_template("index.html")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/templating.py", line 150, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/templating.py", line 64, in get_source
    return self._get_source_fast(environment, template)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gca/.local/share/virtualenvs/asreview-ulBNM-0n/lib/python3.11/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: index.html
ERROR:root:index.html

Any suggestion?

5000, the one that appeared in the terminal:


refactor: Reuse the the builder configuration in local mode

Hi @nkz-soft 👋 I finally had some time to look into and test the pull request related to the Compose feature. While reviewing and testing the PR, I made some changes that I would like to discuss with you first:

The DockerComposeBuilder.Build() member can determine which DockerComposeContainer implementation should be returned. I don't believe we need DockerCompose and the proxy implementation. Additionally, to 2. this reduces the amount of necessary configurations.
I propose to reuse the builder configuration in the local Docker Compose mode. The command line builder is probably unnecessary as well. The idea is to set the entrypoint configuration to the compose command, such as docker compose --file docker-compose.yml, and use the command configuration for the actual compose command options, e.g., up [OPTIONS]. This has the advantage that developers can easily append options using the WithCommand(string) API.

Using this approach makes exposing additional (compose) options, such as RemoveImages, unnecessary as well. We can implement WithRemoveImages(RemoveImages) simply by:

public DockerComposeBuilder WithCleanUp(RemoveImages removeImages)
{
    return WithCommand("--rmi", removeImages);
}

WDYT? Out of simplicity, I removed some parts related to the tests. I would like to discuss a few things first before we finalize the tests again.

Hi @HofmeisterAn.
Unfortunately, I've been very busy for the last month.
Let's agree on which Java implementation features we will support?
The DockerComposeCommandLineBuilder class was made just to be able to handle methods like WithOptions, RemoveImages and others. If we don't support these features in this version, there's no question. But I think we will have to come back to it later anyway.
Anyway, this seems like a first step and we can add the necessary functionality later if needed.


Fixes and features

I might have got a bit carried away, but that's what lazy Sundays are for, right?! :joy:
I've split this up into one-commit-per-change, but let me know if you want any of these commits split out into separate PRs, instead of all bundle into the same PR. (EDIT: And let me know if you want me to change the Exception message to something more user-friendly)
Also, this has now been (successfully) tested on 64-bit Raspberry Pi OS Bookworm on a Pi 5, on 64-bit PiOS Bookworm Lite on a Pi 4B, and 32-bit PiOS Bookworm Lite on a Pi 1B+ :tada:

Also, once ffaa0e8 has been merged, you'll want to update your screenshot in the README :wink:


Fix NewsHeadlineListener in cli

There is a better branch here: https://github.com/shirosaidev/stocksight/pull/19


Simulate ninja -t clean by removing the database.

There's a belief that it is quite hard (if not impossible) to make a correct -t clean simulation. The next best thing to at least avoid breaking scripts that request ninja -t clean is to remove the build database. That's what we do in this patch.
rdar://20224847

@swift-ci please smoke test


Recording time camera.ui for HKSV

@seydx
I have set recording time in camera.ui to 40sec but this have not impact, always record 20sec.

@seydx
I have set recording time in camera.ui to 40sec but this have not impact, always record 20sec.

You mean in the UI? Recording time in the ui is only for recording through camera.ui (if HSV is not enabled)

OK, now is clear. May be lock or hide this function if HSV is ON

OK, now is clear. May be lock or hide this function if HSV is ON

i will link the recording time to "motionTimeout" to change the recording time also for HKSV
Marking this as enahncement

Added in v5.0.8
example-config.json
Note: The length of the recording could vary if prebuffering is active (recording time + prebuffering)


Select2 tree support

I will like to use your package to implement a tree, is this something planned ?
For now I'm dooing it like so:
        Select2::make(trans('session.label'), 'session_id')
            ->default(2)
            ->configuration([
                'placeholder' => __('Choose options'),
                'allowClear' => true,
                'minimumResultsForSearch' => 1,
                'multiple' => false,
            ])
            ->withMeta([
                'options' => [
                    [
                        'text' => 'groupe 1',
                        'children' => [
                            [
                                 'id' => 1,
                                 'text' => 'groupe 1.1',
                            ],
                            [
                                 'id' => 2,
                                 'text' => 'groupe 1.2',
                            ],
                            ...
                        ]
                    ],
                ],
            ]),

Evrything works fine but for some reason setting the default value does not work, the change is not triggered by vue.js
Do you have any idea on how I could fix this without having to touch at your package ?
Possible fix:
change resources/js/FormField
            // This is necessary to get a multiselect to show its selected values on initialization
            if (this.options.multiple) {
                select2.val(this.value).trigger('change');
            }

To
        // This is necessary to get a multiselect or a tree to show its selected values on initialization
        if (this.options.multiple || this.options.tree) {
            select2.val(this.value).trigger('change');
        }

@angauber
Done in Release v1.18

@angauber I'm close the issue.
If you have any question do not hesitate


View Requests: last edit timestamp / user

Description
The newest designs call for a last edited timestamp on View Requests.  This task implements that.
Acceptance Criteria

[ ] schema migration for last edited timestamp / user;
[ ] update DAOs to reflect this;
[ ] update @/lib/model/StudyRequest to reflect this;
[ ] ensure tests pass;
[ ] when editing, update last edited timestamp / user;
[ ] show last edited timestamp / user in frontend.

Additional Notes
The "last edit timestamp / user" is meant to be a really lightweight way of tracking edits.  While it would be possible to do full versioning with undo / redo functionality, that's probably overkill unless we uncover a clear user / business need to have such an audit trail.

There are two major ways to do such a lightweight implementation:

add lastEditorId, lastEditedAt columns to study_requests;
create a new study_request_edits table with id, createdAt, studyRequestId, and userId columns.

has the advantage of being extremely straightforward, while 2) has the advantage of more flexibility (e.g. if we later need to add audit trail functionality).

Audit trails might end up being useful elsewhere (e.g. manual validation of collision records, viewing MVAs, user / business metrics).  In this respect, 2) would be less about "let's make an audit trail subsystem!" and more about "let's make it possible to do that later".
Still, for the present use case, IMHO 1) is enough as proof of concept - we can always expand this out into a separate table later if needed.


Authority refactor

First of the authority related changes.
This PR will be followed by:

B2C authority: removing 'validateAuthority' check for B2C authority
instance_aware
Unit tests

Note: This PR replaces #951 for a cleaner merge with dev

@sameerag  can this be merged

@DarylThayil Merged now


GraphQL query works but mutation not works

query = ShopifyAPI::GraphQL.client.parse <<~GRAPHQL
          mutation($fulfillment: FulfillmentV2Input!) {
            fulfillmentCreateV2(fulfillment: $fulfillment) {
              fulfillment {
                id
              }
              userErrors {
                field
                message
              }
            }
          }
        GRAPHQL

fulfillment_v2_input = {
          lineItemsByFulfillmentOrder: [
            {
              fulfillmentOrderId: "gid://shopify/Order/2104425589592",
              fulfillmentOrderLineItems: [
                {
                  id: "gid://shopify/LineItem/4567148053162",
                  quantity: 1
                }
              ]
            }
          ]
        }

result = ShopifyAPI::GraphQL.client.query(query, variables: { fulfillment: fulfillment_v2_input }).data
puts result

But the result is
{}

I have noticed that there are errors in my query.
 {"errors"=>[{"message"=>"Variable fulfillment of type FulfillmentV2Input! was provided invalid value", "locations"=>[{"line"=>1, "column"=>62}], "extensions"=>{"value"=>{"lineItemsByFulfillmentOrder"=>[{"fulfillmentOrderId"=>"gid://shopify/Order/2104425589592", "fulfillmentOrderLineItems"=>[{"id"=>"gid://shopify/LineItem/4567148053162", "quantity"=>1}]}], "trackingInfo"=>{"company"=>nil, "number"=>nil}}, "problems"=>[{"path"=>[], "explanation"=>"invalid id"}]}}]}
It looks like there is an issue in "id"=>"gid://shopify/LineItem/4567148053162"
But I have checked LineItem Id so it is correct.

Do you have an example of what the input is that you are passing?

Hi @tanema I am using this input.
f```
ulfillment_v2_input = {
lineItemsByFulfillmentOrder: [
{
fulfillmentOrderId: "gid://shopify/Order/2104425589592",
fulfillmentOrderLineItems: [
{
id: "gid://shopify/LineItem/4567148053162",
quantity: 1
}
]
}
]
}

It seems like that gid should be gid://shopify/FulfillmentOrder/2104425589592 and the other gid should be gid://shopify/FulfillmentOrderLineItem/4567148053162
See https://shopify.dev/tutorials/manage-fulfillments-with-fulfillment-and-fulfillmentorder-resources#create_fulfillment

Thank you @tanema
It looks like that issue is gone.
But sorry I am having a new issue. (Not sure I have to open the new issue but I am writing here)
FulfillmentCreateV2 access denied
This is my App scopes.
config.scope = "read_customers, read_products, write_products, read_orders, read_all_orders, write_orders, read_inventory, write_inventory, read_locations, read_fulfillments, write_fulfillments"
Could you please help me fix this new issue?
Is there any other scope I have to add?
Thank you!

I have fixed by adding new scopes. Thank you!

Hi @yu-coder
Could you tell me which scope you added to fix this? I am facing the same error.


bug: not usable with remix latest upgrade (v2.0)

Describe the bug
Remix was updating on the 15th of September, and we haven't been able to upgrade because of the peerDependencies remix-auth has. More precisely, remix-auth needs a version bump for the @remix-run/react package.
Your Example Website or App
https://github.com/theosenoussaoui/remix-auth-bug-report
Steps to Reproduce the Bug or Issue

Clone the provided repo.
Try to npm install.

Expected behavior
Should work with the latest @remix-run packages.
Screenshots or Videos
No response
Platform

Any platform.

Additional context
No response

That lets it install, but I haven't had a chance to test functionality yet.

Did you encounter any problems yet with this? I'd also like to upgrade my project to 2.0.

I don't see why there would be any problems. I've been using this package with all the remix v2 flags for a few months now. Seems like the peer dependency just needs to be loosened to account for the new version.

I think this was solved with the release of 3.6.0 a few hours ago :-)


menus empty if generate_menu not called within same block.

the docs say that {% generate_menu %} needs to be called within a block. I think this is not correct, as it seems to need to be called within the same block you are using the menu.
Using a simple pattern to demonstrate this:
# base.html template

  {% block generate_menu %}
    {% generate_menu %}
  {% endblock %}

  {% block content %}
  Empty page.
  {% endblock %}

Now use a template that inherits this:
# application.html
{% extends 'base.html' %}

{% block content %}
Now you should see menus, but you don't.
{{ menus }}
{% endblock %}

Here you just override the content  block. The generate_menu block should be inherited by extend and be untouched, so generate_menu should be called - which I can confirm by debugging.
The problem seems to be that the context which is passed to MenuNode.render() does't seem to get passed through to the correct template in application.html.
If I add {% generate_menu %} within the content block in application.html, everything is ok. Even if I add {% generate_menu %} in a new generate_menu block in application.html (which is "a block", like the docs say), it does NOT work.
Is this intended behaviour? Or a bug?

I know a bit more now. See in an example here with a base.html:
{% load menu %}

{% block menu_wrapper %}
  {% generate_menu %}
{% endblock %}

{% block body %}{% endblock %}

...and here a template that extends it:
{% extends 'base.html' %}
{% load menu %}

{% block body %}
{{ menus }}
{% endblock %}

This does not work, as stated earlier. BUT, if you put the block containing the generate_menu as wrapper around a block that is extended in a sub template, it works:
{% load menu %}

{% block menu_wrapper %}
  {% generate_menu %}
  {% block body %}{% endblock %}
{% endblock %}

You might ask, why the heck do you need a separate block for generate_menu? Because I had used django_hosts in a complicated, dynamic setup, and wanted to let the sub template decide if it needs menus at all. If not, it would eventually override the menu_wrapper  with empty content, so suppressing menu generation.
I ditched django_hosts later, but the separate block  remained in my base html - so the bug stayed with me.
I think I could live with seeing this as not a bug, but a "certain behaviour". But it should be stated in the docs as the sentence there is a bit misleading:
Note that generate_menu must be called inside of a block.
I would change that. it's even not good practice, as suggested there, to run generate_menu within a sub template. It is sufficient to run once, in the base (most root) template: BUT, it must be within a block, that's true. So the only way I can think of is like in my second example above: to put a menu_wrapper block around everything else. - And just don't override this block...

AAARGH. Sorry for the spam. It's much easier...
{% load menu %}

  {% generate_menu %}
  {% block body %}{% endblock %}

I was blinded by the docs because they say it has to be within a block. It hasn't in fact. Or only, if using in a sub template that extends another.
So: best practice is: put it into the main, root template, just anywhere. No block needed. Exactly said, DON'T put it in a block in your root template, as this will most certainly be overridden.

I was blinded by the docs because they say it has to be within a block. It hasn't in fact. Or only, if using in a sub template that extends another.

Incredible! I didn't know this, either! Thank you a lot!

So: best practice is: put it into the main, root template, just anywhere. No block needed. Exactly said, DON'T put it in a block in your root template, as this will most certainly be overridden.

I will make sure to update the docs


add guix package

Here is the guix package definition.
Until it's upstreamed into the official guix repo, people who have guix installed can clone the repo and use guix shell or guix install to run/install it. This isn't really necessary at this stage since if they've already cloned the repo they can just run it from there, but this way they can have it as part of their guile environment.

Perfect!
Is there a reason why the name is manifest.scm?
Shall we call it guix.scm so it's easy for anyone to recognize the package definition file?

Manifests in guix are like bundles of packages, which can be customized.
https://guix.gnu.org/en/manual/devel/en/html_node/Writing-Manifests.html
When you invoke guix shell in a directory with a file named manifest.scm, it will automatically assume that file evaluates to a manifest object and drop you into a shell with that manifest installed (i.e. all the packages it contains).
When you invoke guix shell in a directory with a file named guix.scm, it will automically assume that file evaluates to a package object and drop you into a shell with that package installed.
https://guix.gnu.org/manual/devel/en/html_node/Invoking-guix-shell.html
So guix.scm would be nice, but guix shell might not install guile libs in the right directory, so you're instance of guile might not see it. This is especially true if you're running guix system. However if you also install guile itself along with the guile lib you're trying to build, they will be in sync. So I wrote it as a manifest which contains exactly guile-3.0 and guile-swayer, so that when you run guix shell you'll have the guile-swayer libs and a guile which can see those libs.
I think either way is okay. We could change it to guix.scm, make it just a package (instead of a manifest), and just add a section in the readme saying something like "you might need to run guix shell guile --file=guix.scm if guix does not install the lib in the right location."

Thanks for the explanation and contribution!


Fixed new-lines handling

When using this script with Rocket.Chat, it seems that server doesn't handle newlines properly.
Added new line substitution to \\n
Please test with Slack and Mattermost if possible.

Hello tarabanton,
Thanks for the tips,
We have to use the text="${3//$'\r'/\r}" to work with mattermost

I'm not going to merge these changes in since I don't really intend for this to be used on Mattermost nor do I have a place to test it with Mattermost, but I'm going to reference this PR in the README.


Resolve error "Something went wrong" while broadcasting

Reported by Stephens.btc#7717 on Discord. We plan to leverage https://github.com/hirosystems/stacks-wallet-web/issues/2727 to diagnose the underlying cause

@314159265359879 mind working with Stephens on Discord to confirm whether this issue has been resolved?
@kyranjamie can provide guidance on how to use the new diagnostic logging information (Kyran, perhaps worth writing these instructions up in a Notion doc we can then share publicly?).

As this happened in the past, it wouldn't have been saved.
To debug future issues, the user can hold alt while on the settings menu dropdown, copying the logs, and inspecting details for Transaction broadcast. The UX should be improved here, as failures shouldn't only be communicated in a vanishing toast.

@314159265359879 mind working with Stephens on Discord to confirm whether this issue has been resolved?
@kyranjamie can provide guidance on how to use the new diagnostic logging information (Kyran, perhaps worth writing these instructions up in a Notion doc we can then share publicly?).

Sure thing I will contact them.

This user has confirmed the issue is now resolved for them.