Faits :
A.
Par jugement du 4 avril 2019, le Tribunal correctionnel de l'arrondissement de l'Est vaudois a libéré A._ de l'accusation d'infraction grave à la LStup (RS 812.121).
B.
Statuant le 8 octobre 2019, la Cour d'appel pénale du Tribunal cantonal vaudois a admis l'appel formé par le ministère public contre le jugement du tribunal correctionnel, qu'elle a modifié en ce sens qu'elle a condamné A._ pour infraction à la LStup à une peine pécuniaire de 180 jours-amende à 30 fr. le jour avec sursis pendant 2 ans.
Les faits à l'origine de cette condamnation sont en substance les suivants.
A B._ notamment, entre fin novembre 2013 et le 1er février 2014, à tout le moins, C._ s'est livré à un trafic de cocaïne avec la collaboration de son épouse A._. C._ a fourni un total d'environ 180 g de cocaïne, à raison d'une quinzaine de fois un minimum de 20 boulettes, à D._. Depuis le mois de janvier 2014, A._ a notamment effectué elle-même à tout le moins 2 de ces livraisons à ce dernier, qui travaillait dans le même restaurant qu'elle. La drogue était conditionnée en boulettes de 0,6 g au minimum au domicile de C._ et A._, où se trouvait une partie du stock. Lors de la perquisition de leur logement un parachute de cocaïne de 0,7 g a été découvert.
C.
A._ forme un recours en matière pénale au Tribunal fédéral contre le jugement de la Cour d'appel pénale. Elle conclut, avec suite de frais et dépens, principalement à la réforme du jugement attaqué en ce sens que l'appel est rejeté et le jugement du tribunal correctionnel intégralement confirmé. A titre subsidiaire, elle conclut à l'annulation du jugement attaqué et au renvoi de la cause à la cour cantonale pour qu'elle statue à nouveau.
Considérant en droit :
1.
La recourante reproche à la cour cantonale d'avoir apprécié les preuves et établi les faits de manière arbitraire. Elle se plaint en outre d'une violation de la présomption d'innocence.
1.1. Le Tribunal fédéral n'est pas une autorité d'appel, auprès de laquelle les faits pourraient être rediscutés librement. Il est lié par les constatations de la décision entreprise (art. 105 al. 1 LTF), à moins qu'elles n'aient été établies en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, soit pour l'essentiel de façon arbitraire au sens de l'art. 9 Cst. Une décision n'est pas arbitraire du seul fait qu'elle apparaît discutable ou même critiquable; il faut qu'elle soit manifestement insoutenable et cela non seulement dans sa motivation mais aussi dans son résultat.
La présomption d'innocence, garantie par les art. 10 CPP, 32 al. 1 Cst., 14 par. 2 Pacte ONU II et 6 par. 2 CEDH, ainsi que son corollaire, le principe " in dubio pro reo ", concernent tant le fardeau de la preuve que l'appréciation des preuves au sens large (ATF 144 IV 345 consid. 2.2.3.1 p. 348 s.; 127 I 38 consid. 2a p. 40 s.). Lorsque l'appréciation des preuves et la constatation des faits sont critiquées en référence au principe " in dubio pro reo ", celui-ci n'a pas de portée plus large que l'interdiction de l'arbitraire (ATF 144 IV 345 consid. 2.2.3.3 p. 351 s.; 143 IV 500 consid. 1.1 p. 503; 138 V 74 consid. 7 p. 82).
Le Tribunal fédéral n'entre en matière sur les moyens fondés sur la violation de droits fondamentaux, dont l'interdiction de l'arbitraire, que s'ils ont été invoqués et motivés de manière précise (art. 106 al. 2 LTF). Les critiques de nature appellatoire sont irrecevables (ATF 145 I 26 consid. 1.3 p. 30; 142 III 364 consid. 2.4 p. 368).
1.2. La recourante reproche à la cour cantonale d'avoir établi sa culpabilité sur la seule base des déclarations de D._, qui, selon elle, ne seraient pas crédibles.
Dans le cadre de l'appréciation des déclarations de D._, la cour cantonale a relevé que celui-ci, qui n'était au demeurant pas consommateur de drogue, s'était lui-même mis en cause par ses propres déclarations relatives à l'activité de la recourante et de son ex-mari, de sorte que l'on ne comprend pas pourquoi il aurait fait de telles révélations si elles n'avaient pas correspondu à la réalité. Elle a noté par ailleurs que ses allégations étaient plutôt constantes, certaines variations, qui concernent des détails pouvant s'expliquer par l'écoulement du temps depuis les faits. Elle a mentionné la précision de certaines informations fournies par le témoin, notamment celles qui ont trait à l'appartement de la recourante et de son ex-mari, à leur apparence physique et aux véhicules qu'ils conduisaient. Enfin, elle a souligné le fait que D._, qui ne connaissait pas l'identité de ses fournisseurs, a pu les identifier formellement sur photos, indiquer à la police où ils habitaient et décrire précisément leur manière de procéder. Ce raisonnement ne prête pas le flanc à la critique.
La recourante soutient qu'il serait faux de considérer que D._ s'est mis en cause car ce n'est qu'après avoir été lui-même interpellé et que son appartement ait été perquisitionné qu'il a dénoncé la recourante et son ex-mari comme étant ses fournisseurs, cherchant en réalité à " diluer ses responsabilités ". Cet argument n'est pas convaincant. En effet, s'il est vrai qu'au moment où le témoin a impliqué ses fournisseurs il avait déjà lui-même fait l'objet d'une interpellation et d'une perquisition, il n'en demeure pas moins que ses indications relatives à la drogue que ceux-ci lui avaient fournie ont permis d'établir que son trafic avait porté sur une quantité nettement supérieure à ce qui avait été trouvé chez lui, de sorte qu'il s'est bel et bien incriminé pour des actes qui ne lui auraient probablement pas été imputés, du moins pas dans leur totalité. Dans cette mesure, il est exact qu'il s'est mis en cause et, contrairement à ce que soutient la recourante, aucune constatation du jugement attaqué ne donne à penser qu'il aurait eu des raisons d'en vouloir à la recourante et à son ex-mari au point de péjorer sa propre situation dans le seul but de leur nuire.
Pour le surplus, les éléments invoqués par la recourante, à savoir le fait que D._ ait déjà été condamné précédemment et qu'il ait été traité pour une dépression une première fois il y une vingtaine d'années puis une seconde à la suite de son arrestation ne suffisent pas pour discréditer ses déclarations au point qu'il faille considérer qu'il est insoutenable de leur accorder foi.
Par ailleurs, c'est de manière pertinente que la cour cantonale a relevé un certain nombre d'éléments qui confirment les déclarations de D._, notamment la présence dans l'appartement de la recourante et de son ex-mari d'une boulette de cocaïne et d'une balance électronique, à propos desquelles ils ne donnaient aucune explication, ou le fait que le témoin ait pu identifier l'ex-mari de la recourante alors que ce dernier prétendait ne pas le connaître et ne l'avoir jamais rencontré ou encore qu'il soit parvenu à indiquer l'endroit où se trouvait l'appartement de la recourante et de son ex-mari et à le décrire alors que selon ce dernier, il ne se serait jamais rendu chez eux.
Compte tenu de ces divers éléments, qui étaient suffisants pour fonder la conviction de la cour cantonale, l'appréciation des preuves à laquelle celle-ci a procédé n'est pas insoutenable et ne saurait être qualifiée d'arbitraire, à tout le moins dans son résultat. Dans ces circonstances, il n'y a pas lieu d'examiner les autres arguments, au demeurant de nature largement appellatoire et partant irrecevables, soulevés par la recourante.
2.
Mal fondé, le recours doit être rejeté dans la mesure où il est recevable. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit être rejetée (art. 64 al. 1 LTF) et la recourante, qui succombe, supportera les frais judiciaires (art. 66 al. 1 LTF), dont le montant sera toutefois fixé en tenant compte de sa situation financière qui n'apparaît pas favorable.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge de la recourante.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal vaudois.
Lausanne, le 5 mars 2020
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
La Greffière : Paquier-Boinay